@genesislcap/ai-assistant 15.3.3-alpha-4899ddd.0 → 15.3.4
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/ai-assistant.api.json +5 -391
- package/dist/ai-assistant.d.ts +6 -603
- package/dist/chat-driver.cjs +26 -285
- package/dist/chat-driver.cjs.map +3 -3
- package/dist/chat-driver.mjs +26 -285
- package/dist/chat-driver.mjs.map +3 -3
- package/dist/custom-elements.json +10 -236
- package/dist/dts/channel/ai-activity-channel.d.ts +1 -51
- package/dist/dts/channel/ai-activity-channel.d.ts.map +1 -1
- package/dist/dts/components/chat-driver/chat-driver.d.ts +1 -99
- package/dist/dts/components/chat-driver/chat-driver.d.ts.map +1 -1
- package/dist/dts/components/chat-driver/chat-driver.test.d.ts.map +1 -1
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts +0 -14
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts.map +1 -1
- package/dist/dts/main/main.d.ts +6 -384
- package/dist/dts/main/main.d.ts.map +1 -1
- package/dist/dts/main/main.styles.d.ts.map +1 -1
- package/dist/dts/main/main.template.d.ts +0 -53
- package/dist/dts/main/main.template.d.ts.map +1 -1
- package/dist/dts/state/ai-assistant-slice.d.ts +6 -143
- package/dist/dts/state/ai-assistant-slice.d.ts.map +1 -1
- package/dist/dts/state/debug-event-log.d.ts +1 -6
- package/dist/dts/state/debug-event-log.d.ts.map +1 -1
- package/dist/dts/state/session-store.d.ts +0 -10
- package/dist/dts/state/session-store.d.ts.map +1 -1
- package/dist/esm/components/chat-driver/chat-driver.js +21 -263
- package/dist/esm/components/chat-driver/chat-driver.test.js +1 -464
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.js +4 -89
- package/dist/esm/main/main.js +16 -680
- package/dist/esm/main/main.styles.js +0 -47
- package/dist/esm/main/main.template.js +4 -121
- package/dist/esm/state/ai-assistant-slice.js +7 -128
- package/dist/esm/state/ai-assistant-slice.test.js +1 -138
- package/dist/esm/state/debug-event-log.js +2 -7
- package/dist/esm/state/debug-event-log.test.js +1 -49
- package/dist/esm/state/persistence/session-snapshot.test.js +0 -18
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/sub_agent.md +3 -20
- package/package.json +17 -17
- package/src/channel/ai-activity-channel.ts +2 -56
- package/src/components/chat-driver/chat-driver.test.ts +0 -549
- package/src/components/chat-driver/chat-driver.ts +14 -324
- package/src/components/orchestrating-driver/orchestrating-driver.ts +6 -101
- package/src/main/main.styles.ts +0 -47
- package/src/main/main.template.ts +4 -131
- package/src/main/main.ts +10 -680
- package/src/state/ai-assistant-slice.test.ts +0 -215
- package/src/state/ai-assistant-slice.ts +8 -181
- package/src/state/debug-event-log.test.ts +0 -63
- package/src/state/debug-event-log.ts +2 -7
- package/src/state/persistence/session-snapshot.test.ts +0 -22
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.budget.test.d.ts +0 -2
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.budget.test.d.ts.map +0 -1
- package/dist/dts/main/blocked-state.test.d.ts +0 -2
- package/dist/dts/main/blocked-state.test.d.ts.map +0 -1
- package/dist/dts/main/main.styles.test.d.ts +0 -2
- package/dist/dts/main/main.styles.test.d.ts.map +0 -1
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.budget.test.js +0 -312
- package/dist/esm/main/blocked-state.test.js +0 -913
- package/dist/esm/main/main.styles.test.js +0 -86
- package/docs/migration-GENC-1464.md +0 -562
- package/src/components/orchestrating-driver/orchestrating-driver.budget.test.ts +0 -438
- package/src/main/blocked-state.test.ts +0 -1243
- package/src/main/main.styles.test.ts +0 -103
|
@@ -993,7 +993,7 @@
|
|
|
993
993
|
{
|
|
994
994
|
"kind": "PropertySignature",
|
|
995
995
|
"canonicalReference": "@genesislcap/ai-assistant!AgenticActivityEvents#\"tool-loop-end\":member",
|
|
996
|
-
"docComment": "/**\n * Fired when the tool loop completes for the current turn and control returns to the user on the **main chat prompt** (i.e. the next free-form user message can now be accepted).\n *\n * Boundary: this is the moment the user regains control of the main chat input. It is **not** fired when a tool handler hands a widget to the user mid-loop (e.g. while a planning widget is awaiting a click) — widget pauses are still inside the loop, the assistant still owns the turn, and the main chat input may be hidden during them. Wait for this event when you need to know that the assistant is fully idle and the user can type freely again.\n *\n * Emitted from the finally block of each `ChatDriver`'s `sendMessage` and `continueFromHistory`, so a multi-agent handoff fires this event once per agent.\n *\n * Distinct from {@link AgenticActivityEvents.'halo-stop'} — the halo event tracks the spinner animation lifecycle (which can flap mid-turn as tool calls resolve), whereas this event is a one-shot per turn boundary. Use this for hooks tied to a turn ending (telemetry flushes, post-turn workspace transitions, deferred state recomputation).\n *\n * The detail carries the turn's outcome (PTC-0): on a failure it is `{ failureReason }` with the typed `TurnFailureReason`; on a clean completion, a user cancel, a driver dispose, and an agent handoff the detail is `undefined` — the historical shape, kept byte-identical so subscribers that only care about the boundary can keep ignoring it. Structured-cloneable so it survives the cross-tab BroadcastChannel hop.\n
|
|
996
|
+
"docComment": "/**\n * Fired when the tool loop completes for the current turn and control returns to the user on the **main chat prompt** (i.e. the next free-form user message can now be accepted).\n *\n * Boundary: this is the moment the user regains control of the main chat input. It is **not** fired when a tool handler hands a widget to the user mid-loop (e.g. while a planning widget is awaiting a click) — widget pauses are still inside the loop, the assistant still owns the turn, and the main chat input may be hidden during them. Wait for this event when you need to know that the assistant is fully idle and the user can type freely again.\n *\n * Emitted from the finally block of each `ChatDriver`'s `sendMessage` and `continueFromHistory`, so a multi-agent handoff fires this event once per agent.\n *\n * Distinct from {@link AgenticActivityEvents.'halo-stop'} — the halo event tracks the spinner animation lifecycle (which can flap mid-turn as tool calls resolve), whereas this event is a one-shot per turn boundary. Use this for hooks tied to a turn ending (telemetry flushes, post-turn workspace transitions, deferred state recomputation).\n *\n * The detail carries the turn's outcome (PTC-0): on a failure it is `{ failureReason }` with the typed `TurnFailureReason`; on a clean completion, a user cancel, a driver dispose, and an agent handoff the detail is `undefined` — the historical shape, kept byte-identical so subscribers that only care about the boundary can keep ignoring it. Structured-cloneable so it survives the cross-tab BroadcastChannel hop.\n */\n",
|
|
997
997
|
"excerptTokens": [
|
|
998
998
|
{
|
|
999
999
|
"kind": "Content",
|
|
@@ -1010,25 +1010,7 @@
|
|
|
1010
1010
|
},
|
|
1011
1011
|
{
|
|
1012
1012
|
"kind": "Content",
|
|
1013
|
-
"text": ";\n
|
|
1014
|
-
},
|
|
1015
|
-
{
|
|
1016
|
-
"kind": "Reference",
|
|
1017
|
-
"text": "AIProviderType",
|
|
1018
|
-
"canonicalReference": "@genesislcap/foundation-ai!AIProviderType:type"
|
|
1019
|
-
},
|
|
1020
|
-
{
|
|
1021
|
-
"kind": "Content",
|
|
1022
|
-
"text": ";\n budget?: {\n budgetUsd?: number;\n spentUsd?: number;\n vendorLabel: string;\n vendor?: "
|
|
1023
|
-
},
|
|
1024
|
-
{
|
|
1025
|
-
"kind": "Reference",
|
|
1026
|
-
"text": "AIProviderType",
|
|
1027
|
-
"canonicalReference": "@genesislcap/foundation-ai!AIProviderType:type"
|
|
1028
|
-
},
|
|
1029
|
-
{
|
|
1030
|
-
"kind": "Content",
|
|
1031
|
-
"text": ";\n otherVendorAvailable?: boolean;\n };\n } | undefined"
|
|
1013
|
+
"text": ";\n } | undefined"
|
|
1032
1014
|
},
|
|
1033
1015
|
{
|
|
1034
1016
|
"kind": "Content",
|
|
@@ -1041,7 +1023,7 @@
|
|
|
1041
1023
|
"name": "\"tool-loop-end\"",
|
|
1042
1024
|
"propertyTypeTokenRange": {
|
|
1043
1025
|
"startIndex": 1,
|
|
1044
|
-
"endIndex":
|
|
1026
|
+
"endIndex": 4
|
|
1045
1027
|
}
|
|
1046
1028
|
},
|
|
1047
1029
|
{
|
|
@@ -4857,15 +4839,6 @@
|
|
|
4857
4839
|
"text": "SubAgentFailureReason",
|
|
4858
4840
|
"canonicalReference": "@genesislcap/foundation-ai!SubAgentFailureReason:type"
|
|
4859
4841
|
},
|
|
4860
|
-
{
|
|
4861
|
-
"kind": "Content",
|
|
4862
|
-
"text": ";\n budget?: "
|
|
4863
|
-
},
|
|
4864
|
-
{
|
|
4865
|
-
"kind": "Reference",
|
|
4866
|
-
"text": "BudgetDetail",
|
|
4867
|
-
"canonicalReference": "@genesislcap/ai-assistant!~BudgetDetail:type"
|
|
4868
|
-
},
|
|
4869
4842
|
{
|
|
4870
4843
|
"kind": "Content",
|
|
4871
4844
|
"text": ";\n } | undefined"
|
|
@@ -4878,7 +4851,7 @@
|
|
|
4878
4851
|
"isStatic": false,
|
|
4879
4852
|
"returnTypeTokenRange": {
|
|
4880
4853
|
"startIndex": 1,
|
|
4881
|
-
"endIndex":
|
|
4854
|
+
"endIndex": 4
|
|
4882
4855
|
},
|
|
4883
4856
|
"releaseTag": "Beta",
|
|
4884
4857
|
"isProtected": false,
|
|
@@ -5592,33 +5565,6 @@
|
|
|
5592
5565
|
"endIndex": 2
|
|
5593
5566
|
}
|
|
5594
5567
|
},
|
|
5595
|
-
{
|
|
5596
|
-
"kind": "PropertySignature",
|
|
5597
|
-
"canonicalReference": "@genesislcap/ai-assistant!ChatDriverConfig#budgetExhaustedMessage:member",
|
|
5598
|
-
"docComment": "/**\n * Transcript copy appended when the AI-spend budget wall is hit (GENC-1464). Defaults to `DEFAULT_BUDGET_EXHAUSTED_MESSAGE`.\n *\n * The assistant element already lets a host override the blocked **banner** via `setBlocked(true, reason)`; without this the transcript **bubble** stayed on the default, so a white-labelled host got its own copy in the banner and the shipped default directly below it. Passing the same effective copy here keeps the two surfaces saying one thing.\n *\n * Deliberately a driver-config field rather than something read off a chat config: `ChatDriver` has no `chatConfig` and is used standalone (see `chat-driver-node`), so threading one in would be a much larger and less reversible change.\n */\n",
|
|
5599
|
-
"excerptTokens": [
|
|
5600
|
-
{
|
|
5601
|
-
"kind": "Content",
|
|
5602
|
-
"text": "budgetExhaustedMessage?: "
|
|
5603
|
-
},
|
|
5604
|
-
{
|
|
5605
|
-
"kind": "Content",
|
|
5606
|
-
"text": "string"
|
|
5607
|
-
},
|
|
5608
|
-
{
|
|
5609
|
-
"kind": "Content",
|
|
5610
|
-
"text": ";"
|
|
5611
|
-
}
|
|
5612
|
-
],
|
|
5613
|
-
"isReadonly": false,
|
|
5614
|
-
"isOptional": true,
|
|
5615
|
-
"releaseTag": "Beta",
|
|
5616
|
-
"name": "budgetExhaustedMessage",
|
|
5617
|
-
"propertyTypeTokenRange": {
|
|
5618
|
-
"startIndex": 1,
|
|
5619
|
-
"endIndex": 2
|
|
5620
|
-
}
|
|
5621
|
-
},
|
|
5622
5568
|
{
|
|
5623
5569
|
"kind": "PropertySignature",
|
|
5624
5570
|
"canonicalReference": "@genesislcap/ai-assistant!ChatDriverConfig#maxFoldOperations:member",
|
|
@@ -7429,105 +7375,6 @@
|
|
|
7429
7375
|
"isProtected": false,
|
|
7430
7376
|
"isAbstract": false
|
|
7431
7377
|
},
|
|
7432
|
-
{
|
|
7433
|
-
"kind": "Property",
|
|
7434
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#blocked:member",
|
|
7435
|
-
"docComment": "/**\n * Whether the assistant is blocked by a backend condition and cannot send — today, an exhausted AI-spend budget (GENC-1464). While true the composer is disabled, `send`/`submitMessage` refuse, suggestions stop being fetched, and a persistent banner (`part=\"blocked-banner\"`) sits above the composer explaining why. The transcript stays visible and scrollable throughout — unlike `compacting` and `restoring`, this does not replace the conversation.\n *\n * **Latched.** Nothing in the element clears it: not a new turn, not \"Clear\" / \"New chat\", not a pop-in/out. It stays set until the host writes `false` — because nothing the user can do inside the assistant refills a budget. Hosts typically set it from their own pre-flight budget check on mount, and clear it once a later check shows headroom again.\n *\n * The driver also latches it automatically when a turn ends with the `'budget-exhausted'` failure reason — off the `tool-loop-end` activity bus (which also covers a sub-agent wall, a turn this element did not start, and an element swapped in mid-turn) and off the driver's return value (which covers a wall hit during multi-agent classification, where no tool loop ran and so no bus event fires). So a host that does no pre-flight at all still gets a correct locked UI the moment the first 402 lands. The bus topic is tab-scoped, so a wall hit in a popped-out window latches the main window too — correct for a shared spend cap.\n *\n * **Lifetime — read this before relying on it as your source of truth.** The latch is in-memory and per-`stateKey`:\n *\n * - It does **not** survive `switchSession`. Switching away tears the outgoing session's store down entirely, so switching back yields a fresh, unblocked store. - It does **not** survive a page reload. It is deliberately absent from the persisted session snapshot: the snapshot is long-lived, so a persisted latch would outlive an out-of-band budget raise with no in-element way to clear it — a stale lock is worse than re-deriving the state.\n *\n * The durable source of truth is therefore the **host's pre-flight**, which should run on mount and on every session switch. See `docs/migration-GENC-1464.md` §\"How to adopt\", Option B.\n *\n * @beta\n */\n",
|
|
7436
|
-
"excerptTokens": [
|
|
7437
|
-
{
|
|
7438
|
-
"kind": "Content",
|
|
7439
|
-
"text": "get blocked(): "
|
|
7440
|
-
},
|
|
7441
|
-
{
|
|
7442
|
-
"kind": "Content",
|
|
7443
|
-
"text": "boolean"
|
|
7444
|
-
},
|
|
7445
|
-
{
|
|
7446
|
-
"kind": "Content",
|
|
7447
|
-
"text": ";\n\nset blocked(value: boolean);"
|
|
7448
|
-
}
|
|
7449
|
-
],
|
|
7450
|
-
"isReadonly": false,
|
|
7451
|
-
"isOptional": false,
|
|
7452
|
-
"releaseTag": "Beta",
|
|
7453
|
-
"name": "blocked",
|
|
7454
|
-
"propertyTypeTokenRange": {
|
|
7455
|
-
"startIndex": 1,
|
|
7456
|
-
"endIndex": 2
|
|
7457
|
-
},
|
|
7458
|
-
"isStatic": false,
|
|
7459
|
-
"isProtected": false,
|
|
7460
|
-
"isAbstract": false
|
|
7461
|
-
},
|
|
7462
|
-
{
|
|
7463
|
-
"kind": "Property",
|
|
7464
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#blockedReason:member",
|
|
7465
|
-
"docComment": "/**\n * Explanation shown in the blocked banner, or `null` for the element's default copy. Only meaningful while {@link FoundationAiAssistant.blocked} is true; setting `blocked = false` clears it.\n *\n * Writable, and symmetric with every other store-backed accessor on this class: writing it re-latches with the CURRENT `blocked` value, so it changes the copy without disturbing the flag. Assigning `null` clears the explanation while staying blocked (the banner falls back to the default copy). {@link FoundationAiAssistant.setBlocked} remains the way to write both in one atomic action.\n *\n * @beta\n */\n",
|
|
7466
|
-
"excerptTokens": [
|
|
7467
|
-
{
|
|
7468
|
-
"kind": "Content",
|
|
7469
|
-
"text": "get blockedReason(): "
|
|
7470
|
-
},
|
|
7471
|
-
{
|
|
7472
|
-
"kind": "Content",
|
|
7473
|
-
"text": "string | null"
|
|
7474
|
-
},
|
|
7475
|
-
{
|
|
7476
|
-
"kind": "Content",
|
|
7477
|
-
"text": ";\n\nset blockedReason(value: string | null);"
|
|
7478
|
-
}
|
|
7479
|
-
],
|
|
7480
|
-
"isReadonly": false,
|
|
7481
|
-
"isOptional": false,
|
|
7482
|
-
"releaseTag": "Beta",
|
|
7483
|
-
"name": "blockedReason",
|
|
7484
|
-
"propertyTypeTokenRange": {
|
|
7485
|
-
"startIndex": 1,
|
|
7486
|
-
"endIndex": 2
|
|
7487
|
-
},
|
|
7488
|
-
"isStatic": false,
|
|
7489
|
-
"isProtected": false,
|
|
7490
|
-
"isAbstract": false
|
|
7491
|
-
},
|
|
7492
|
-
{
|
|
7493
|
-
"kind": "Property",
|
|
7494
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#blockedVendors:member",
|
|
7495
|
-
"docComment": "/**\n * Vendors currently walled by the AI-spend budget, in the order they were walled. Empty for a host that never adopts the per-vendor API.\n *\n * May include a vendor this registry cannot reach — either because the registry moved on after the wall was latched, or because a 402's `otherVendorAvailable: false` walls every vendor the proxy meters (which is what that verdict is a statement about; see {@link FoundationAiAssistant.latchBlockedFrom}). Neither costs anything internally — {@link FoundationAiAssistant.blocked} asks only about the reachable set, and the banner reads the reachability-filtered {@link FoundationAiAssistant.relevantBlockedVendors} — but a host rendering this list itself should filter it against its own registry.\n *\n * Read-only on purpose: a settable array would let a host write a partial list and silently orphan the per-vendor banner copy. {@link FoundationAiAssistant.setVendorBlocked} is the write path.\n *\n * @beta\n */\n",
|
|
7496
|
-
"excerptTokens": [
|
|
7497
|
-
{
|
|
7498
|
-
"kind": "Content",
|
|
7499
|
-
"text": "get blockedVendors(): "
|
|
7500
|
-
},
|
|
7501
|
-
{
|
|
7502
|
-
"kind": "Content",
|
|
7503
|
-
"text": "readonly "
|
|
7504
|
-
},
|
|
7505
|
-
{
|
|
7506
|
-
"kind": "Reference",
|
|
7507
|
-
"text": "AIProviderType",
|
|
7508
|
-
"canonicalReference": "@genesislcap/foundation-ai!AIProviderType:type"
|
|
7509
|
-
},
|
|
7510
|
-
{
|
|
7511
|
-
"kind": "Content",
|
|
7512
|
-
"text": "[]"
|
|
7513
|
-
},
|
|
7514
|
-
{
|
|
7515
|
-
"kind": "Content",
|
|
7516
|
-
"text": ";"
|
|
7517
|
-
}
|
|
7518
|
-
],
|
|
7519
|
-
"isReadonly": true,
|
|
7520
|
-
"isOptional": false,
|
|
7521
|
-
"releaseTag": "Beta",
|
|
7522
|
-
"name": "blockedVendors",
|
|
7523
|
-
"propertyTypeTokenRange": {
|
|
7524
|
-
"startIndex": 1,
|
|
7525
|
-
"endIndex": 4
|
|
7526
|
-
},
|
|
7527
|
-
"isStatic": false,
|
|
7528
|
-
"isProtected": false,
|
|
7529
|
-
"isAbstract": false
|
|
7530
|
-
},
|
|
7531
7378
|
{
|
|
7532
7379
|
"kind": "Property",
|
|
7533
7380
|
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#busy:member",
|
|
@@ -9059,55 +8906,6 @@
|
|
|
9059
8906
|
"isProtected": false,
|
|
9060
8907
|
"isAbstract": false
|
|
9061
8908
|
},
|
|
9062
|
-
{
|
|
9063
|
-
"kind": "Method",
|
|
9064
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#isVendorBlocked:member(1)",
|
|
9065
|
-
"docComment": "/**\n * Whether this specific vendor's budget is walled — regardless of whether any other vendor still has headroom.\n *\n * @beta\n */\n",
|
|
9066
|
-
"excerptTokens": [
|
|
9067
|
-
{
|
|
9068
|
-
"kind": "Content",
|
|
9069
|
-
"text": "isVendorBlocked(vendor: "
|
|
9070
|
-
},
|
|
9071
|
-
{
|
|
9072
|
-
"kind": "Reference",
|
|
9073
|
-
"text": "AIProviderType",
|
|
9074
|
-
"canonicalReference": "@genesislcap/foundation-ai!AIProviderType:type"
|
|
9075
|
-
},
|
|
9076
|
-
{
|
|
9077
|
-
"kind": "Content",
|
|
9078
|
-
"text": "): "
|
|
9079
|
-
},
|
|
9080
|
-
{
|
|
9081
|
-
"kind": "Content",
|
|
9082
|
-
"text": "boolean"
|
|
9083
|
-
},
|
|
9084
|
-
{
|
|
9085
|
-
"kind": "Content",
|
|
9086
|
-
"text": ";"
|
|
9087
|
-
}
|
|
9088
|
-
],
|
|
9089
|
-
"isStatic": false,
|
|
9090
|
-
"returnTypeTokenRange": {
|
|
9091
|
-
"startIndex": 3,
|
|
9092
|
-
"endIndex": 4
|
|
9093
|
-
},
|
|
9094
|
-
"releaseTag": "Beta",
|
|
9095
|
-
"isProtected": false,
|
|
9096
|
-
"overloadIndex": 1,
|
|
9097
|
-
"parameters": [
|
|
9098
|
-
{
|
|
9099
|
-
"parameterName": "vendor",
|
|
9100
|
-
"parameterTypeTokenRange": {
|
|
9101
|
-
"startIndex": 1,
|
|
9102
|
-
"endIndex": 2
|
|
9103
|
-
},
|
|
9104
|
-
"isOptional": false
|
|
9105
|
-
}
|
|
9106
|
-
],
|
|
9107
|
-
"isOptional": false,
|
|
9108
|
-
"isAbstract": false,
|
|
9109
|
-
"name": "isVendorBlocked"
|
|
9110
|
-
},
|
|
9111
8909
|
{
|
|
9112
8910
|
"kind": "Property",
|
|
9113
8911
|
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#liveCostSessionTitle:member",
|
|
@@ -10015,45 +9813,6 @@
|
|
|
10015
9813
|
"isProtected": false,
|
|
10016
9814
|
"isAbstract": false
|
|
10017
9815
|
},
|
|
10018
|
-
{
|
|
10019
|
-
"kind": "Property",
|
|
10020
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#reachableVendors:member",
|
|
10021
|
-
"docComment": "/**\n * The distinct vendors the registry can currently reach, from the provider statuses this element already loads on connect and refreshes on every observable-registry change.\n *\n * This is the element's answer to \"which vendor would the next turn use\" — a question that has **no** correct answer and deliberately gets no API. The provider is resolved per turn AND per agent: `activeProviderInput` may be an async function of the turn's context, an orchestrated turn picks its agent with an LLM `classify()` call, and sub-agents resolve their own providers. Any pre-turn \"peek\" would therefore be a guess that is wrong precisely on the multi-agent hosts per-vendor budgets exist for.\n *\n * Asking instead which vendors are REACHABLE is answerable, synchronous, and free — and it is enough: the composer must stay live while any reachable vendor has headroom, and must lock when none does. It also makes vendor-switch recovery a derivation rather than a mutation: a host that swaps its registry to another vendor fires the observable, the statuses reload, the walled vendor drops out of this set, and `blocked` goes false with every latch left intact.\n *\n * @beta\n */\n",
|
|
10022
|
-
"excerptTokens": [
|
|
10023
|
-
{
|
|
10024
|
-
"kind": "Content",
|
|
10025
|
-
"text": "get reachableVendors(): "
|
|
10026
|
-
},
|
|
10027
|
-
{
|
|
10028
|
-
"kind": "Content",
|
|
10029
|
-
"text": "readonly "
|
|
10030
|
-
},
|
|
10031
|
-
{
|
|
10032
|
-
"kind": "Reference",
|
|
10033
|
-
"text": "AIProviderType",
|
|
10034
|
-
"canonicalReference": "@genesislcap/foundation-ai!AIProviderType:type"
|
|
10035
|
-
},
|
|
10036
|
-
{
|
|
10037
|
-
"kind": "Content",
|
|
10038
|
-
"text": "[]"
|
|
10039
|
-
},
|
|
10040
|
-
{
|
|
10041
|
-
"kind": "Content",
|
|
10042
|
-
"text": ";"
|
|
10043
|
-
}
|
|
10044
|
-
],
|
|
10045
|
-
"isReadonly": true,
|
|
10046
|
-
"isOptional": false,
|
|
10047
|
-
"releaseTag": "Beta",
|
|
10048
|
-
"name": "reachableVendors",
|
|
10049
|
-
"propertyTypeTokenRange": {
|
|
10050
|
-
"startIndex": 1,
|
|
10051
|
-
"endIndex": 4
|
|
10052
|
-
},
|
|
10053
|
-
"isStatic": false,
|
|
10054
|
-
"isProtected": false,
|
|
10055
|
-
"isAbstract": false
|
|
10056
|
-
},
|
|
10057
9816
|
{
|
|
10058
9817
|
"kind": "Method",
|
|
10059
9818
|
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#removeAttachment:member(1)",
|
|
@@ -10602,70 +10361,6 @@
|
|
|
10602
10361
|
"isAbstract": false,
|
|
10603
10362
|
"name": "setAppSettingValue"
|
|
10604
10363
|
},
|
|
10605
|
-
{
|
|
10606
|
-
"kind": "Method",
|
|
10607
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#setBlocked:member(1)",
|
|
10608
|
-
"docComment": "/**\n * Block or unblock the assistant, optionally with custom banner copy. Equivalent to the {@link FoundationAiAssistant.blocked} setter, plus the reason in one atomic write.\n *\n * Blocking writes the **vendor-agnostic** block — what a host with one budget pot means — and does not populate {@link FoundationAiAssistant.blockedVendors}. Unblocking clears the per-vendor walls as well, so a host asserting \"the wall is gone\" after its own pre-flight cannot be silently overruled by a driver latch it never saw.\n *\n * @beta\n */\n",
|
|
10609
|
-
"excerptTokens": [
|
|
10610
|
-
{
|
|
10611
|
-
"kind": "Content",
|
|
10612
|
-
"text": "setBlocked(blocked: "
|
|
10613
|
-
},
|
|
10614
|
-
{
|
|
10615
|
-
"kind": "Content",
|
|
10616
|
-
"text": "boolean"
|
|
10617
|
-
},
|
|
10618
|
-
{
|
|
10619
|
-
"kind": "Content",
|
|
10620
|
-
"text": ", reason?: "
|
|
10621
|
-
},
|
|
10622
|
-
{
|
|
10623
|
-
"kind": "Content",
|
|
10624
|
-
"text": "string | null"
|
|
10625
|
-
},
|
|
10626
|
-
{
|
|
10627
|
-
"kind": "Content",
|
|
10628
|
-
"text": "): "
|
|
10629
|
-
},
|
|
10630
|
-
{
|
|
10631
|
-
"kind": "Content",
|
|
10632
|
-
"text": "void"
|
|
10633
|
-
},
|
|
10634
|
-
{
|
|
10635
|
-
"kind": "Content",
|
|
10636
|
-
"text": ";"
|
|
10637
|
-
}
|
|
10638
|
-
],
|
|
10639
|
-
"isStatic": false,
|
|
10640
|
-
"returnTypeTokenRange": {
|
|
10641
|
-
"startIndex": 5,
|
|
10642
|
-
"endIndex": 6
|
|
10643
|
-
},
|
|
10644
|
-
"releaseTag": "Beta",
|
|
10645
|
-
"isProtected": false,
|
|
10646
|
-
"overloadIndex": 1,
|
|
10647
|
-
"parameters": [
|
|
10648
|
-
{
|
|
10649
|
-
"parameterName": "blocked",
|
|
10650
|
-
"parameterTypeTokenRange": {
|
|
10651
|
-
"startIndex": 1,
|
|
10652
|
-
"endIndex": 2
|
|
10653
|
-
},
|
|
10654
|
-
"isOptional": false
|
|
10655
|
-
},
|
|
10656
|
-
{
|
|
10657
|
-
"parameterName": "reason",
|
|
10658
|
-
"parameterTypeTokenRange": {
|
|
10659
|
-
"startIndex": 3,
|
|
10660
|
-
"endIndex": 4
|
|
10661
|
-
},
|
|
10662
|
-
"isOptional": true
|
|
10663
|
-
}
|
|
10664
|
-
],
|
|
10665
|
-
"isOptional": false,
|
|
10666
|
-
"isAbstract": false,
|
|
10667
|
-
"name": "setBlocked"
|
|
10668
|
-
},
|
|
10669
10364
|
{
|
|
10670
10365
|
"kind": "Method",
|
|
10671
10366
|
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#setEnabledAnimations:member(1)",
|
|
@@ -11349,87 +11044,6 @@
|
|
|
11349
11044
|
"isProtected": false,
|
|
11350
11045
|
"isAbstract": false
|
|
11351
11046
|
},
|
|
11352
|
-
{
|
|
11353
|
-
"kind": "Method",
|
|
11354
|
-
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#setVendorBlocked:member(1)",
|
|
11355
|
-
"docComment": "/**\n * Wall (or release) one vendor's budget, optionally with banner copy for it. The per-vendor mirror of {@link FoundationAiAssistant.setBlocked}.\n *\n * Walling a vendor does **not** on its own disable the composer: while another reachable vendor has headroom the assistant stays usable and the banner tells the user to switch. Only when every reachable vendor is walled does `blocked` become true.\n *\n * `reason` is composed into the banner sentence for that vendor, **however many vendors are walled** — see {@link FoundationAiAssistant.effectiveBlockedReason}. It is per-vendor copy, not a whole-banner override; {@link FoundationAiAssistant.blockedReason} is the override. Omitting it keeps whatever explanation that vendor already carried, so a driver latch landing after a host one cannot blank it.\n *\n * `'none'` is rejected with a warning rather than accepted: it is the \"no provider configured\" sentinel, not a vendor. Latching it would put the raw sentinel in the banner (\"none's AI usage limit is reached\") and could never be undone by derivation, because `'none'` never appears in {@link FoundationAiAssistant.reachableVendors} — so `blocked` could never become derivable from it either. Use {@link FoundationAiAssistant.setBlocked} for a vendor-agnostic block.\n *\n * @beta\n */\n",
|
|
11356
|
-
"excerptTokens": [
|
|
11357
|
-
{
|
|
11358
|
-
"kind": "Content",
|
|
11359
|
-
"text": "setVendorBlocked(vendor: "
|
|
11360
|
-
},
|
|
11361
|
-
{
|
|
11362
|
-
"kind": "Reference",
|
|
11363
|
-
"text": "AIProviderType",
|
|
11364
|
-
"canonicalReference": "@genesislcap/foundation-ai!AIProviderType:type"
|
|
11365
|
-
},
|
|
11366
|
-
{
|
|
11367
|
-
"kind": "Content",
|
|
11368
|
-
"text": ", blocked: "
|
|
11369
|
-
},
|
|
11370
|
-
{
|
|
11371
|
-
"kind": "Content",
|
|
11372
|
-
"text": "boolean"
|
|
11373
|
-
},
|
|
11374
|
-
{
|
|
11375
|
-
"kind": "Content",
|
|
11376
|
-
"text": ", reason?: "
|
|
11377
|
-
},
|
|
11378
|
-
{
|
|
11379
|
-
"kind": "Content",
|
|
11380
|
-
"text": "string | null"
|
|
11381
|
-
},
|
|
11382
|
-
{
|
|
11383
|
-
"kind": "Content",
|
|
11384
|
-
"text": "): "
|
|
11385
|
-
},
|
|
11386
|
-
{
|
|
11387
|
-
"kind": "Content",
|
|
11388
|
-
"text": "void"
|
|
11389
|
-
},
|
|
11390
|
-
{
|
|
11391
|
-
"kind": "Content",
|
|
11392
|
-
"text": ";"
|
|
11393
|
-
}
|
|
11394
|
-
],
|
|
11395
|
-
"isStatic": false,
|
|
11396
|
-
"returnTypeTokenRange": {
|
|
11397
|
-
"startIndex": 7,
|
|
11398
|
-
"endIndex": 8
|
|
11399
|
-
},
|
|
11400
|
-
"releaseTag": "Beta",
|
|
11401
|
-
"isProtected": false,
|
|
11402
|
-
"overloadIndex": 1,
|
|
11403
|
-
"parameters": [
|
|
11404
|
-
{
|
|
11405
|
-
"parameterName": "vendor",
|
|
11406
|
-
"parameterTypeTokenRange": {
|
|
11407
|
-
"startIndex": 1,
|
|
11408
|
-
"endIndex": 2
|
|
11409
|
-
},
|
|
11410
|
-
"isOptional": false
|
|
11411
|
-
},
|
|
11412
|
-
{
|
|
11413
|
-
"parameterName": "blocked",
|
|
11414
|
-
"parameterTypeTokenRange": {
|
|
11415
|
-
"startIndex": 3,
|
|
11416
|
-
"endIndex": 4
|
|
11417
|
-
},
|
|
11418
|
-
"isOptional": false
|
|
11419
|
-
},
|
|
11420
|
-
{
|
|
11421
|
-
"parameterName": "reason",
|
|
11422
|
-
"parameterTypeTokenRange": {
|
|
11423
|
-
"startIndex": 5,
|
|
11424
|
-
"endIndex": 6
|
|
11425
|
-
},
|
|
11426
|
-
"isOptional": true
|
|
11427
|
-
}
|
|
11428
|
-
],
|
|
11429
|
-
"isOptional": false,
|
|
11430
|
-
"isAbstract": false,
|
|
11431
|
-
"name": "setVendorBlocked"
|
|
11432
|
-
},
|
|
11433
11047
|
{
|
|
11434
11048
|
"kind": "Property",
|
|
11435
11049
|
"canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#showAgentSwitchIndicator:member",
|
|
@@ -13410,7 +13024,7 @@
|
|
|
13410
13024
|
},
|
|
13411
13025
|
{
|
|
13412
13026
|
"kind": "Content",
|
|
13413
|
-
"text": ";\n
|
|
13027
|
+
"text": ";\n }"
|
|
13414
13028
|
},
|
|
13415
13029
|
{
|
|
13416
13030
|
"kind": "Content",
|