@integrity-labs/agt-cli 0.28.700 → 0.28.702
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-MZWFZIN2.js → chunk-324RU37E.js} +4 -4
- package/dist/{chunk-QRQE2MVT.js → chunk-DX3REH6Z.js} +33 -3
- package/dist/chunk-DX3REH6Z.js.map +1 -0
- package/dist/{chunk-GE2FIKUX.js → chunk-JWFVVQ5R.js} +2 -2
- package/dist/{claude-pair-runtime-NVLSNWWS.js → claude-pair-runtime-OVV6MBU5.js} +2 -2
- package/dist/lib/manager-worker.js +13 -13
- package/dist/mcp/direct-chat-channel.js +32 -2
- package/dist/mcp/index.js +40 -6
- package/dist/mcp/origami.js +32 -2
- package/dist/mcp/slack-channel.js +32 -2
- package/dist/mcp/telegram-channel.js +32 -2
- package/dist/{persistent-session-7XILEFLF.js → persistent-session-V72ISHD4.js} +3 -3
- package/dist/{responsiveness-probe-ZU33A2GB.js → responsiveness-probe-BW5AHMES.js} +3 -3
- package/dist/{session-auth-dead-ODQB4UPP.js → session-auth-dead-H5IVXY2C.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-QRQE2MVT.js.map +0 -1
- /package/dist/{chunk-MZWFZIN2.js.map → chunk-324RU37E.js.map} +0 -0
- /package/dist/{chunk-GE2FIKUX.js.map → chunk-JWFVVQ5R.js.map} +0 -0
- /package/dist/{claude-pair-runtime-NVLSNWWS.js.map → claude-pair-runtime-OVV6MBU5.js.map} +0 -0
- /package/dist/{persistent-session-7XILEFLF.js.map → persistent-session-V72ISHD4.js.map} +0 -0
- /package/dist/{responsiveness-probe-ZU33A2GB.js.map → responsiveness-probe-BW5AHMES.js.map} +0 -0
- /package/dist/{session-auth-dead-ODQB4UPP.js.map → session-auth-dead-H5IVXY2C.js.map} +0 -0
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
rotateDailySession,
|
|
18
18
|
sessionFileExists,
|
|
19
19
|
todayLocalIso
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-DX3REH6Z.js";
|
|
21
21
|
import {
|
|
22
22
|
reapOrphanChannelMcps
|
|
23
23
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -4531,4 +4531,4 @@ export {
|
|
|
4531
4531
|
stopAllSessionsAndWait,
|
|
4532
4532
|
getProjectDir
|
|
4533
4533
|
};
|
|
4534
|
-
//# sourceMappingURL=chunk-
|
|
4534
|
+
//# sourceMappingURL=chunk-JWFVVQ5R.js.map
|
|
@@ -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-V72ISHD4.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-OVV6MBU5.js.map
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
safeWriteJsonAtomic,
|
|
55
55
|
setConfigHash,
|
|
56
56
|
tripClass
|
|
57
|
-
} from "../chunk-
|
|
57
|
+
} from "../chunk-324RU37E.js";
|
|
58
58
|
import {
|
|
59
59
|
getProjectDir as getProjectDir2,
|
|
60
60
|
getReadyTasks,
|
|
@@ -112,7 +112,7 @@ import {
|
|
|
112
112
|
takeZombieDetection,
|
|
113
113
|
toOpencodeModel,
|
|
114
114
|
writeEgressAllowlist
|
|
115
|
-
} from "../chunk-
|
|
115
|
+
} from "../chunk-JWFVVQ5R.js";
|
|
116
116
|
import {
|
|
117
117
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
118
118
|
AnchorSessionClient,
|
|
@@ -197,7 +197,7 @@ import {
|
|
|
197
197
|
subagentActivityAgeSeconds,
|
|
198
198
|
sumTranscriptUsageInWindow,
|
|
199
199
|
transcriptActivityAgeSeconds
|
|
200
|
-
} from "../chunk-
|
|
200
|
+
} from "../chunk-DX3REH6Z.js";
|
|
201
201
|
import {
|
|
202
202
|
reapOrphanChannelMcps
|
|
203
203
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -11892,7 +11892,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
11892
11892
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
11893
11893
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
11894
11894
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
11895
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
11895
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-BW5AHMES.js");
|
|
11896
11896
|
const newest = newestPendingInboundActivityMtimeMs(dirname10(paneLogPath(codeName)));
|
|
11897
11897
|
if (newest === null) return null;
|
|
11898
11898
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -12540,7 +12540,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
12540
12540
|
var lastVersionCheckAt = 0;
|
|
12541
12541
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
12542
12542
|
var lastResponsivenessProbeAt = 0;
|
|
12543
|
-
var agtCliVersion = true ? "0.28.
|
|
12543
|
+
var agtCliVersion = true ? "0.28.702" : "dev";
|
|
12544
12544
|
function resolveBrewPath(execFileSync3) {
|
|
12545
12545
|
try {
|
|
12546
12546
|
const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -14041,7 +14041,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
14041
14041
|
if (codeNames.length === 0) return;
|
|
14042
14042
|
void (async () => {
|
|
14043
14043
|
try {
|
|
14044
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
14044
|
+
const { collectDiagnostics } = await import("../persistent-session-V72ISHD4.js");
|
|
14045
14045
|
await api.post("/host/heartbeat", {
|
|
14046
14046
|
host_id: hostId,
|
|
14047
14047
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -14159,7 +14159,7 @@ async function pollCycleInner() {
|
|
|
14159
14159
|
}
|
|
14160
14160
|
try {
|
|
14161
14161
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
14162
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
14162
|
+
const { collectDiagnostics } = await import("../persistent-session-V72ISHD4.js");
|
|
14163
14163
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
14164
14164
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor) : void 0;
|
|
14165
14165
|
let tailscaleHostname;
|
|
@@ -14311,7 +14311,7 @@ async function pollCycleInner() {
|
|
|
14311
14311
|
collectPanelessActivityProbes,
|
|
14312
14312
|
getResponsivenessIntervalMs,
|
|
14313
14313
|
occupancyQualificationClassifications
|
|
14314
|
-
} = await import("../responsiveness-probe-
|
|
14314
|
+
} = await import("../responsiveness-probe-BW5AHMES.js");
|
|
14315
14315
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
14316
14316
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
14317
14317
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -14421,7 +14421,7 @@ async function pollCycleInner() {
|
|
|
14421
14421
|
collectResponsivenessProbes,
|
|
14422
14422
|
livePendingInboundOldestAgeSeconds,
|
|
14423
14423
|
parkPendingInbound
|
|
14424
|
-
} = await import("../responsiveness-probe-
|
|
14424
|
+
} = await import("../responsiveness-probe-BW5AHMES.js");
|
|
14425
14425
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
14426
14426
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
14427
14427
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -14577,7 +14577,7 @@ async function pollCycleInner() {
|
|
|
14577
14577
|
}
|
|
14578
14578
|
try {
|
|
14579
14579
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
14580
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
14580
|
+
const { probeSessionAuth } = await import("../session-auth-dead-H5IVXY2C.js");
|
|
14581
14581
|
const observations = [];
|
|
14582
14582
|
const pendingCacheCommits = [];
|
|
14583
14583
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -18337,7 +18337,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
18337
18337
|
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}`));
|
|
18338
18338
|
void (async () => {
|
|
18339
18339
|
try {
|
|
18340
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
18340
|
+
const { collectDiagnostics } = await import("../persistent-session-V72ISHD4.js");
|
|
18341
18341
|
await api.post("/host/heartbeat", {
|
|
18342
18342
|
host_id: hostId,
|
|
18343
18343
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -18388,7 +18388,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
18388
18388
|
}
|
|
18389
18389
|
try {
|
|
18390
18390
|
const hostId = await getHostId();
|
|
18391
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
18391
|
+
const { collectDiagnostics } = await import("../persistent-session-V72ISHD4.js");
|
|
18392
18392
|
await api.post("/host/heartbeat", {
|
|
18393
18393
|
host_id: hostId,
|
|
18394
18394
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -19020,7 +19020,7 @@ async function processClaudePairSessions(agents) {
|
|
|
19020
19020
|
killPairSession,
|
|
19021
19021
|
pairTmuxSession,
|
|
19022
19022
|
finalizeClaudePairOnboarding
|
|
19023
|
-
} = await import("../claude-pair-runtime-
|
|
19023
|
+
} = await import("../claude-pair-runtime-OVV6MBU5.js");
|
|
19024
19024
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
19025
19025
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
19026
19026
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -34140,15 +34140,45 @@ var INTEGRATION_REGISTRY = [
|
|
|
34140
34140
|
// `live-meeting-advisor` in FLAG_REGISTRY, which is a staff control.
|
|
34141
34141
|
id: "ninjafy-notes:live-advise",
|
|
34142
34142
|
name: "Live Meeting Advice",
|
|
34143
|
-
|
|
34143
|
+
// ENG-9278: THE PRICE IS QUOTED PER MEETING, NEVER PER HOUR. Nobody arms
|
|
34144
|
+
// an advisor for "an hour" — they arm it for a meeting — and the hourly
|
|
34145
|
+
// figure reads as a subscription for something billed only while it
|
|
34146
|
+
// runs. Both currencies are stated outright because the sub-dollar line
|
|
34147
|
+
// is USD-only; a spot conversion of either would not be a clean quote in
|
|
34148
|
+
// the other.
|
|
34149
|
+
//
|
|
34150
|
+
// These two figures are the rate card's ($0.03 USD / $0.05 AUD per armed
|
|
34151
|
+
// minute, migration 20260827000001) multiplied by thirty. They are prose
|
|
34152
|
+
// here rather than read from the rate card, which is a real drift
|
|
34153
|
+
// hazard — so it is held by a test that reprices both from the migration
|
|
34154
|
+
// and fails if they disagree, rather than by anyone remembering.
|
|
34155
|
+
description: "Let an agent advise on a meeting while it is happening. Audio is transcribed on the Mac as usual; short passages are then checked by Augmented Team to decide when the agent should speak up, and the agent sees those moments in real time. Off until you turn it on. Billed per minute the advisor is armed \u2014 about $0.90 for a half-hour advised meeting (A$1.50 in Australian dollars); a meeting you record without arming the advisor costs nothing.",
|
|
34144
34156
|
access: "write",
|
|
34145
34157
|
requires_org_opt_in: true
|
|
34146
34158
|
}
|
|
34147
34159
|
],
|
|
34148
34160
|
beta: true,
|
|
34161
|
+
// ENG-9278: STILL `included`, and the meter does not change that.
|
|
34162
|
+
//
|
|
34163
|
+
// Ninja Notes acquired its first metered path — live advising — and the
|
|
34164
|
+
// obvious move was to flip this to `usage`. It is refused. `pricing` drives
|
|
34165
|
+
// the org admin's acknowledgement modal, where `usage` renders as "manages
|
|
34166
|
+
// and bills by usage"; saying that to the many orgs who record notes and
|
|
34167
|
+
// never arm an advisor would be a false statement in a consent dialog, which
|
|
34168
|
+
// is the exact harm the `included` case was added to prevent, inverted.
|
|
34169
|
+
//
|
|
34170
|
+
// Notes really are included. The one metered thing is a capability with its
|
|
34171
|
+
// own org opt-in and its own price in its own description, which is where
|
|
34172
|
+
// the consent for it actually happens.
|
|
34173
|
+
//
|
|
34174
|
+
// The cost of this choice is that the rate card is not rendered on the
|
|
34175
|
+
// premium surface (that reads definition-level meters, and only for
|
|
34176
|
+
// `pricing: 'usage'`), so the price is prose in two places. Pricing the
|
|
34177
|
+
// CAPABILITY instead — meters on the capability descriptor, read by the
|
|
34178
|
+
// premium surface — is the structurally right answer and the follow-up.
|
|
34149
34179
|
premium: {
|
|
34150
34180
|
pricing: "included",
|
|
34151
|
-
note: "
|
|
34181
|
+
note: "Notes are included in your plan. Transcription runs on your own Mac and no platform summariser runs, so nothing is metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other. Live meeting advising is the one exception: it is turned on separately, and billed per minute the advisor is armed."
|
|
34152
34182
|
}
|
|
34153
34183
|
},
|
|
34154
34184
|
{
|
package/dist/mcp/index.js
CHANGED
|
@@ -41540,15 +41540,45 @@ var INTEGRATION_REGISTRY = [
|
|
|
41540
41540
|
// `live-meeting-advisor` in FLAG_REGISTRY, which is a staff control.
|
|
41541
41541
|
id: "ninjafy-notes:live-advise",
|
|
41542
41542
|
name: "Live Meeting Advice",
|
|
41543
|
-
|
|
41543
|
+
// ENG-9278: THE PRICE IS QUOTED PER MEETING, NEVER PER HOUR. Nobody arms
|
|
41544
|
+
// an advisor for "an hour" — they arm it for a meeting — and the hourly
|
|
41545
|
+
// figure reads as a subscription for something billed only while it
|
|
41546
|
+
// runs. Both currencies are stated outright because the sub-dollar line
|
|
41547
|
+
// is USD-only; a spot conversion of either would not be a clean quote in
|
|
41548
|
+
// the other.
|
|
41549
|
+
//
|
|
41550
|
+
// These two figures are the rate card's ($0.03 USD / $0.05 AUD per armed
|
|
41551
|
+
// minute, migration 20260827000001) multiplied by thirty. They are prose
|
|
41552
|
+
// here rather than read from the rate card, which is a real drift
|
|
41553
|
+
// hazard — so it is held by a test that reprices both from the migration
|
|
41554
|
+
// and fails if they disagree, rather than by anyone remembering.
|
|
41555
|
+
description: "Let an agent advise on a meeting while it is happening. Audio is transcribed on the Mac as usual; short passages are then checked by Augmented Team to decide when the agent should speak up, and the agent sees those moments in real time. Off until you turn it on. Billed per minute the advisor is armed \u2014 about $0.90 for a half-hour advised meeting (A$1.50 in Australian dollars); a meeting you record without arming the advisor costs nothing.",
|
|
41544
41556
|
access: "write",
|
|
41545
41557
|
requires_org_opt_in: true
|
|
41546
41558
|
}
|
|
41547
41559
|
],
|
|
41548
41560
|
beta: true,
|
|
41561
|
+
// ENG-9278: STILL `included`, and the meter does not change that.
|
|
41562
|
+
//
|
|
41563
|
+
// Ninja Notes acquired its first metered path — live advising — and the
|
|
41564
|
+
// obvious move was to flip this to `usage`. It is refused. `pricing` drives
|
|
41565
|
+
// the org admin's acknowledgement modal, where `usage` renders as "manages
|
|
41566
|
+
// and bills by usage"; saying that to the many orgs who record notes and
|
|
41567
|
+
// never arm an advisor would be a false statement in a consent dialog, which
|
|
41568
|
+
// is the exact harm the `included` case was added to prevent, inverted.
|
|
41569
|
+
//
|
|
41570
|
+
// Notes really are included. The one metered thing is a capability with its
|
|
41571
|
+
// own org opt-in and its own price in its own description, which is where
|
|
41572
|
+
// the consent for it actually happens.
|
|
41573
|
+
//
|
|
41574
|
+
// The cost of this choice is that the rate card is not rendered on the
|
|
41575
|
+
// premium surface (that reads definition-level meters, and only for
|
|
41576
|
+
// `pricing: 'usage'`), so the price is prose in two places. Pricing the
|
|
41577
|
+
// CAPABILITY instead — meters on the capability descriptor, read by the
|
|
41578
|
+
// premium surface — is the structurally right answer and the follow-up.
|
|
41549
41579
|
premium: {
|
|
41550
41580
|
pricing: "included",
|
|
41551
|
-
note: "
|
|
41581
|
+
note: "Notes are included in your plan. Transcription runs on your own Mac and no platform summariser runs, so nothing is metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other. Live meeting advising is the one exception: it is turned on separately, and billed per minute the advisor is armed."
|
|
41552
41582
|
}
|
|
41553
41583
|
},
|
|
41554
41584
|
{
|
|
@@ -47032,19 +47062,23 @@ async function resolveArtefactText(url) {
|
|
|
47032
47062
|
url
|
|
47033
47063
|
});
|
|
47034
47064
|
const a = data.artefact;
|
|
47065
|
+
const nextStep = a.owned_by_caller ? "Use this id with artefacts_get, artefacts_download, or artefacts_assign_project." : a.content_url ? "Published by another agent in your organisation, so artefacts_get and artefacts_download will NOT resolve it. Read the page by fetching the content URL above." : "Published by another agent in your organisation AND gated behind a viewer password or email prompt, so its content is not readable from here. Ask the agent that published it.";
|
|
47035
47066
|
return [
|
|
47036
47067
|
`Resolved to artefact ${a.id}`,
|
|
47037
47068
|
`Slug: ${a.publisher_resource_id}`,
|
|
47038
47069
|
a.title ? `Title: ${a.title}` : null,
|
|
47039
|
-
`Kind: ${a.kind} [${a.status}]`,
|
|
47070
|
+
`Kind: ${a.kind} [${a.status}]${a.gated ? " [gated]" : ""}`,
|
|
47040
47071
|
a.project_id ? `Project: ${a.project_id}` : null,
|
|
47041
|
-
a.live_url ? `URL: ${a.live_url}` : null,
|
|
47042
|
-
|
|
47072
|
+
a.live_url ? `Shell URL: ${a.live_url}` : null,
|
|
47073
|
+
// Named "content" and explained inline, because the entire failure this
|
|
47074
|
+
// fixes was a reader assuming the page URL was the page.
|
|
47075
|
+
a.content_url ? `Content URL: ${a.content_url} <- fetch THIS to read the page. The shell URL above only loads it.` : null,
|
|
47076
|
+
nextStep
|
|
47043
47077
|
].filter((s) => s !== null).join("\n");
|
|
47044
47078
|
}
|
|
47045
47079
|
server.tool(
|
|
47046
47080
|
"artefacts_resolve",
|
|
47047
|
-
"Resolve an Augmented Live URL (e.g. https://live.augmented.team/<slug>) or a bare slug to the internal artefact id, so you can act on a link someone shared. Returns the id plus title, kind, status, and
|
|
47081
|
+
"Resolve an Augmented Live URL (e.g. https://live.augmented.team/<slug>) or a bare slug to the internal artefact id, so you can act on a link someone shared. Returns the id plus title, kind, status, project, and the CONTENT url. Resolves any published artefact in your ORGANISATION, not just your own - so a link a teammate or a human shared with you works. Note the shell/content split: the page URL serves a wrapper that loads the body from the content URL, so fetch the content URL to read what is on the page. The content-returning tools (artefacts_get, artefacts_download, artefacts_get_source_chunk) remain limited to artefacts YOU published.",
|
|
47048
47082
|
{
|
|
47049
47083
|
url: external_exports.string().min(1).describe("An Augmented Live URL or the bare slug from one (the last path segment)")
|
|
47050
47084
|
},
|
package/dist/mcp/origami.js
CHANGED
|
@@ -40348,15 +40348,45 @@ var INTEGRATION_REGISTRY = [
|
|
|
40348
40348
|
// `live-meeting-advisor` in FLAG_REGISTRY, which is a staff control.
|
|
40349
40349
|
id: "ninjafy-notes:live-advise",
|
|
40350
40350
|
name: "Live Meeting Advice",
|
|
40351
|
-
|
|
40351
|
+
// ENG-9278: THE PRICE IS QUOTED PER MEETING, NEVER PER HOUR. Nobody arms
|
|
40352
|
+
// an advisor for "an hour" — they arm it for a meeting — and the hourly
|
|
40353
|
+
// figure reads as a subscription for something billed only while it
|
|
40354
|
+
// runs. Both currencies are stated outright because the sub-dollar line
|
|
40355
|
+
// is USD-only; a spot conversion of either would not be a clean quote in
|
|
40356
|
+
// the other.
|
|
40357
|
+
//
|
|
40358
|
+
// These two figures are the rate card's ($0.03 USD / $0.05 AUD per armed
|
|
40359
|
+
// minute, migration 20260827000001) multiplied by thirty. They are prose
|
|
40360
|
+
// here rather than read from the rate card, which is a real drift
|
|
40361
|
+
// hazard — so it is held by a test that reprices both from the migration
|
|
40362
|
+
// and fails if they disagree, rather than by anyone remembering.
|
|
40363
|
+
description: "Let an agent advise on a meeting while it is happening. Audio is transcribed on the Mac as usual; short passages are then checked by Augmented Team to decide when the agent should speak up, and the agent sees those moments in real time. Off until you turn it on. Billed per minute the advisor is armed \u2014 about $0.90 for a half-hour advised meeting (A$1.50 in Australian dollars); a meeting you record without arming the advisor costs nothing.",
|
|
40352
40364
|
access: "write",
|
|
40353
40365
|
requires_org_opt_in: true
|
|
40354
40366
|
}
|
|
40355
40367
|
],
|
|
40356
40368
|
beta: true,
|
|
40369
|
+
// ENG-9278: STILL `included`, and the meter does not change that.
|
|
40370
|
+
//
|
|
40371
|
+
// Ninja Notes acquired its first metered path — live advising — and the
|
|
40372
|
+
// obvious move was to flip this to `usage`. It is refused. `pricing` drives
|
|
40373
|
+
// the org admin's acknowledgement modal, where `usage` renders as "manages
|
|
40374
|
+
// and bills by usage"; saying that to the many orgs who record notes and
|
|
40375
|
+
// never arm an advisor would be a false statement in a consent dialog, which
|
|
40376
|
+
// is the exact harm the `included` case was added to prevent, inverted.
|
|
40377
|
+
//
|
|
40378
|
+
// Notes really are included. The one metered thing is a capability with its
|
|
40379
|
+
// own org opt-in and its own price in its own description, which is where
|
|
40380
|
+
// the consent for it actually happens.
|
|
40381
|
+
//
|
|
40382
|
+
// The cost of this choice is that the rate card is not rendered on the
|
|
40383
|
+
// premium surface (that reads definition-level meters, and only for
|
|
40384
|
+
// `pricing: 'usage'`), so the price is prose in two places. Pricing the
|
|
40385
|
+
// CAPABILITY instead — meters on the capability descriptor, read by the
|
|
40386
|
+
// premium surface — is the structurally right answer and the follow-up.
|
|
40357
40387
|
premium: {
|
|
40358
40388
|
pricing: "included",
|
|
40359
|
-
note: "
|
|
40389
|
+
note: "Notes are included in your plan. Transcription runs on your own Mac and no platform summariser runs, so nothing is metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other. Live meeting advising is the one exception: it is turned on separately, and billed per minute the advisor is armed."
|
|
40360
40390
|
}
|
|
40361
40391
|
},
|
|
40362
40392
|
{
|
|
@@ -34404,15 +34404,45 @@ var INTEGRATION_REGISTRY = [
|
|
|
34404
34404
|
// `live-meeting-advisor` in FLAG_REGISTRY, which is a staff control.
|
|
34405
34405
|
id: "ninjafy-notes:live-advise",
|
|
34406
34406
|
name: "Live Meeting Advice",
|
|
34407
|
-
|
|
34407
|
+
// ENG-9278: THE PRICE IS QUOTED PER MEETING, NEVER PER HOUR. Nobody arms
|
|
34408
|
+
// an advisor for "an hour" — they arm it for a meeting — and the hourly
|
|
34409
|
+
// figure reads as a subscription for something billed only while it
|
|
34410
|
+
// runs. Both currencies are stated outright because the sub-dollar line
|
|
34411
|
+
// is USD-only; a spot conversion of either would not be a clean quote in
|
|
34412
|
+
// the other.
|
|
34413
|
+
//
|
|
34414
|
+
// These two figures are the rate card's ($0.03 USD / $0.05 AUD per armed
|
|
34415
|
+
// minute, migration 20260827000001) multiplied by thirty. They are prose
|
|
34416
|
+
// here rather than read from the rate card, which is a real drift
|
|
34417
|
+
// hazard — so it is held by a test that reprices both from the migration
|
|
34418
|
+
// and fails if they disagree, rather than by anyone remembering.
|
|
34419
|
+
description: "Let an agent advise on a meeting while it is happening. Audio is transcribed on the Mac as usual; short passages are then checked by Augmented Team to decide when the agent should speak up, and the agent sees those moments in real time. Off until you turn it on. Billed per minute the advisor is armed \u2014 about $0.90 for a half-hour advised meeting (A$1.50 in Australian dollars); a meeting you record without arming the advisor costs nothing.",
|
|
34408
34420
|
access: "write",
|
|
34409
34421
|
requires_org_opt_in: true
|
|
34410
34422
|
}
|
|
34411
34423
|
],
|
|
34412
34424
|
beta: true,
|
|
34425
|
+
// ENG-9278: STILL `included`, and the meter does not change that.
|
|
34426
|
+
//
|
|
34427
|
+
// Ninja Notes acquired its first metered path — live advising — and the
|
|
34428
|
+
// obvious move was to flip this to `usage`. It is refused. `pricing` drives
|
|
34429
|
+
// the org admin's acknowledgement modal, where `usage` renders as "manages
|
|
34430
|
+
// and bills by usage"; saying that to the many orgs who record notes and
|
|
34431
|
+
// never arm an advisor would be a false statement in a consent dialog, which
|
|
34432
|
+
// is the exact harm the `included` case was added to prevent, inverted.
|
|
34433
|
+
//
|
|
34434
|
+
// Notes really are included. The one metered thing is a capability with its
|
|
34435
|
+
// own org opt-in and its own price in its own description, which is where
|
|
34436
|
+
// the consent for it actually happens.
|
|
34437
|
+
//
|
|
34438
|
+
// The cost of this choice is that the rate card is not rendered on the
|
|
34439
|
+
// premium surface (that reads definition-level meters, and only for
|
|
34440
|
+
// `pricing: 'usage'`), so the price is prose in two places. Pricing the
|
|
34441
|
+
// CAPABILITY instead — meters on the capability descriptor, read by the
|
|
34442
|
+
// premium surface — is the structurally right answer and the follow-up.
|
|
34413
34443
|
premium: {
|
|
34414
34444
|
pricing: "included",
|
|
34415
|
-
note: "
|
|
34445
|
+
note: "Notes are included in your plan. Transcription runs on your own Mac and no platform summariser runs, so nothing is metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other. Live meeting advising is the one exception: it is turned on separately, and billed per minute the advisor is armed."
|
|
34416
34446
|
}
|
|
34417
34447
|
},
|
|
34418
34448
|
{
|
|
@@ -34560,15 +34560,45 @@ var INTEGRATION_REGISTRY = [
|
|
|
34560
34560
|
// `live-meeting-advisor` in FLAG_REGISTRY, which is a staff control.
|
|
34561
34561
|
id: "ninjafy-notes:live-advise",
|
|
34562
34562
|
name: "Live Meeting Advice",
|
|
34563
|
-
|
|
34563
|
+
// ENG-9278: THE PRICE IS QUOTED PER MEETING, NEVER PER HOUR. Nobody arms
|
|
34564
|
+
// an advisor for "an hour" — they arm it for a meeting — and the hourly
|
|
34565
|
+
// figure reads as a subscription for something billed only while it
|
|
34566
|
+
// runs. Both currencies are stated outright because the sub-dollar line
|
|
34567
|
+
// is USD-only; a spot conversion of either would not be a clean quote in
|
|
34568
|
+
// the other.
|
|
34569
|
+
//
|
|
34570
|
+
// These two figures are the rate card's ($0.03 USD / $0.05 AUD per armed
|
|
34571
|
+
// minute, migration 20260827000001) multiplied by thirty. They are prose
|
|
34572
|
+
// here rather than read from the rate card, which is a real drift
|
|
34573
|
+
// hazard — so it is held by a test that reprices both from the migration
|
|
34574
|
+
// and fails if they disagree, rather than by anyone remembering.
|
|
34575
|
+
description: "Let an agent advise on a meeting while it is happening. Audio is transcribed on the Mac as usual; short passages are then checked by Augmented Team to decide when the agent should speak up, and the agent sees those moments in real time. Off until you turn it on. Billed per minute the advisor is armed \u2014 about $0.90 for a half-hour advised meeting (A$1.50 in Australian dollars); a meeting you record without arming the advisor costs nothing.",
|
|
34564
34576
|
access: "write",
|
|
34565
34577
|
requires_org_opt_in: true
|
|
34566
34578
|
}
|
|
34567
34579
|
],
|
|
34568
34580
|
beta: true,
|
|
34581
|
+
// ENG-9278: STILL `included`, and the meter does not change that.
|
|
34582
|
+
//
|
|
34583
|
+
// Ninja Notes acquired its first metered path — live advising — and the
|
|
34584
|
+
// obvious move was to flip this to `usage`. It is refused. `pricing` drives
|
|
34585
|
+
// the org admin's acknowledgement modal, where `usage` renders as "manages
|
|
34586
|
+
// and bills by usage"; saying that to the many orgs who record notes and
|
|
34587
|
+
// never arm an advisor would be a false statement in a consent dialog, which
|
|
34588
|
+
// is the exact harm the `included` case was added to prevent, inverted.
|
|
34589
|
+
//
|
|
34590
|
+
// Notes really are included. The one metered thing is a capability with its
|
|
34591
|
+
// own org opt-in and its own price in its own description, which is where
|
|
34592
|
+
// the consent for it actually happens.
|
|
34593
|
+
//
|
|
34594
|
+
// The cost of this choice is that the rate card is not rendered on the
|
|
34595
|
+
// premium surface (that reads definition-level meters, and only for
|
|
34596
|
+
// `pricing: 'usage'`), so the price is prose in two places. Pricing the
|
|
34597
|
+
// CAPABILITY instead — meters on the capability descriptor, read by the
|
|
34598
|
+
// premium surface — is the structurally right answer and the follow-up.
|
|
34569
34599
|
premium: {
|
|
34570
34600
|
pricing: "included",
|
|
34571
|
-
note: "
|
|
34601
|
+
note: "Notes are included in your plan. Transcription runs on your own Mac and no platform summariser runs, so nothing is metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other. Live meeting advising is the one exception: it is turned on separately, and billed per minute the advisor is armed."
|
|
34572
34602
|
}
|
|
34573
34603
|
},
|
|
34574
34604
|
{
|
|
@@ -43,8 +43,8 @@ import {
|
|
|
43
43
|
writeDirectChatSessionState,
|
|
44
44
|
writeEgressAllowlist,
|
|
45
45
|
writePersistentClaudeWrapper
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-JWFVVQ5R.js";
|
|
47
|
+
import "./chunk-DX3REH6Z.js";
|
|
48
48
|
import "./chunk-XWVM4KPK.js";
|
|
49
49
|
export {
|
|
50
50
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -92,4 +92,4 @@ export {
|
|
|
92
92
|
writeEgressAllowlist,
|
|
93
93
|
writePersistentClaudeWrapper
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=persistent-session-
|
|
95
|
+
//# sourceMappingURL=persistent-session-V72ISHD4.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-JWFVVQ5R.js";
|
|
4
|
+
import "./chunk-DX3REH6Z.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -745,4 +745,4 @@ export {
|
|
|
745
745
|
readAndResetSlackReplyBindingClassifications,
|
|
746
746
|
readAndResetSlackReplyTargetClassifications
|
|
747
747
|
};
|
|
748
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
748
|
+
//# sourceMappingURL=responsiveness-probe-BW5AHMES.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DX3REH6Z.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/session-auth-dead.ts
|
|
6
6
|
import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
|
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
decideSessionAuthState,
|
|
204
204
|
probeSessionAuth
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=session-auth-dead-
|
|
206
|
+
//# sourceMappingURL=session-auth-dead-H5IVXY2C.js.map
|