@integrity-labs/agt-cli 0.28.1003 → 0.28.1004
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 +5 -5
- package/dist/{chunk-BMDLKZHZ.js → chunk-532V7ZSC.js} +74 -1
- package/dist/chunk-532V7ZSC.js.map +1 -0
- package/dist/{chunk-CXU7NLNR.js → chunk-HHBAQ6ZV.js} +2 -2
- package/dist/{chunk-PU5DFL6O.js → chunk-N4PG4TAD.js} +4 -4
- package/dist/{claude-pair-runtime-QUYSD5OB.js → claude-pair-runtime-EUYI3B4I.js} +2 -2
- package/dist/lib/manager-worker.js +14 -14
- package/dist/mcp/direct-chat-channel.js +73 -0
- package/dist/mcp/index.js +73 -0
- package/dist/mcp/origami.js +73 -0
- package/dist/mcp/slack-channel.js +73 -0
- package/dist/mcp/telegram-channel.js +73 -0
- package/dist/{persistent-session-CRF4B3SP.js → persistent-session-JUGGNJSB.js} +3 -3
- package/dist/{responsiveness-probe-4LTZNFRC.js → responsiveness-probe-QLOVCTVA.js} +3 -3
- package/dist/{session-auth-dead-ZZVXXEYG.js → session-auth-dead-7F2QBEAZ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-BMDLKZHZ.js.map +0 -1
- /package/dist/{chunk-CXU7NLNR.js.map → chunk-HHBAQ6ZV.js.map} +0 -0
- /package/dist/{chunk-PU5DFL6O.js.map → chunk-N4PG4TAD.js.map} +0 -0
- /package/dist/{claude-pair-runtime-QUYSD5OB.js.map → claude-pair-runtime-EUYI3B4I.js.map} +0 -0
- /package/dist/{persistent-session-CRF4B3SP.js.map → persistent-session-JUGGNJSB.js.map} +0 -0
- /package/dist/{responsiveness-probe-4LTZNFRC.js.map → responsiveness-probe-QLOVCTVA.js.map} +0 -0
- /package/dist/{session-auth-dead-ZZVXXEYG.js.map → session-auth-dead-7F2QBEAZ.js.map} +0 -0
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
rotateDailySession,
|
|
24
24
|
sessionFileExists,
|
|
25
25
|
todayLocalIso
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-532V7ZSC.js";
|
|
27
27
|
import {
|
|
28
28
|
classifyUnanswerablePane,
|
|
29
29
|
findUsageLimitResetHint,
|
|
@@ -5776,4 +5776,4 @@ export {
|
|
|
5776
5776
|
stopAllSessionsAndWait,
|
|
5777
5777
|
getProjectDir
|
|
5778
5778
|
};
|
|
5779
|
-
//# sourceMappingURL=chunk-
|
|
5779
|
+
//# sourceMappingURL=chunk-HHBAQ6ZV.js.map
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
parseEnvFileEntries,
|
|
16
16
|
parseEnvIntegrations,
|
|
17
17
|
shellQuote
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-HHBAQ6ZV.js";
|
|
19
19
|
import {
|
|
20
20
|
BIND_FAILURE_QUARANTINE_THRESHOLD,
|
|
21
21
|
INTEGRATIONS_SECTION_END,
|
|
@@ -75,7 +75,7 @@ import {
|
|
|
75
75
|
sessionTranscriptDir,
|
|
76
76
|
worseConnectivityOutcome,
|
|
77
77
|
wrapScheduledTaskPrompt
|
|
78
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-532V7ZSC.js";
|
|
79
79
|
import {
|
|
80
80
|
classifyUnanswerablePane,
|
|
81
81
|
summarizeUnanswerablePane
|
|
@@ -6974,7 +6974,7 @@ function exchangeFailureKind(err) {
|
|
|
6974
6974
|
}
|
|
6975
6975
|
|
|
6976
6976
|
// src/lib/api-client.ts
|
|
6977
|
-
var agtCliVersion = true ? "0.28.
|
|
6977
|
+
var agtCliVersion = true ? "0.28.1004" : "dev";
|
|
6978
6978
|
var lastConfigHash = null;
|
|
6979
6979
|
function setConfigHash(hash) {
|
|
6980
6980
|
lastConfigHash = hash && hash.length > 0 ? hash : null;
|
|
@@ -11725,4 +11725,4 @@ export {
|
|
|
11725
11725
|
managerInstallSystemUnitCommand,
|
|
11726
11726
|
managerUninstallSystemUnitCommand
|
|
11727
11727
|
};
|
|
11728
|
-
//# sourceMappingURL=chunk-
|
|
11728
|
+
//# sourceMappingURL=chunk-N4PG4TAD.js.map
|
|
@@ -259,7 +259,7 @@ async function spawnPairSession(session) {
|
|
|
259
259
|
return { ok: true };
|
|
260
260
|
} catch {
|
|
261
261
|
}
|
|
262
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
262
|
+
const { resolveClaudeBinary } = await import("./persistent-session-JUGGNJSB.js");
|
|
263
263
|
const claudeBin = resolveClaudeBinary();
|
|
264
264
|
const pairEnv = {
|
|
265
265
|
...process.env,
|
|
@@ -581,4 +581,4 @@ export {
|
|
|
581
581
|
startClaudePair,
|
|
582
582
|
submitClaudePairCode
|
|
583
583
|
};
|
|
584
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
584
|
+
//# sourceMappingURL=claude-pair-runtime-EUYI3B4I.js.map
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
safeWriteJsonAtomic,
|
|
64
64
|
setConfigHash,
|
|
65
65
|
tripClass
|
|
66
|
-
} from "../chunk-
|
|
66
|
+
} from "../chunk-N4PG4TAD.js";
|
|
67
67
|
import {
|
|
68
68
|
getProjectDir as getProjectDir2,
|
|
69
69
|
getReadyTasks,
|
|
@@ -141,7 +141,7 @@ import {
|
|
|
141
141
|
takeZombieDetection,
|
|
142
142
|
toOpencodeModel,
|
|
143
143
|
writeEgressAllowlist
|
|
144
|
-
} from "../chunk-
|
|
144
|
+
} from "../chunk-HHBAQ6ZV.js";
|
|
145
145
|
import {
|
|
146
146
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
147
147
|
AnchorSessionClient,
|
|
@@ -240,7 +240,7 @@ import {
|
|
|
240
240
|
subagentActivityAgeSeconds,
|
|
241
241
|
sumTranscriptUsageInWindow,
|
|
242
242
|
transcriptActivityAgeSeconds
|
|
243
|
-
} from "../chunk-
|
|
243
|
+
} from "../chunk-532V7ZSC.js";
|
|
244
244
|
import "../chunk-DHWNVVX4.js";
|
|
245
245
|
import {
|
|
246
246
|
reapOrphanChannelMcps
|
|
@@ -13311,7 +13311,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
13311
13311
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
13312
13312
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
13313
13313
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
13314
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
13314
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-QLOVCTVA.js");
|
|
13315
13315
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
13316
13316
|
if (newest === null) return null;
|
|
13317
13317
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -14054,7 +14054,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
14054
14054
|
var lastVersionCheckAt = 0;
|
|
14055
14055
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
14056
14056
|
var lastResponsivenessProbeAt = 0;
|
|
14057
|
-
var agtCliVersion = true ? "0.28.
|
|
14057
|
+
var agtCliVersion = true ? "0.28.1004" : "dev";
|
|
14058
14058
|
function resolveBrewPath(execFileSync2) {
|
|
14059
14059
|
try {
|
|
14060
14060
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -15670,7 +15670,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
15670
15670
|
if (codeNames.length === 0) return;
|
|
15671
15671
|
void (async () => {
|
|
15672
15672
|
try {
|
|
15673
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15673
|
+
const { collectDiagnostics } = await import("../persistent-session-JUGGNJSB.js");
|
|
15674
15674
|
await api.post("/host/heartbeat", {
|
|
15675
15675
|
host_id: hostId,
|
|
15676
15676
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -15812,7 +15812,7 @@ async function pollCycleInner() {
|
|
|
15812
15812
|
}
|
|
15813
15813
|
try {
|
|
15814
15814
|
const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
|
|
15815
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15815
|
+
const { collectDiagnostics } = await import("../persistent-session-JUGGNJSB.js");
|
|
15816
15816
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
15817
15817
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
|
|
15818
15818
|
let tailscaleHostname;
|
|
@@ -15988,7 +15988,7 @@ async function pollCycleInner() {
|
|
|
15988
15988
|
collectPanelessActivityProbes,
|
|
15989
15989
|
getResponsivenessIntervalMs,
|
|
15990
15990
|
occupancyQualificationClassifications
|
|
15991
|
-
} = await import("../responsiveness-probe-
|
|
15991
|
+
} = await import("../responsiveness-probe-QLOVCTVA.js");
|
|
15992
15992
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
15993
15993
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
15994
15994
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -16105,7 +16105,7 @@ async function pollCycleInner() {
|
|
|
16105
16105
|
collectResponsivenessProbes,
|
|
16106
16106
|
livePendingInboundOldestAgeSeconds,
|
|
16107
16107
|
parkPendingInbound
|
|
16108
|
-
} = await import("../responsiveness-probe-
|
|
16108
|
+
} = await import("../responsiveness-probe-QLOVCTVA.js");
|
|
16109
16109
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
|
|
16110
16110
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
16111
16111
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -16261,7 +16261,7 @@ async function pollCycleInner() {
|
|
|
16261
16261
|
}
|
|
16262
16262
|
try {
|
|
16263
16263
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
|
|
16264
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
16264
|
+
const { probeSessionAuth } = await import("../session-auth-dead-7F2QBEAZ.js");
|
|
16265
16265
|
const observations = [];
|
|
16266
16266
|
const pendingCacheCommits = [];
|
|
16267
16267
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -20549,7 +20549,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20549
20549
|
try {
|
|
20550
20550
|
const freshId = rotateSessionForWedge(codeName);
|
|
20551
20551
|
consecutiveWedgeCycles.delete(codeName);
|
|
20552
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
20552
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-QLOVCTVA.js");
|
|
20553
20553
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
20554
20554
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
20555
20555
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -20592,7 +20592,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20592
20592
|
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}`));
|
|
20593
20593
|
void (async () => {
|
|
20594
20594
|
try {
|
|
20595
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20595
|
+
const { collectDiagnostics } = await import("../persistent-session-JUGGNJSB.js");
|
|
20596
20596
|
await api.post("/host/heartbeat", {
|
|
20597
20597
|
host_id: hostId,
|
|
20598
20598
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20643,7 +20643,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
20643
20643
|
}
|
|
20644
20644
|
try {
|
|
20645
20645
|
const hostId = await getHostId();
|
|
20646
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20646
|
+
const { collectDiagnostics } = await import("../persistent-session-JUGGNJSB.js");
|
|
20647
20647
|
await api.post("/host/heartbeat", {
|
|
20648
20648
|
host_id: hostId,
|
|
20649
20649
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -21303,7 +21303,7 @@ async function processClaudePairSessions(agents) {
|
|
|
21303
21303
|
killPairSession,
|
|
21304
21304
|
pairTmuxSession,
|
|
21305
21305
|
finalizeClaudePairOnboarding
|
|
21306
|
-
} = await import("../claude-pair-runtime-
|
|
21306
|
+
} = await import("../claude-pair-runtime-EUYI3B4I.js");
|
|
21307
21307
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
21308
21308
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
21309
21309
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -34746,6 +34746,52 @@ var INTEGRATION_REGISTRY = [
|
|
|
34746
34746
|
}]
|
|
34747
34747
|
}
|
|
34748
34748
|
},
|
|
34749
|
+
{
|
|
34750
|
+
// ENG-10854 / ADR-0110. The POLICY half of the catalog definition: this
|
|
34751
|
+
// registry is what `isPremiumDefinition` reads, so the premium descriptor
|
|
34752
|
+
// here is what makes the per-org opt-in required at all. The CUSTOMER-FACING
|
|
34753
|
+
// half - the seeded `integration_definitions` row that the Add Integration
|
|
34754
|
+
// picker lists - is deliberately NOT in this change. `/integrations/installs`
|
|
34755
|
+
// reads the DB catalog with a status filter; this registry is not a listing.
|
|
34756
|
+
//
|
|
34757
|
+
// The order matters and is not bookkeeping: `isOrgEntitledToPremium` returns
|
|
34758
|
+
// TRUE for a definition it does not know as premium, because a free
|
|
34759
|
+
// integration has no opt-in concept. So a broker shipped ahead of this entry
|
|
34760
|
+
// would serve an org that had never opted in. The broker additionally fails
|
|
34761
|
+
// closed on `isPremiumDefinition` being false, so the two halves cannot come
|
|
34762
|
+
// apart in that direction either.
|
|
34763
|
+
id: "typed-evaluation",
|
|
34764
|
+
name: "Typed Evaluation",
|
|
34765
|
+
category: "knowledge",
|
|
34766
|
+
description: "Ask closed questions about a piece of text and get calibrated answers back \u2014 yes/no, pick-one, or a position on your own scale \u2014 with a probability for each. It never writes text and cannot answer outside the set of options you give it, which is what makes it safe to point at content you do not trust. Typical uses: is this message a repeat request, which category does this belong to, how urgent does this sound. Answers arrive in about half a second, so an agent can branch on one without spending a model turn.",
|
|
34767
|
+
// No customer credential exists: the call runs on Ninjafy's own gateway key.
|
|
34768
|
+
supported_auth_types: ["none"],
|
|
34769
|
+
capabilities: [
|
|
34770
|
+
{
|
|
34771
|
+
id: "typed-evaluation:evaluate",
|
|
34772
|
+
name: "Evaluate Text",
|
|
34773
|
+
description: "Ask closed questions about text the agent already holds and receive typed answers with probabilities (evaluate_text).",
|
|
34774
|
+
access: "read"
|
|
34775
|
+
}
|
|
34776
|
+
],
|
|
34777
|
+
beta: true,
|
|
34778
|
+
// ENG-8842's `included`, and the reason is the consent dialog rather than
|
|
34779
|
+
// the price. `pricing` drives the org admin's acknowledgement modal, where
|
|
34780
|
+
// `usage` renders as "manages and bills by usage" and `monthly` as a
|
|
34781
|
+
// subscription. Both would be false statements here: a call costs about
|
|
34782
|
+
// $0.000076 and nothing is metered or billed, so the opt-in exists to record
|
|
34783
|
+
// a decision about a SUB-PROCESSOR, not about money.
|
|
34784
|
+
//
|
|
34785
|
+
// ADR-0110 Decision 11 keeps the door open deliberately: if a genuinely
|
|
34786
|
+
// high-volume capability arrives later - bulk classification of a customer's
|
|
34787
|
+
// own corpus - it is priced at THAT capability's grain and this definition
|
|
34788
|
+
// stays `included`. Ninja Notes is the precedent (ENG-9278): it acquired a
|
|
34789
|
+
// metered capability and did not flip.
|
|
34790
|
+
premium: {
|
|
34791
|
+
pricing: "included",
|
|
34792
|
+
note: "Typed evaluation is included in your plan \u2014 nothing is metered per question. Turning it on is a decision about data, not cost: the text an agent asks about is sent to Typesafe, through our own gateway, to be scored. It is never used to train a model and we store only the answers, never the text."
|
|
34793
|
+
}
|
|
34794
|
+
},
|
|
34749
34795
|
{
|
|
34750
34796
|
// Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
34751
34797
|
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
@@ -37264,6 +37310,33 @@ var FLAG_REGISTRY = [
|
|
|
37264
37310
|
// "these hosts are unreadable". Both outlive this particular version.
|
|
37265
37311
|
since: "0.28.667"
|
|
37266
37312
|
},
|
|
37313
|
+
{
|
|
37314
|
+
// ADR-0110 Decision 5 (ENG-10854). Gates PLATFORM-INTERNAL consumers of the
|
|
37315
|
+
// typed evaluation capability - inbound triage, kanban classification,
|
|
37316
|
+
// memory-extraction sensitivity gating, and later the conversation
|
|
37317
|
+
// evaluator. Nobody "installs" those; they are ours, so they are gated
|
|
37318
|
+
// centrally.
|
|
37319
|
+
//
|
|
37320
|
+
// IT DOES NOT GATE THE AGENT TOOL, and that separation is the point. The
|
|
37321
|
+
// agent tool's gate is the customer's own premium opt-in plus a per-agent
|
|
37322
|
+
// install (Decision 4). Pointing this flag at the tool as well would give
|
|
37323
|
+
// it two masters and let a staff flag silently override a decision the
|
|
37324
|
+
// customer made about their own data reaching a sub-processor.
|
|
37325
|
+
//
|
|
37326
|
+
// Ships with no readers: the consumers land in later slices, and the flag
|
|
37327
|
+
// exists now so the first of them has a gate to be born behind rather than
|
|
37328
|
+
// acquiring one afterwards.
|
|
37329
|
+
key: "typed-evaluation",
|
|
37330
|
+
description: "ADR-0110: platform-internal consumers of the typed evaluation model (Jev, via our AI Gateway). OFF (default) = no internal consumer calls it; ON = consumers that have shipped may call, each still subject to the per-org quota, per-agent rate limit and audit row enforced in the broker. Does NOT gate the agent-facing tool, which is governed by the premium opt-in and a per-agent install instead. Customer orgs stay off until the Decision 9 vendor gates close (sub-processor listing with DPA coverage, the legal read on emotion inference, and a recorded disclosure).",
|
|
37331
|
+
flagType: "boolean",
|
|
37332
|
+
// Ships dark. Every consumer degrades to its current behaviour when off,
|
|
37333
|
+
// so the safe value and the no-op value are the same one.
|
|
37334
|
+
defaultValue: false,
|
|
37335
|
+
// Turning it on starts sending customer text to an external sub-processor
|
|
37336
|
+
// on paths the customer did not individually opt into, which is exactly the
|
|
37337
|
+
// class ADR-0022 section 4 reserves the confirmation for.
|
|
37338
|
+
sensitive: true
|
|
37339
|
+
},
|
|
37267
37340
|
{
|
|
37268
37341
|
key: "conversation-eval-backend",
|
|
37269
37342
|
description: "Backend for host-side conversation-success scoring AND memory extraction (ENG-6581), which share one scorer: anthropic-api = Haiku via a direct Anthropic Messages API fetch (no subprocess); claude-p = Haiku via the `claude -p` subprocess (reuses the agent auth, effectively free under Max but a heavy spawn); local = an OpenAI-compatible loopback endpoint (transcript never leaves the host). Auth for the anthropic-api path comes from AGT_CONV_EVAL_ANTHROPIC_API_KEY (falls back to ANTHROPIC_API_KEY); with no key that path fails closed (eval disabled) rather than reverting to claude-p. Enum.",
|
package/dist/mcp/index.js
CHANGED
|
@@ -27328,6 +27328,52 @@ var INTEGRATION_REGISTRY = [
|
|
|
27328
27328
|
}]
|
|
27329
27329
|
}
|
|
27330
27330
|
},
|
|
27331
|
+
{
|
|
27332
|
+
// ENG-10854 / ADR-0110. The POLICY half of the catalog definition: this
|
|
27333
|
+
// registry is what `isPremiumDefinition` reads, so the premium descriptor
|
|
27334
|
+
// here is what makes the per-org opt-in required at all. The CUSTOMER-FACING
|
|
27335
|
+
// half - the seeded `integration_definitions` row that the Add Integration
|
|
27336
|
+
// picker lists - is deliberately NOT in this change. `/integrations/installs`
|
|
27337
|
+
// reads the DB catalog with a status filter; this registry is not a listing.
|
|
27338
|
+
//
|
|
27339
|
+
// The order matters and is not bookkeeping: `isOrgEntitledToPremium` returns
|
|
27340
|
+
// TRUE for a definition it does not know as premium, because a free
|
|
27341
|
+
// integration has no opt-in concept. So a broker shipped ahead of this entry
|
|
27342
|
+
// would serve an org that had never opted in. The broker additionally fails
|
|
27343
|
+
// closed on `isPremiumDefinition` being false, so the two halves cannot come
|
|
27344
|
+
// apart in that direction either.
|
|
27345
|
+
id: "typed-evaluation",
|
|
27346
|
+
name: "Typed Evaluation",
|
|
27347
|
+
category: "knowledge",
|
|
27348
|
+
description: "Ask closed questions about a piece of text and get calibrated answers back \u2014 yes/no, pick-one, or a position on your own scale \u2014 with a probability for each. It never writes text and cannot answer outside the set of options you give it, which is what makes it safe to point at content you do not trust. Typical uses: is this message a repeat request, which category does this belong to, how urgent does this sound. Answers arrive in about half a second, so an agent can branch on one without spending a model turn.",
|
|
27349
|
+
// No customer credential exists: the call runs on Ninjafy's own gateway key.
|
|
27350
|
+
supported_auth_types: ["none"],
|
|
27351
|
+
capabilities: [
|
|
27352
|
+
{
|
|
27353
|
+
id: "typed-evaluation:evaluate",
|
|
27354
|
+
name: "Evaluate Text",
|
|
27355
|
+
description: "Ask closed questions about text the agent already holds and receive typed answers with probabilities (evaluate_text).",
|
|
27356
|
+
access: "read"
|
|
27357
|
+
}
|
|
27358
|
+
],
|
|
27359
|
+
beta: true,
|
|
27360
|
+
// ENG-8842's `included`, and the reason is the consent dialog rather than
|
|
27361
|
+
// the price. `pricing` drives the org admin's acknowledgement modal, where
|
|
27362
|
+
// `usage` renders as "manages and bills by usage" and `monthly` as a
|
|
27363
|
+
// subscription. Both would be false statements here: a call costs about
|
|
27364
|
+
// $0.000076 and nothing is metered or billed, so the opt-in exists to record
|
|
27365
|
+
// a decision about a SUB-PROCESSOR, not about money.
|
|
27366
|
+
//
|
|
27367
|
+
// ADR-0110 Decision 11 keeps the door open deliberately: if a genuinely
|
|
27368
|
+
// high-volume capability arrives later - bulk classification of a customer's
|
|
27369
|
+
// own corpus - it is priced at THAT capability's grain and this definition
|
|
27370
|
+
// stays `included`. Ninja Notes is the precedent (ENG-9278): it acquired a
|
|
27371
|
+
// metered capability and did not flip.
|
|
27372
|
+
premium: {
|
|
27373
|
+
pricing: "included",
|
|
27374
|
+
note: "Typed evaluation is included in your plan \u2014 nothing is metered per question. Turning it on is a decision about data, not cost: the text an agent asks about is sent to Typesafe, through our own gateway, to be scored. It is never used to train a model and we store only the answers, never the text."
|
|
27375
|
+
}
|
|
27376
|
+
},
|
|
27331
27377
|
{
|
|
27332
27378
|
// Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
27333
27379
|
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
@@ -29561,6 +29607,33 @@ var FLAG_REGISTRY = [
|
|
|
29561
29607
|
// "these hosts are unreadable". Both outlive this particular version.
|
|
29562
29608
|
since: "0.28.667"
|
|
29563
29609
|
},
|
|
29610
|
+
{
|
|
29611
|
+
// ADR-0110 Decision 5 (ENG-10854). Gates PLATFORM-INTERNAL consumers of the
|
|
29612
|
+
// typed evaluation capability - inbound triage, kanban classification,
|
|
29613
|
+
// memory-extraction sensitivity gating, and later the conversation
|
|
29614
|
+
// evaluator. Nobody "installs" those; they are ours, so they are gated
|
|
29615
|
+
// centrally.
|
|
29616
|
+
//
|
|
29617
|
+
// IT DOES NOT GATE THE AGENT TOOL, and that separation is the point. The
|
|
29618
|
+
// agent tool's gate is the customer's own premium opt-in plus a per-agent
|
|
29619
|
+
// install (Decision 4). Pointing this flag at the tool as well would give
|
|
29620
|
+
// it two masters and let a staff flag silently override a decision the
|
|
29621
|
+
// customer made about their own data reaching a sub-processor.
|
|
29622
|
+
//
|
|
29623
|
+
// Ships with no readers: the consumers land in later slices, and the flag
|
|
29624
|
+
// exists now so the first of them has a gate to be born behind rather than
|
|
29625
|
+
// acquiring one afterwards.
|
|
29626
|
+
key: "typed-evaluation",
|
|
29627
|
+
description: "ADR-0110: platform-internal consumers of the typed evaluation model (Jev, via our AI Gateway). OFF (default) = no internal consumer calls it; ON = consumers that have shipped may call, each still subject to the per-org quota, per-agent rate limit and audit row enforced in the broker. Does NOT gate the agent-facing tool, which is governed by the premium opt-in and a per-agent install instead. Customer orgs stay off until the Decision 9 vendor gates close (sub-processor listing with DPA coverage, the legal read on emotion inference, and a recorded disclosure).",
|
|
29628
|
+
flagType: "boolean",
|
|
29629
|
+
// Ships dark. Every consumer degrades to its current behaviour when off,
|
|
29630
|
+
// so the safe value and the no-op value are the same one.
|
|
29631
|
+
defaultValue: false,
|
|
29632
|
+
// Turning it on starts sending customer text to an external sub-processor
|
|
29633
|
+
// on paths the customer did not individually opt into, which is exactly the
|
|
29634
|
+
// class ADR-0022 section 4 reserves the confirmation for.
|
|
29635
|
+
sensitive: true
|
|
29636
|
+
},
|
|
29564
29637
|
{
|
|
29565
29638
|
key: "conversation-eval-backend",
|
|
29566
29639
|
description: "Backend for host-side conversation-success scoring AND memory extraction (ENG-6581), which share one scorer: anthropic-api = Haiku via a direct Anthropic Messages API fetch (no subprocess); claude-p = Haiku via the `claude -p` subprocess (reuses the agent auth, effectively free under Max but a heavy spawn); local = an OpenAI-compatible loopback endpoint (transcript never leaves the host). Auth for the anthropic-api path comes from AGT_CONV_EVAL_ANTHROPIC_API_KEY (falls back to ANTHROPIC_API_KEY); with no key that path fails closed (eval disabled) rather than reverting to claude-p. Enum.",
|
package/dist/mcp/origami.js
CHANGED
|
@@ -41479,6 +41479,52 @@ var INTEGRATION_REGISTRY = [
|
|
|
41479
41479
|
}]
|
|
41480
41480
|
}
|
|
41481
41481
|
},
|
|
41482
|
+
{
|
|
41483
|
+
// ENG-10854 / ADR-0110. The POLICY half of the catalog definition: this
|
|
41484
|
+
// registry is what `isPremiumDefinition` reads, so the premium descriptor
|
|
41485
|
+
// here is what makes the per-org opt-in required at all. The CUSTOMER-FACING
|
|
41486
|
+
// half - the seeded `integration_definitions` row that the Add Integration
|
|
41487
|
+
// picker lists - is deliberately NOT in this change. `/integrations/installs`
|
|
41488
|
+
// reads the DB catalog with a status filter; this registry is not a listing.
|
|
41489
|
+
//
|
|
41490
|
+
// The order matters and is not bookkeeping: `isOrgEntitledToPremium` returns
|
|
41491
|
+
// TRUE for a definition it does not know as premium, because a free
|
|
41492
|
+
// integration has no opt-in concept. So a broker shipped ahead of this entry
|
|
41493
|
+
// would serve an org that had never opted in. The broker additionally fails
|
|
41494
|
+
// closed on `isPremiumDefinition` being false, so the two halves cannot come
|
|
41495
|
+
// apart in that direction either.
|
|
41496
|
+
id: "typed-evaluation",
|
|
41497
|
+
name: "Typed Evaluation",
|
|
41498
|
+
category: "knowledge",
|
|
41499
|
+
description: "Ask closed questions about a piece of text and get calibrated answers back \u2014 yes/no, pick-one, or a position on your own scale \u2014 with a probability for each. It never writes text and cannot answer outside the set of options you give it, which is what makes it safe to point at content you do not trust. Typical uses: is this message a repeat request, which category does this belong to, how urgent does this sound. Answers arrive in about half a second, so an agent can branch on one without spending a model turn.",
|
|
41500
|
+
// No customer credential exists: the call runs on Ninjafy's own gateway key.
|
|
41501
|
+
supported_auth_types: ["none"],
|
|
41502
|
+
capabilities: [
|
|
41503
|
+
{
|
|
41504
|
+
id: "typed-evaluation:evaluate",
|
|
41505
|
+
name: "Evaluate Text",
|
|
41506
|
+
description: "Ask closed questions about text the agent already holds and receive typed answers with probabilities (evaluate_text).",
|
|
41507
|
+
access: "read"
|
|
41508
|
+
}
|
|
41509
|
+
],
|
|
41510
|
+
beta: true,
|
|
41511
|
+
// ENG-8842's `included`, and the reason is the consent dialog rather than
|
|
41512
|
+
// the price. `pricing` drives the org admin's acknowledgement modal, where
|
|
41513
|
+
// `usage` renders as "manages and bills by usage" and `monthly` as a
|
|
41514
|
+
// subscription. Both would be false statements here: a call costs about
|
|
41515
|
+
// $0.000076 and nothing is metered or billed, so the opt-in exists to record
|
|
41516
|
+
// a decision about a SUB-PROCESSOR, not about money.
|
|
41517
|
+
//
|
|
41518
|
+
// ADR-0110 Decision 11 keeps the door open deliberately: if a genuinely
|
|
41519
|
+
// high-volume capability arrives later - bulk classification of a customer's
|
|
41520
|
+
// own corpus - it is priced at THAT capability's grain and this definition
|
|
41521
|
+
// stays `included`. Ninja Notes is the precedent (ENG-9278): it acquired a
|
|
41522
|
+
// metered capability and did not flip.
|
|
41523
|
+
premium: {
|
|
41524
|
+
pricing: "included",
|
|
41525
|
+
note: "Typed evaluation is included in your plan \u2014 nothing is metered per question. Turning it on is a decision about data, not cost: the text an agent asks about is sent to Typesafe, through our own gateway, to be scored. It is never used to train a model and we store only the answers, never the text."
|
|
41526
|
+
}
|
|
41527
|
+
},
|
|
41482
41528
|
{
|
|
41483
41529
|
// Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
41484
41530
|
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
@@ -43509,6 +43555,33 @@ var FLAG_REGISTRY = [
|
|
|
43509
43555
|
// "these hosts are unreadable". Both outlive this particular version.
|
|
43510
43556
|
since: "0.28.667"
|
|
43511
43557
|
},
|
|
43558
|
+
{
|
|
43559
|
+
// ADR-0110 Decision 5 (ENG-10854). Gates PLATFORM-INTERNAL consumers of the
|
|
43560
|
+
// typed evaluation capability - inbound triage, kanban classification,
|
|
43561
|
+
// memory-extraction sensitivity gating, and later the conversation
|
|
43562
|
+
// evaluator. Nobody "installs" those; they are ours, so they are gated
|
|
43563
|
+
// centrally.
|
|
43564
|
+
//
|
|
43565
|
+
// IT DOES NOT GATE THE AGENT TOOL, and that separation is the point. The
|
|
43566
|
+
// agent tool's gate is the customer's own premium opt-in plus a per-agent
|
|
43567
|
+
// install (Decision 4). Pointing this flag at the tool as well would give
|
|
43568
|
+
// it two masters and let a staff flag silently override a decision the
|
|
43569
|
+
// customer made about their own data reaching a sub-processor.
|
|
43570
|
+
//
|
|
43571
|
+
// Ships with no readers: the consumers land in later slices, and the flag
|
|
43572
|
+
// exists now so the first of them has a gate to be born behind rather than
|
|
43573
|
+
// acquiring one afterwards.
|
|
43574
|
+
key: "typed-evaluation",
|
|
43575
|
+
description: "ADR-0110: platform-internal consumers of the typed evaluation model (Jev, via our AI Gateway). OFF (default) = no internal consumer calls it; ON = consumers that have shipped may call, each still subject to the per-org quota, per-agent rate limit and audit row enforced in the broker. Does NOT gate the agent-facing tool, which is governed by the premium opt-in and a per-agent install instead. Customer orgs stay off until the Decision 9 vendor gates close (sub-processor listing with DPA coverage, the legal read on emotion inference, and a recorded disclosure).",
|
|
43576
|
+
flagType: "boolean",
|
|
43577
|
+
// Ships dark. Every consumer degrades to its current behaviour when off,
|
|
43578
|
+
// so the safe value and the no-op value are the same one.
|
|
43579
|
+
defaultValue: false,
|
|
43580
|
+
// Turning it on starts sending customer text to an external sub-processor
|
|
43581
|
+
// on paths the customer did not individually opt into, which is exactly the
|
|
43582
|
+
// class ADR-0022 section 4 reserves the confirmation for.
|
|
43583
|
+
sensitive: true
|
|
43584
|
+
},
|
|
43512
43585
|
{
|
|
43513
43586
|
key: "conversation-eval-backend",
|
|
43514
43587
|
description: "Backend for host-side conversation-success scoring AND memory extraction (ENG-6581), which share one scorer: anthropic-api = Haiku via a direct Anthropic Messages API fetch (no subprocess); claude-p = Haiku via the `claude -p` subprocess (reuses the agent auth, effectively free under Max but a heavy spawn); local = an OpenAI-compatible loopback endpoint (transcript never leaves the host). Auth for the anthropic-api path comes from AGT_CONV_EVAL_ANTHROPIC_API_KEY (falls back to ANTHROPIC_API_KEY); with no key that path fails closed (eval disabled) rather than reverting to claude-p. Enum.",
|
|
@@ -35702,6 +35702,52 @@ var INTEGRATION_REGISTRY = [
|
|
|
35702
35702
|
}]
|
|
35703
35703
|
}
|
|
35704
35704
|
},
|
|
35705
|
+
{
|
|
35706
|
+
// ENG-10854 / ADR-0110. The POLICY half of the catalog definition: this
|
|
35707
|
+
// registry is what `isPremiumDefinition` reads, so the premium descriptor
|
|
35708
|
+
// here is what makes the per-org opt-in required at all. The CUSTOMER-FACING
|
|
35709
|
+
// half - the seeded `integration_definitions` row that the Add Integration
|
|
35710
|
+
// picker lists - is deliberately NOT in this change. `/integrations/installs`
|
|
35711
|
+
// reads the DB catalog with a status filter; this registry is not a listing.
|
|
35712
|
+
//
|
|
35713
|
+
// The order matters and is not bookkeeping: `isOrgEntitledToPremium` returns
|
|
35714
|
+
// TRUE for a definition it does not know as premium, because a free
|
|
35715
|
+
// integration has no opt-in concept. So a broker shipped ahead of this entry
|
|
35716
|
+
// would serve an org that had never opted in. The broker additionally fails
|
|
35717
|
+
// closed on `isPremiumDefinition` being false, so the two halves cannot come
|
|
35718
|
+
// apart in that direction either.
|
|
35719
|
+
id: "typed-evaluation",
|
|
35720
|
+
name: "Typed Evaluation",
|
|
35721
|
+
category: "knowledge",
|
|
35722
|
+
description: "Ask closed questions about a piece of text and get calibrated answers back \u2014 yes/no, pick-one, or a position on your own scale \u2014 with a probability for each. It never writes text and cannot answer outside the set of options you give it, which is what makes it safe to point at content you do not trust. Typical uses: is this message a repeat request, which category does this belong to, how urgent does this sound. Answers arrive in about half a second, so an agent can branch on one without spending a model turn.",
|
|
35723
|
+
// No customer credential exists: the call runs on Ninjafy's own gateway key.
|
|
35724
|
+
supported_auth_types: ["none"],
|
|
35725
|
+
capabilities: [
|
|
35726
|
+
{
|
|
35727
|
+
id: "typed-evaluation:evaluate",
|
|
35728
|
+
name: "Evaluate Text",
|
|
35729
|
+
description: "Ask closed questions about text the agent already holds and receive typed answers with probabilities (evaluate_text).",
|
|
35730
|
+
access: "read"
|
|
35731
|
+
}
|
|
35732
|
+
],
|
|
35733
|
+
beta: true,
|
|
35734
|
+
// ENG-8842's `included`, and the reason is the consent dialog rather than
|
|
35735
|
+
// the price. `pricing` drives the org admin's acknowledgement modal, where
|
|
35736
|
+
// `usage` renders as "manages and bills by usage" and `monthly` as a
|
|
35737
|
+
// subscription. Both would be false statements here: a call costs about
|
|
35738
|
+
// $0.000076 and nothing is metered or billed, so the opt-in exists to record
|
|
35739
|
+
// a decision about a SUB-PROCESSOR, not about money.
|
|
35740
|
+
//
|
|
35741
|
+
// ADR-0110 Decision 11 keeps the door open deliberately: if a genuinely
|
|
35742
|
+
// high-volume capability arrives later - bulk classification of a customer's
|
|
35743
|
+
// own corpus - it is priced at THAT capability's grain and this definition
|
|
35744
|
+
// stays `included`. Ninja Notes is the precedent (ENG-9278): it acquired a
|
|
35745
|
+
// metered capability and did not flip.
|
|
35746
|
+
premium: {
|
|
35747
|
+
pricing: "included",
|
|
35748
|
+
note: "Typed evaluation is included in your plan \u2014 nothing is metered per question. Turning it on is a decision about data, not cost: the text an agent asks about is sent to Typesafe, through our own gateway, to be scored. It is never used to train a model and we store only the answers, never the text."
|
|
35749
|
+
}
|
|
35750
|
+
},
|
|
35705
35751
|
{
|
|
35706
35752
|
// Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
35707
35753
|
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
@@ -38148,6 +38194,33 @@ var FLAG_REGISTRY = [
|
|
|
38148
38194
|
// "these hosts are unreadable". Both outlive this particular version.
|
|
38149
38195
|
since: "0.28.667"
|
|
38150
38196
|
},
|
|
38197
|
+
{
|
|
38198
|
+
// ADR-0110 Decision 5 (ENG-10854). Gates PLATFORM-INTERNAL consumers of the
|
|
38199
|
+
// typed evaluation capability - inbound triage, kanban classification,
|
|
38200
|
+
// memory-extraction sensitivity gating, and later the conversation
|
|
38201
|
+
// evaluator. Nobody "installs" those; they are ours, so they are gated
|
|
38202
|
+
// centrally.
|
|
38203
|
+
//
|
|
38204
|
+
// IT DOES NOT GATE THE AGENT TOOL, and that separation is the point. The
|
|
38205
|
+
// agent tool's gate is the customer's own premium opt-in plus a per-agent
|
|
38206
|
+
// install (Decision 4). Pointing this flag at the tool as well would give
|
|
38207
|
+
// it two masters and let a staff flag silently override a decision the
|
|
38208
|
+
// customer made about their own data reaching a sub-processor.
|
|
38209
|
+
//
|
|
38210
|
+
// Ships with no readers: the consumers land in later slices, and the flag
|
|
38211
|
+
// exists now so the first of them has a gate to be born behind rather than
|
|
38212
|
+
// acquiring one afterwards.
|
|
38213
|
+
key: "typed-evaluation",
|
|
38214
|
+
description: "ADR-0110: platform-internal consumers of the typed evaluation model (Jev, via our AI Gateway). OFF (default) = no internal consumer calls it; ON = consumers that have shipped may call, each still subject to the per-org quota, per-agent rate limit and audit row enforced in the broker. Does NOT gate the agent-facing tool, which is governed by the premium opt-in and a per-agent install instead. Customer orgs stay off until the Decision 9 vendor gates close (sub-processor listing with DPA coverage, the legal read on emotion inference, and a recorded disclosure).",
|
|
38215
|
+
flagType: "boolean",
|
|
38216
|
+
// Ships dark. Every consumer degrades to its current behaviour when off,
|
|
38217
|
+
// so the safe value and the no-op value are the same one.
|
|
38218
|
+
defaultValue: false,
|
|
38219
|
+
// Turning it on starts sending customer text to an external sub-processor
|
|
38220
|
+
// on paths the customer did not individually opt into, which is exactly the
|
|
38221
|
+
// class ADR-0022 section 4 reserves the confirmation for.
|
|
38222
|
+
sensitive: true
|
|
38223
|
+
},
|
|
38151
38224
|
{
|
|
38152
38225
|
key: "conversation-eval-backend",
|
|
38153
38226
|
description: "Backend for host-side conversation-success scoring AND memory extraction (ENG-6581), which share one scorer: anthropic-api = Haiku via a direct Anthropic Messages API fetch (no subprocess); claude-p = Haiku via the `claude -p` subprocess (reuses the agent auth, effectively free under Max but a heavy spawn); local = an OpenAI-compatible loopback endpoint (transcript never leaves the host). Auth for the anthropic-api path comes from AGT_CONV_EVAL_ANTHROPIC_API_KEY (falls back to ANTHROPIC_API_KEY); with no key that path fails closed (eval disabled) rather than reverting to claude-p. Enum.",
|
|
@@ -35716,6 +35716,52 @@ var INTEGRATION_REGISTRY = [
|
|
|
35716
35716
|
}]
|
|
35717
35717
|
}
|
|
35718
35718
|
},
|
|
35719
|
+
{
|
|
35720
|
+
// ENG-10854 / ADR-0110. The POLICY half of the catalog definition: this
|
|
35721
|
+
// registry is what `isPremiumDefinition` reads, so the premium descriptor
|
|
35722
|
+
// here is what makes the per-org opt-in required at all. The CUSTOMER-FACING
|
|
35723
|
+
// half - the seeded `integration_definitions` row that the Add Integration
|
|
35724
|
+
// picker lists - is deliberately NOT in this change. `/integrations/installs`
|
|
35725
|
+
// reads the DB catalog with a status filter; this registry is not a listing.
|
|
35726
|
+
//
|
|
35727
|
+
// The order matters and is not bookkeeping: `isOrgEntitledToPremium` returns
|
|
35728
|
+
// TRUE for a definition it does not know as premium, because a free
|
|
35729
|
+
// integration has no opt-in concept. So a broker shipped ahead of this entry
|
|
35730
|
+
// would serve an org that had never opted in. The broker additionally fails
|
|
35731
|
+
// closed on `isPremiumDefinition` being false, so the two halves cannot come
|
|
35732
|
+
// apart in that direction either.
|
|
35733
|
+
id: "typed-evaluation",
|
|
35734
|
+
name: "Typed Evaluation",
|
|
35735
|
+
category: "knowledge",
|
|
35736
|
+
description: "Ask closed questions about a piece of text and get calibrated answers back \u2014 yes/no, pick-one, or a position on your own scale \u2014 with a probability for each. It never writes text and cannot answer outside the set of options you give it, which is what makes it safe to point at content you do not trust. Typical uses: is this message a repeat request, which category does this belong to, how urgent does this sound. Answers arrive in about half a second, so an agent can branch on one without spending a model turn.",
|
|
35737
|
+
// No customer credential exists: the call runs on Ninjafy's own gateway key.
|
|
35738
|
+
supported_auth_types: ["none"],
|
|
35739
|
+
capabilities: [
|
|
35740
|
+
{
|
|
35741
|
+
id: "typed-evaluation:evaluate",
|
|
35742
|
+
name: "Evaluate Text",
|
|
35743
|
+
description: "Ask closed questions about text the agent already holds and receive typed answers with probabilities (evaluate_text).",
|
|
35744
|
+
access: "read"
|
|
35745
|
+
}
|
|
35746
|
+
],
|
|
35747
|
+
beta: true,
|
|
35748
|
+
// ENG-8842's `included`, and the reason is the consent dialog rather than
|
|
35749
|
+
// the price. `pricing` drives the org admin's acknowledgement modal, where
|
|
35750
|
+
// `usage` renders as "manages and bills by usage" and `monthly` as a
|
|
35751
|
+
// subscription. Both would be false statements here: a call costs about
|
|
35752
|
+
// $0.000076 and nothing is metered or billed, so the opt-in exists to record
|
|
35753
|
+
// a decision about a SUB-PROCESSOR, not about money.
|
|
35754
|
+
//
|
|
35755
|
+
// ADR-0110 Decision 11 keeps the door open deliberately: if a genuinely
|
|
35756
|
+
// high-volume capability arrives later - bulk classification of a customer's
|
|
35757
|
+
// own corpus - it is priced at THAT capability's grain and this definition
|
|
35758
|
+
// stays `included`. Ninja Notes is the precedent (ENG-9278): it acquired a
|
|
35759
|
+
// metered capability and did not flip.
|
|
35760
|
+
premium: {
|
|
35761
|
+
pricing: "included",
|
|
35762
|
+
note: "Typed evaluation is included in your plan \u2014 nothing is metered per question. Turning it on is a decision about data, not cost: the text an agent asks about is sent to Typesafe, through our own gateway, to be scored. It is never used to train a model and we store only the answers, never the text."
|
|
35763
|
+
}
|
|
35764
|
+
},
|
|
35719
35765
|
{
|
|
35720
35766
|
// Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
35721
35767
|
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
@@ -38162,6 +38208,33 @@ var FLAG_REGISTRY = [
|
|
|
38162
38208
|
// "these hosts are unreadable". Both outlive this particular version.
|
|
38163
38209
|
since: "0.28.667"
|
|
38164
38210
|
},
|
|
38211
|
+
{
|
|
38212
|
+
// ADR-0110 Decision 5 (ENG-10854). Gates PLATFORM-INTERNAL consumers of the
|
|
38213
|
+
// typed evaluation capability - inbound triage, kanban classification,
|
|
38214
|
+
// memory-extraction sensitivity gating, and later the conversation
|
|
38215
|
+
// evaluator. Nobody "installs" those; they are ours, so they are gated
|
|
38216
|
+
// centrally.
|
|
38217
|
+
//
|
|
38218
|
+
// IT DOES NOT GATE THE AGENT TOOL, and that separation is the point. The
|
|
38219
|
+
// agent tool's gate is the customer's own premium opt-in plus a per-agent
|
|
38220
|
+
// install (Decision 4). Pointing this flag at the tool as well would give
|
|
38221
|
+
// it two masters and let a staff flag silently override a decision the
|
|
38222
|
+
// customer made about their own data reaching a sub-processor.
|
|
38223
|
+
//
|
|
38224
|
+
// Ships with no readers: the consumers land in later slices, and the flag
|
|
38225
|
+
// exists now so the first of them has a gate to be born behind rather than
|
|
38226
|
+
// acquiring one afterwards.
|
|
38227
|
+
key: "typed-evaluation",
|
|
38228
|
+
description: "ADR-0110: platform-internal consumers of the typed evaluation model (Jev, via our AI Gateway). OFF (default) = no internal consumer calls it; ON = consumers that have shipped may call, each still subject to the per-org quota, per-agent rate limit and audit row enforced in the broker. Does NOT gate the agent-facing tool, which is governed by the premium opt-in and a per-agent install instead. Customer orgs stay off until the Decision 9 vendor gates close (sub-processor listing with DPA coverage, the legal read on emotion inference, and a recorded disclosure).",
|
|
38229
|
+
flagType: "boolean",
|
|
38230
|
+
// Ships dark. Every consumer degrades to its current behaviour when off,
|
|
38231
|
+
// so the safe value and the no-op value are the same one.
|
|
38232
|
+
defaultValue: false,
|
|
38233
|
+
// Turning it on starts sending customer text to an external sub-processor
|
|
38234
|
+
// on paths the customer did not individually opt into, which is exactly the
|
|
38235
|
+
// class ADR-0022 section 4 reserves the confirmation for.
|
|
38236
|
+
sensitive: true
|
|
38237
|
+
},
|
|
38165
38238
|
{
|
|
38166
38239
|
key: "conversation-eval-backend",
|
|
38167
38240
|
description: "Backend for host-side conversation-success scoring AND memory extraction (ENG-6581), which share one scorer: anthropic-api = Haiku via a direct Anthropic Messages API fetch (no subprocess); claude-p = Haiku via the `claude -p` subprocess (reuses the agent auth, effectively free under Max but a heavy spawn); local = an OpenAI-compatible loopback endpoint (transcript never leaves the host). Auth for the anthropic-api path comes from AGT_CONV_EVAL_ANTHROPIC_API_KEY (falls back to ANTHROPIC_API_KEY); with no key that path fails closed (eval disabled) rather than reverting to claude-p. Enum.",
|