@integrity-labs/agt-cli 0.28.600 → 0.28.601
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-CA4F6NMI.js → chunk-IXRVFTBR.js} +4 -4
- package/dist/{chunk-PONGSI2H.js → chunk-V2WCVFDA.js} +75 -2
- package/dist/chunk-V2WCVFDA.js.map +1 -0
- package/dist/{chunk-Q6LJQ43K.js → chunk-XTLKPF2A.js} +2 -2
- package/dist/{claude-pair-runtime-QYDFXJ4O.js → claude-pair-runtime-I5EA2L7Z.js} +2 -2
- package/dist/lib/manager-worker.js +12 -12
- package/dist/mcp/direct-chat-channel.js +74 -1
- package/dist/mcp/origami.js +74 -1
- package/dist/mcp/slack-channel.js +74 -1
- package/dist/mcp/telegram-channel.js +74 -1
- package/dist/{persistent-session-BX24GH42.js → persistent-session-4E3TSALP.js} +3 -3
- package/dist/{responsiveness-probe-7L5TEFAX.js → responsiveness-probe-QLHKSMVN.js} +3 -3
- package/dist/{session-auth-dead-R6LCK634.js → session-auth-dead-UVNMIC5M.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-PONGSI2H.js.map +0 -1
- /package/dist/{chunk-CA4F6NMI.js.map → chunk-IXRVFTBR.js.map} +0 -0
- /package/dist/{chunk-Q6LJQ43K.js.map → chunk-XTLKPF2A.js.map} +0 -0
- /package/dist/{claude-pair-runtime-QYDFXJ4O.js.map → claude-pair-runtime-I5EA2L7Z.js.map} +0 -0
- /package/dist/{persistent-session-BX24GH42.js.map → persistent-session-4E3TSALP.js.map} +0 -0
- /package/dist/{responsiveness-probe-7L5TEFAX.js.map → responsiveness-probe-QLHKSMVN.js.map} +0 -0
- /package/dist/{session-auth-dead-R6LCK634.js.map → session-auth-dead-UVNMIC5M.js.map} +0 -0
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
rotateDailySession,
|
|
17
17
|
sessionFileExists,
|
|
18
18
|
todayLocalIso
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-V2WCVFDA.js";
|
|
20
20
|
import {
|
|
21
21
|
reapOrphanChannelMcps
|
|
22
22
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -4349,4 +4349,4 @@ export {
|
|
|
4349
4349
|
stopAllSessionsAndWait,
|
|
4350
4350
|
getProjectDir
|
|
4351
4351
|
};
|
|
4352
|
-
//# sourceMappingURL=chunk-
|
|
4352
|
+
//# sourceMappingURL=chunk-XTLKPF2A.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-4E3TSALP.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-I5EA2L7Z.js.map
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
safeWriteJsonAtomic,
|
|
54
54
|
setConfigHash,
|
|
55
55
|
tripClass
|
|
56
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-IXRVFTBR.js";
|
|
57
57
|
import {
|
|
58
58
|
getProjectDir as getProjectDir2,
|
|
59
59
|
getReadyTasks,
|
|
@@ -109,7 +109,7 @@ import {
|
|
|
109
109
|
takeZombieDetection,
|
|
110
110
|
toOpencodeModel,
|
|
111
111
|
writeEgressAllowlist
|
|
112
|
-
} from "../chunk-
|
|
112
|
+
} from "../chunk-XTLKPF2A.js";
|
|
113
113
|
import {
|
|
114
114
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
115
115
|
AnchorSessionClient,
|
|
@@ -186,7 +186,7 @@ import {
|
|
|
186
186
|
subagentActivityAgeSeconds,
|
|
187
187
|
sumTranscriptUsageInWindow,
|
|
188
188
|
transcriptActivityAgeSeconds
|
|
189
|
-
} from "../chunk-
|
|
189
|
+
} from "../chunk-V2WCVFDA.js";
|
|
190
190
|
import {
|
|
191
191
|
reapOrphanChannelMcps
|
|
192
192
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -11880,7 +11880,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
11880
11880
|
var lastVersionCheckAt = 0;
|
|
11881
11881
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
11882
11882
|
var lastResponsivenessProbeAt = 0;
|
|
11883
|
-
var agtCliVersion = true ? "0.28.
|
|
11883
|
+
var agtCliVersion = true ? "0.28.601" : "dev";
|
|
11884
11884
|
function resolveBrewPath(execFileSync3) {
|
|
11885
11885
|
try {
|
|
11886
11886
|
const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -13187,7 +13187,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
13187
13187
|
if (codeNames.length === 0) return;
|
|
13188
13188
|
void (async () => {
|
|
13189
13189
|
try {
|
|
13190
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13190
|
+
const { collectDiagnostics } = await import("../persistent-session-4E3TSALP.js");
|
|
13191
13191
|
await api.post("/host/heartbeat", {
|
|
13192
13192
|
host_id: hostId,
|
|
13193
13193
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -13295,7 +13295,7 @@ async function pollCycle() {
|
|
|
13295
13295
|
}
|
|
13296
13296
|
try {
|
|
13297
13297
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
13298
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13298
|
+
const { collectDiagnostics } = await import("../persistent-session-4E3TSALP.js");
|
|
13299
13299
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
13300
13300
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor) : void 0;
|
|
13301
13301
|
let tailscaleHostname;
|
|
@@ -13418,7 +13418,7 @@ async function pollCycle() {
|
|
|
13418
13418
|
collectPanelessActivityProbes,
|
|
13419
13419
|
getResponsivenessIntervalMs,
|
|
13420
13420
|
occupancyQualificationClassifications
|
|
13421
|
-
} = await import("../responsiveness-probe-
|
|
13421
|
+
} = await import("../responsiveness-probe-QLHKSMVN.js");
|
|
13422
13422
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
13423
13423
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
13424
13424
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -13509,7 +13509,7 @@ async function pollCycle() {
|
|
|
13509
13509
|
collectResponsivenessProbes,
|
|
13510
13510
|
livePendingInboundOldestAgeSeconds,
|
|
13511
13511
|
parkPendingInbound
|
|
13512
|
-
} = await import("../responsiveness-probe-
|
|
13512
|
+
} = await import("../responsiveness-probe-QLHKSMVN.js");
|
|
13513
13513
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
13514
13514
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
13515
13515
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -13665,7 +13665,7 @@ async function pollCycle() {
|
|
|
13665
13665
|
}
|
|
13666
13666
|
try {
|
|
13667
13667
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
13668
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
13668
|
+
const { probeSessionAuth } = await import("../session-auth-dead-UVNMIC5M.js");
|
|
13669
13669
|
const observations = [];
|
|
13670
13670
|
const pendingCacheCommits = [];
|
|
13671
13671
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -17093,7 +17093,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
17093
17093
|
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}`));
|
|
17094
17094
|
void (async () => {
|
|
17095
17095
|
try {
|
|
17096
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
17096
|
+
const { collectDiagnostics } = await import("../persistent-session-4E3TSALP.js");
|
|
17097
17097
|
await api.post("/host/heartbeat", {
|
|
17098
17098
|
host_id: hostId,
|
|
17099
17099
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -17144,7 +17144,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
17144
17144
|
}
|
|
17145
17145
|
try {
|
|
17146
17146
|
const hostId = await getHostId();
|
|
17147
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
17147
|
+
const { collectDiagnostics } = await import("../persistent-session-4E3TSALP.js");
|
|
17148
17148
|
await api.post("/host/heartbeat", {
|
|
17149
17149
|
host_id: hostId,
|
|
17150
17150
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -17740,7 +17740,7 @@ async function processClaudePairSessions(agents) {
|
|
|
17740
17740
|
killPairSession,
|
|
17741
17741
|
pairTmuxSession,
|
|
17742
17742
|
finalizeClaudePairOnboarding
|
|
17743
|
-
} = await import("../claude-pair-runtime-
|
|
17743
|
+
} = await import("../claude-pair-runtime-I5EA2L7Z.js");
|
|
17744
17744
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
17745
17745
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
17746
17746
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -33772,6 +33772,65 @@ var INTEGRATION_REGISTRY = [
|
|
|
33772
33772
|
}]
|
|
33773
33773
|
}
|
|
33774
33774
|
},
|
|
33775
|
+
{
|
|
33776
|
+
// Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
33777
|
+
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
33778
|
+
//
|
|
33779
|
+
// No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
|
|
33780
|
+
// integration (integration-definitions.json), so the seed catalog already
|
|
33781
|
+
// makes it picker-visible. This registry entry exists ONLY to carry the
|
|
33782
|
+
// `premium` descriptor that `isPremiumDefinition` reads — which arms the
|
|
33783
|
+
// per-org opt-in gate and the acknowledgement modal.
|
|
33784
|
+
//
|
|
33785
|
+
// PREMIUM BY ENTITLEMENT, WITH NO METER AND NO RATE CARD (ADR-0063 Decision
|
|
33786
|
+
// 9). Every other premium in this registry is priced because it costs the
|
|
33787
|
+
// platform something per call — a vendor bill, a model call, compute. Notes
|
|
33788
|
+
// costs S3 bytes: speech-to-text runs on the user's Mac, the platform never
|
|
33789
|
+
// summarises (Decision 3 gives that job to the agent, whose context is the
|
|
33790
|
+
// entire value), and a 45-minute meeting is tens of KB of text. The revenue
|
|
33791
|
+
// is the entitlement plus agent-hours — reading and summarising a note burns
|
|
33792
|
+
// the agent's turn, which is already billed, so metering the note as well
|
|
33793
|
+
// would charge for the same work twice through two mechanisms.
|
|
33794
|
+
//
|
|
33795
|
+
// What would change this: a per-note platform-side model call. The concrete
|
|
33796
|
+
// trigger is an AGENTLESS integration destination — "send this meeting
|
|
33797
|
+
// straight to Notion" has no agent to summarise it, so the platform must,
|
|
33798
|
+
// and that call is a real marginal cost. Expect a rate card WITH that slice,
|
|
33799
|
+
// scoped to that path, not applied to every note.
|
|
33800
|
+
//
|
|
33801
|
+
// ADR-0063 Decision 9 cites `agt-live` as the precedent for
|
|
33802
|
+
// entitlement-without-a-rate-card. It is not one: agt-live has no entry in
|
|
33803
|
+
// this registry at all, so `isPremiumDefinition('agt-live')` is false and it
|
|
33804
|
+
// is free on this axis. Its premium tier is `plans.live_premium` via
|
|
33805
|
+
// `getPlanForOrg` (ADR-0043) — a plan-tier entitlement enforced at the
|
|
33806
|
+
// CloudFront edge, a different mechanism that shares a word. Notes is the
|
|
33807
|
+
// first integration to need `pricing: 'included'`, which is why that value
|
|
33808
|
+
// now exists.
|
|
33809
|
+
id: "ninjafy-notes",
|
|
33810
|
+
name: "Ninjafy Notes",
|
|
33811
|
+
category: "workspace-productivity",
|
|
33812
|
+
description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
|
|
33813
|
+
supported_auth_types: ["none"],
|
|
33814
|
+
capabilities: [
|
|
33815
|
+
{
|
|
33816
|
+
id: "ninjafy-notes:read",
|
|
33817
|
+
name: "Read Notes",
|
|
33818
|
+
description: "List and read the meeting notes this agent has been sent (ninjafy_notes_list, ninjafy_notes_read).",
|
|
33819
|
+
access: "read"
|
|
33820
|
+
},
|
|
33821
|
+
{
|
|
33822
|
+
id: "ninjafy-notes:write-summary",
|
|
33823
|
+
name: "Write Summaries",
|
|
33824
|
+
description: "Write or revise this agent's own summary of a note it was sent (ninjafy_notes_write_summary).",
|
|
33825
|
+
access: "write"
|
|
33826
|
+
}
|
|
33827
|
+
],
|
|
33828
|
+
beta: true,
|
|
33829
|
+
premium: {
|
|
33830
|
+
pricing: "included",
|
|
33831
|
+
note: "Included in your plan. Transcription runs on your own Mac and no platform summariser runs, so there is nothing metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other."
|
|
33832
|
+
}
|
|
33833
|
+
},
|
|
33775
33834
|
{
|
|
33776
33835
|
// Seed-catalog toolkit (composed by the ultimate-app-coder bundle). Registered
|
|
33777
33836
|
// here only so the manager's ensureToolkitCli installs the binary via the
|
|
@@ -33964,7 +34023,7 @@ var ONBOARDING_REPLY_TIMEOUT_MS = 24 * 60 * 6e4;
|
|
|
33964
34023
|
// ../core/dist/auth/oauth-principal.js
|
|
33965
34024
|
var NOTES_WRITE_SCOPE = "notes:write";
|
|
33966
34025
|
var USER_PRINCIPAL_SCOPE_LABELS = {
|
|
33967
|
-
[NOTES_WRITE_SCOPE]: "Create meeting notes as you,
|
|
34026
|
+
[NOTES_WRITE_SCOPE]: "Create meeting notes as you, read the notes you own, and see the names of your organizations and agents so you can choose where a note goes"
|
|
33968
34027
|
};
|
|
33969
34028
|
|
|
33970
34029
|
// ../core/dist/inbound-lanes/index.js
|
|
@@ -34789,6 +34848,20 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
34789
34848
|
|
|
34790
34849
|
// ../core/dist/feature-flags/registry.js
|
|
34791
34850
|
var FLAG_REGISTRY = [
|
|
34851
|
+
{
|
|
34852
|
+
key: "at-rest-v2-writes",
|
|
34853
|
+
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
34854
|
+
flagType: "boolean",
|
|
34855
|
+
// Declared safe value is `false` = v1 writes, the pre-ADR-0061 behaviour. A
|
|
34856
|
+
// flag-read error must never arm v2 on its own (fail-safe = keep writing v1).
|
|
34857
|
+
defaultValue: false,
|
|
34858
|
+
// Deliberately NOT public (a server/process gate, never read client-side) and
|
|
34859
|
+
// NO envVar (the consumers — API + webapp + cron bootstraps — evaluate the
|
|
34860
|
+
// flag directly; a bare AGT_*_ENABLED env gate would trip check-new-env-gates.sh).
|
|
34861
|
+
// Sensitive: arming changes the durable at-rest ciphertext format fleet-wide, a
|
|
34862
|
+
// deliberate staged security flip, so mutations require explicit confirmation.
|
|
34863
|
+
sensitive: true
|
|
34864
|
+
},
|
|
34792
34865
|
{
|
|
34793
34866
|
key: "opencode-host-wizard",
|
|
34794
34867
|
description: "Show a framework selector (Claude Code | opencode) in the new-host wizard, plus the opencode auth mode (xAI/Grok, per-agent minted keys). Off = the wizard only creates Claude Code hosts (opencode host creation stays CLI/programmatic). Additive UI gate; ships dark. The backend mint + claude_auth_mode=xai are enabled separately.",
|
package/dist/mcp/origami.js
CHANGED
|
@@ -40110,6 +40110,65 @@ var INTEGRATION_REGISTRY = [
|
|
|
40110
40110
|
}]
|
|
40111
40111
|
}
|
|
40112
40112
|
},
|
|
40113
|
+
{
|
|
40114
|
+
// Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
40115
|
+
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
40116
|
+
//
|
|
40117
|
+
// No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
|
|
40118
|
+
// integration (integration-definitions.json), so the seed catalog already
|
|
40119
|
+
// makes it picker-visible. This registry entry exists ONLY to carry the
|
|
40120
|
+
// `premium` descriptor that `isPremiumDefinition` reads — which arms the
|
|
40121
|
+
// per-org opt-in gate and the acknowledgement modal.
|
|
40122
|
+
//
|
|
40123
|
+
// PREMIUM BY ENTITLEMENT, WITH NO METER AND NO RATE CARD (ADR-0063 Decision
|
|
40124
|
+
// 9). Every other premium in this registry is priced because it costs the
|
|
40125
|
+
// platform something per call — a vendor bill, a model call, compute. Notes
|
|
40126
|
+
// costs S3 bytes: speech-to-text runs on the user's Mac, the platform never
|
|
40127
|
+
// summarises (Decision 3 gives that job to the agent, whose context is the
|
|
40128
|
+
// entire value), and a 45-minute meeting is tens of KB of text. The revenue
|
|
40129
|
+
// is the entitlement plus agent-hours — reading and summarising a note burns
|
|
40130
|
+
// the agent's turn, which is already billed, so metering the note as well
|
|
40131
|
+
// would charge for the same work twice through two mechanisms.
|
|
40132
|
+
//
|
|
40133
|
+
// What would change this: a per-note platform-side model call. The concrete
|
|
40134
|
+
// trigger is an AGENTLESS integration destination — "send this meeting
|
|
40135
|
+
// straight to Notion" has no agent to summarise it, so the platform must,
|
|
40136
|
+
// and that call is a real marginal cost. Expect a rate card WITH that slice,
|
|
40137
|
+
// scoped to that path, not applied to every note.
|
|
40138
|
+
//
|
|
40139
|
+
// ADR-0063 Decision 9 cites `agt-live` as the precedent for
|
|
40140
|
+
// entitlement-without-a-rate-card. It is not one: agt-live has no entry in
|
|
40141
|
+
// this registry at all, so `isPremiumDefinition('agt-live')` is false and it
|
|
40142
|
+
// is free on this axis. Its premium tier is `plans.live_premium` via
|
|
40143
|
+
// `getPlanForOrg` (ADR-0043) — a plan-tier entitlement enforced at the
|
|
40144
|
+
// CloudFront edge, a different mechanism that shares a word. Notes is the
|
|
40145
|
+
// first integration to need `pricing: 'included'`, which is why that value
|
|
40146
|
+
// now exists.
|
|
40147
|
+
id: "ninjafy-notes",
|
|
40148
|
+
name: "Ninjafy Notes",
|
|
40149
|
+
category: "workspace-productivity",
|
|
40150
|
+
description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
|
|
40151
|
+
supported_auth_types: ["none"],
|
|
40152
|
+
capabilities: [
|
|
40153
|
+
{
|
|
40154
|
+
id: "ninjafy-notes:read",
|
|
40155
|
+
name: "Read Notes",
|
|
40156
|
+
description: "List and read the meeting notes this agent has been sent (ninjafy_notes_list, ninjafy_notes_read).",
|
|
40157
|
+
access: "read"
|
|
40158
|
+
},
|
|
40159
|
+
{
|
|
40160
|
+
id: "ninjafy-notes:write-summary",
|
|
40161
|
+
name: "Write Summaries",
|
|
40162
|
+
description: "Write or revise this agent's own summary of a note it was sent (ninjafy_notes_write_summary).",
|
|
40163
|
+
access: "write"
|
|
40164
|
+
}
|
|
40165
|
+
],
|
|
40166
|
+
beta: true,
|
|
40167
|
+
premium: {
|
|
40168
|
+
pricing: "included",
|
|
40169
|
+
note: "Included in your plan. Transcription runs on your own Mac and no platform summariser runs, so there is nothing metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other."
|
|
40170
|
+
}
|
|
40171
|
+
},
|
|
40113
40172
|
{
|
|
40114
40173
|
// Seed-catalog toolkit (composed by the ultimate-app-coder bundle). Registered
|
|
40115
40174
|
// here only so the manager's ensureToolkitCli installs the binary via the
|
|
@@ -40246,7 +40305,7 @@ var ONBOARDING_REPLY_TIMEOUT_MS = 24 * 60 * 6e4;
|
|
|
40246
40305
|
// ../core/dist/auth/oauth-principal.js
|
|
40247
40306
|
var NOTES_WRITE_SCOPE = "notes:write";
|
|
40248
40307
|
var USER_PRINCIPAL_SCOPE_LABELS = {
|
|
40249
|
-
[NOTES_WRITE_SCOPE]: "Create meeting notes as you,
|
|
40308
|
+
[NOTES_WRITE_SCOPE]: "Create meeting notes as you, read the notes you own, and see the names of your organizations and agents so you can choose where a note goes"
|
|
40250
40309
|
};
|
|
40251
40310
|
|
|
40252
40311
|
// ../core/dist/inbound-lanes/index.js
|
|
@@ -40680,6 +40739,20 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
40680
40739
|
|
|
40681
40740
|
// ../core/dist/feature-flags/registry.js
|
|
40682
40741
|
var FLAG_REGISTRY = [
|
|
40742
|
+
{
|
|
40743
|
+
key: "at-rest-v2-writes",
|
|
40744
|
+
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
40745
|
+
flagType: "boolean",
|
|
40746
|
+
// Declared safe value is `false` = v1 writes, the pre-ADR-0061 behaviour. A
|
|
40747
|
+
// flag-read error must never arm v2 on its own (fail-safe = keep writing v1).
|
|
40748
|
+
defaultValue: false,
|
|
40749
|
+
// Deliberately NOT public (a server/process gate, never read client-side) and
|
|
40750
|
+
// NO envVar (the consumers — API + webapp + cron bootstraps — evaluate the
|
|
40751
|
+
// flag directly; a bare AGT_*_ENABLED env gate would trip check-new-env-gates.sh).
|
|
40752
|
+
// Sensitive: arming changes the durable at-rest ciphertext format fleet-wide, a
|
|
40753
|
+
// deliberate staged security flip, so mutations require explicit confirmation.
|
|
40754
|
+
sensitive: true
|
|
40755
|
+
},
|
|
40683
40756
|
{
|
|
40684
40757
|
key: "opencode-host-wizard",
|
|
40685
40758
|
description: "Show a framework selector (Claude Code | opencode) in the new-host wizard, plus the opencode auth mode (xAI/Grok, per-agent minted keys). Off = the wizard only creates Claude Code hosts (opencode host creation stays CLI/programmatic). Additive UI gate; ships dark. The backend mint + claude_auth_mode=xai are enabled separately.",
|
|
@@ -34161,6 +34161,65 @@ var INTEGRATION_REGISTRY = [
|
|
|
34161
34161
|
}]
|
|
34162
34162
|
}
|
|
34163
34163
|
},
|
|
34164
|
+
{
|
|
34165
|
+
// Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
34166
|
+
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
34167
|
+
//
|
|
34168
|
+
// No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
|
|
34169
|
+
// integration (integration-definitions.json), so the seed catalog already
|
|
34170
|
+
// makes it picker-visible. This registry entry exists ONLY to carry the
|
|
34171
|
+
// `premium` descriptor that `isPremiumDefinition` reads — which arms the
|
|
34172
|
+
// per-org opt-in gate and the acknowledgement modal.
|
|
34173
|
+
//
|
|
34174
|
+
// PREMIUM BY ENTITLEMENT, WITH NO METER AND NO RATE CARD (ADR-0063 Decision
|
|
34175
|
+
// 9). Every other premium in this registry is priced because it costs the
|
|
34176
|
+
// platform something per call — a vendor bill, a model call, compute. Notes
|
|
34177
|
+
// costs S3 bytes: speech-to-text runs on the user's Mac, the platform never
|
|
34178
|
+
// summarises (Decision 3 gives that job to the agent, whose context is the
|
|
34179
|
+
// entire value), and a 45-minute meeting is tens of KB of text. The revenue
|
|
34180
|
+
// is the entitlement plus agent-hours — reading and summarising a note burns
|
|
34181
|
+
// the agent's turn, which is already billed, so metering the note as well
|
|
34182
|
+
// would charge for the same work twice through two mechanisms.
|
|
34183
|
+
//
|
|
34184
|
+
// What would change this: a per-note platform-side model call. The concrete
|
|
34185
|
+
// trigger is an AGENTLESS integration destination — "send this meeting
|
|
34186
|
+
// straight to Notion" has no agent to summarise it, so the platform must,
|
|
34187
|
+
// and that call is a real marginal cost. Expect a rate card WITH that slice,
|
|
34188
|
+
// scoped to that path, not applied to every note.
|
|
34189
|
+
//
|
|
34190
|
+
// ADR-0063 Decision 9 cites `agt-live` as the precedent for
|
|
34191
|
+
// entitlement-without-a-rate-card. It is not one: agt-live has no entry in
|
|
34192
|
+
// this registry at all, so `isPremiumDefinition('agt-live')` is false and it
|
|
34193
|
+
// is free on this axis. Its premium tier is `plans.live_premium` via
|
|
34194
|
+
// `getPlanForOrg` (ADR-0043) — a plan-tier entitlement enforced at the
|
|
34195
|
+
// CloudFront edge, a different mechanism that shares a word. Notes is the
|
|
34196
|
+
// first integration to need `pricing: 'included'`, which is why that value
|
|
34197
|
+
// now exists.
|
|
34198
|
+
id: "ninjafy-notes",
|
|
34199
|
+
name: "Ninjafy Notes",
|
|
34200
|
+
category: "workspace-productivity",
|
|
34201
|
+
description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
|
|
34202
|
+
supported_auth_types: ["none"],
|
|
34203
|
+
capabilities: [
|
|
34204
|
+
{
|
|
34205
|
+
id: "ninjafy-notes:read",
|
|
34206
|
+
name: "Read Notes",
|
|
34207
|
+
description: "List and read the meeting notes this agent has been sent (ninjafy_notes_list, ninjafy_notes_read).",
|
|
34208
|
+
access: "read"
|
|
34209
|
+
},
|
|
34210
|
+
{
|
|
34211
|
+
id: "ninjafy-notes:write-summary",
|
|
34212
|
+
name: "Write Summaries",
|
|
34213
|
+
description: "Write or revise this agent's own summary of a note it was sent (ninjafy_notes_write_summary).",
|
|
34214
|
+
access: "write"
|
|
34215
|
+
}
|
|
34216
|
+
],
|
|
34217
|
+
beta: true,
|
|
34218
|
+
premium: {
|
|
34219
|
+
pricing: "included",
|
|
34220
|
+
note: "Included in your plan. Transcription runs on your own Mac and no platform summariser runs, so there is nothing metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other."
|
|
34221
|
+
}
|
|
34222
|
+
},
|
|
34164
34223
|
{
|
|
34165
34224
|
// Seed-catalog toolkit (composed by the ultimate-app-coder bundle). Registered
|
|
34166
34225
|
// here only so the manager's ensureToolkitCli installs the binary via the
|
|
@@ -34297,7 +34356,7 @@ var ONBOARDING_REPLY_TIMEOUT_MS = 24 * 60 * 6e4;
|
|
|
34297
34356
|
// ../core/dist/auth/oauth-principal.js
|
|
34298
34357
|
var NOTES_WRITE_SCOPE = "notes:write";
|
|
34299
34358
|
var USER_PRINCIPAL_SCOPE_LABELS = {
|
|
34300
|
-
[NOTES_WRITE_SCOPE]: "Create meeting notes as you,
|
|
34359
|
+
[NOTES_WRITE_SCOPE]: "Create meeting notes as you, read the notes you own, and see the names of your organizations and agents so you can choose where a note goes"
|
|
34301
34360
|
};
|
|
34302
34361
|
|
|
34303
34362
|
// ../core/dist/inbound-lanes/index.js
|
|
@@ -35125,6 +35184,20 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
35125
35184
|
|
|
35126
35185
|
// ../core/dist/feature-flags/registry.js
|
|
35127
35186
|
var FLAG_REGISTRY = [
|
|
35187
|
+
{
|
|
35188
|
+
key: "at-rest-v2-writes",
|
|
35189
|
+
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
35190
|
+
flagType: "boolean",
|
|
35191
|
+
// Declared safe value is `false` = v1 writes, the pre-ADR-0061 behaviour. A
|
|
35192
|
+
// flag-read error must never arm v2 on its own (fail-safe = keep writing v1).
|
|
35193
|
+
defaultValue: false,
|
|
35194
|
+
// Deliberately NOT public (a server/process gate, never read client-side) and
|
|
35195
|
+
// NO envVar (the consumers — API + webapp + cron bootstraps — evaluate the
|
|
35196
|
+
// flag directly; a bare AGT_*_ENABLED env gate would trip check-new-env-gates.sh).
|
|
35197
|
+
// Sensitive: arming changes the durable at-rest ciphertext format fleet-wide, a
|
|
35198
|
+
// deliberate staged security flip, so mutations require explicit confirmation.
|
|
35199
|
+
sensitive: true
|
|
35200
|
+
},
|
|
35128
35201
|
{
|
|
35129
35202
|
key: "opencode-host-wizard",
|
|
35130
35203
|
description: "Show a framework selector (Claude Code | opencode) in the new-host wizard, plus the opencode auth mode (xAI/Grok, per-agent minted keys). Off = the wizard only creates Claude Code hosts (opencode host creation stays CLI/programmatic). Additive UI gate; ships dark. The backend mint + claude_auth_mode=xai are enabled separately.",
|
|
@@ -34320,6 +34320,65 @@ var INTEGRATION_REGISTRY = [
|
|
|
34320
34320
|
}]
|
|
34321
34321
|
}
|
|
34322
34322
|
},
|
|
34323
|
+
{
|
|
34324
|
+
// Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
|
|
34325
|
+
// delivered to an agent as a tag-granted note the agent reads and summarises.
|
|
34326
|
+
//
|
|
34327
|
+
// No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
|
|
34328
|
+
// integration (integration-definitions.json), so the seed catalog already
|
|
34329
|
+
// makes it picker-visible. This registry entry exists ONLY to carry the
|
|
34330
|
+
// `premium` descriptor that `isPremiumDefinition` reads — which arms the
|
|
34331
|
+
// per-org opt-in gate and the acknowledgement modal.
|
|
34332
|
+
//
|
|
34333
|
+
// PREMIUM BY ENTITLEMENT, WITH NO METER AND NO RATE CARD (ADR-0063 Decision
|
|
34334
|
+
// 9). Every other premium in this registry is priced because it costs the
|
|
34335
|
+
// platform something per call — a vendor bill, a model call, compute. Notes
|
|
34336
|
+
// costs S3 bytes: speech-to-text runs on the user's Mac, the platform never
|
|
34337
|
+
// summarises (Decision 3 gives that job to the agent, whose context is the
|
|
34338
|
+
// entire value), and a 45-minute meeting is tens of KB of text. The revenue
|
|
34339
|
+
// is the entitlement plus agent-hours — reading and summarising a note burns
|
|
34340
|
+
// the agent's turn, which is already billed, so metering the note as well
|
|
34341
|
+
// would charge for the same work twice through two mechanisms.
|
|
34342
|
+
//
|
|
34343
|
+
// What would change this: a per-note platform-side model call. The concrete
|
|
34344
|
+
// trigger is an AGENTLESS integration destination — "send this meeting
|
|
34345
|
+
// straight to Notion" has no agent to summarise it, so the platform must,
|
|
34346
|
+
// and that call is a real marginal cost. Expect a rate card WITH that slice,
|
|
34347
|
+
// scoped to that path, not applied to every note.
|
|
34348
|
+
//
|
|
34349
|
+
// ADR-0063 Decision 9 cites `agt-live` as the precedent for
|
|
34350
|
+
// entitlement-without-a-rate-card. It is not one: agt-live has no entry in
|
|
34351
|
+
// this registry at all, so `isPremiumDefinition('agt-live')` is false and it
|
|
34352
|
+
// is free on this axis. Its premium tier is `plans.live_premium` via
|
|
34353
|
+
// `getPlanForOrg` (ADR-0043) — a plan-tier entitlement enforced at the
|
|
34354
|
+
// CloudFront edge, a different mechanism that shares a word. Notes is the
|
|
34355
|
+
// first integration to need `pricing: 'included'`, which is why that value
|
|
34356
|
+
// now exists.
|
|
34357
|
+
id: "ninjafy-notes",
|
|
34358
|
+
name: "Ninjafy Notes",
|
|
34359
|
+
category: "workspace-productivity",
|
|
34360
|
+
description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
|
|
34361
|
+
supported_auth_types: ["none"],
|
|
34362
|
+
capabilities: [
|
|
34363
|
+
{
|
|
34364
|
+
id: "ninjafy-notes:read",
|
|
34365
|
+
name: "Read Notes",
|
|
34366
|
+
description: "List and read the meeting notes this agent has been sent (ninjafy_notes_list, ninjafy_notes_read).",
|
|
34367
|
+
access: "read"
|
|
34368
|
+
},
|
|
34369
|
+
{
|
|
34370
|
+
id: "ninjafy-notes:write-summary",
|
|
34371
|
+
name: "Write Summaries",
|
|
34372
|
+
description: "Write or revise this agent's own summary of a note it was sent (ninjafy_notes_write_summary).",
|
|
34373
|
+
access: "write"
|
|
34374
|
+
}
|
|
34375
|
+
],
|
|
34376
|
+
beta: true,
|
|
34377
|
+
premium: {
|
|
34378
|
+
pricing: "included",
|
|
34379
|
+
note: "Included in your plan. Transcription runs on your own Mac and no platform summariser runs, so there is nothing metered per note \u2014 the agent turn that reads it is billed as agent-hours like any other."
|
|
34380
|
+
}
|
|
34381
|
+
},
|
|
34323
34382
|
{
|
|
34324
34383
|
// Seed-catalog toolkit (composed by the ultimate-app-coder bundle). Registered
|
|
34325
34384
|
// here only so the manager's ensureToolkitCli installs the binary via the
|
|
@@ -34456,7 +34515,7 @@ var ONBOARDING_REPLY_TIMEOUT_MS = 24 * 60 * 6e4;
|
|
|
34456
34515
|
// ../core/dist/auth/oauth-principal.js
|
|
34457
34516
|
var NOTES_WRITE_SCOPE = "notes:write";
|
|
34458
34517
|
var USER_PRINCIPAL_SCOPE_LABELS = {
|
|
34459
|
-
[NOTES_WRITE_SCOPE]: "Create meeting notes as you,
|
|
34518
|
+
[NOTES_WRITE_SCOPE]: "Create meeting notes as you, read the notes you own, and see the names of your organizations and agents so you can choose where a note goes"
|
|
34460
34519
|
};
|
|
34461
34520
|
|
|
34462
34521
|
// ../core/dist/inbound-lanes/index.js
|
|
@@ -35284,6 +35343,20 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
35284
35343
|
|
|
35285
35344
|
// ../core/dist/feature-flags/registry.js
|
|
35286
35345
|
var FLAG_REGISTRY = [
|
|
35346
|
+
{
|
|
35347
|
+
key: "at-rest-v2-writes",
|
|
35348
|
+
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
35349
|
+
flagType: "boolean",
|
|
35350
|
+
// Declared safe value is `false` = v1 writes, the pre-ADR-0061 behaviour. A
|
|
35351
|
+
// flag-read error must never arm v2 on its own (fail-safe = keep writing v1).
|
|
35352
|
+
defaultValue: false,
|
|
35353
|
+
// Deliberately NOT public (a server/process gate, never read client-side) and
|
|
35354
|
+
// NO envVar (the consumers — API + webapp + cron bootstraps — evaluate the
|
|
35355
|
+
// flag directly; a bare AGT_*_ENABLED env gate would trip check-new-env-gates.sh).
|
|
35356
|
+
// Sensitive: arming changes the durable at-rest ciphertext format fleet-wide, a
|
|
35357
|
+
// deliberate staged security flip, so mutations require explicit confirmation.
|
|
35358
|
+
sensitive: true
|
|
35359
|
+
},
|
|
35287
35360
|
{
|
|
35288
35361
|
key: "opencode-host-wizard",
|
|
35289
35362
|
description: "Show a framework selector (Claude Code | opencode) in the new-host wizard, plus the opencode auth mode (xAI/Grok, per-agent minted keys). Off = the wizard only creates Claude Code hosts (opencode host creation stays CLI/programmatic). Additive UI gate; ships dark. The backend mint + claude_auth_mode=xai are enabled separately.",
|
|
@@ -43,8 +43,8 @@ import {
|
|
|
43
43
|
writeDirectChatSessionState,
|
|
44
44
|
writeEgressAllowlist,
|
|
45
45
|
writePersistentClaudeWrapper
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-XTLKPF2A.js";
|
|
47
|
+
import "./chunk-V2WCVFDA.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-4E3TSALP.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-XTLKPF2A.js";
|
|
4
|
+
import "./chunk-V2WCVFDA.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -690,4 +690,4 @@ export {
|
|
|
690
690
|
readAndResetSlackReplyBindingClassifications,
|
|
691
691
|
readAndResetSlackReplyTargetClassifications
|
|
692
692
|
};
|
|
693
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
693
|
+
//# sourceMappingURL=responsiveness-probe-QLHKSMVN.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-V2WCVFDA.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-UVNMIC5M.js.map
|