@genesislcap/ai-assistant 15.19.0 → 15.19.1
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/package.json +17 -18
- package/api-extractor.json +0 -11
- package/dist/dts/components/chat-driver/chat-driver.compact.test.d.ts +0 -2
- package/dist/dts/components/chat-driver/chat-driver.compact.test.d.ts.map +0 -1
- package/dist/dts/components/chat-driver/chat-driver.invocation-scope.test.d.ts +0 -2
- package/dist/dts/components/chat-driver/chat-driver.invocation-scope.test.d.ts.map +0 -1
- package/dist/dts/components/chat-driver/chat-driver.test.d.ts +0 -2
- package/dist/dts/components/chat-driver/chat-driver.test.d.ts.map +0 -1
- package/dist/dts/components/chat-driver/chat-driver.thinking-policy.test.d.ts +0 -2
- package/dist/dts/components/chat-driver/chat-driver.thinking-policy.test.d.ts.map +0 -1
- package/dist/dts/components/chat-driver/chat-driver.trace-capture.test.d.ts +0 -2
- package/dist/dts/components/chat-driver/chat-driver.trace-capture.test.d.ts.map +0 -1
- package/dist/dts/components/chat-driver/chat-driver.turn-usage.test.d.ts +0 -2
- package/dist/dts/components/chat-driver/chat-driver.turn-usage.test.d.ts.map +0 -1
- package/dist/dts/components/chat-interaction-wrapper/chat-interaction-wrapper.test.d.ts +0 -2
- package/dist/dts/components/chat-interaction-wrapper/chat-interaction-wrapper.test.d.ts.map +0 -1
- 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/components/orchestrating-driver/orchestrating-driver.cost.test.d.ts +0 -2
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.cost.test.d.ts.map +0 -1
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.pin.test.d.ts +0 -2
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.pin.test.d.ts.map +0 -1
- package/dist/dts/components/settings-modal/settings-modal.styles.test.d.ts +0 -2
- package/dist/dts/components/settings-modal/settings-modal.styles.test.d.ts.map +0 -1
- package/dist/dts/components/settings-modal/settings-modal.template.test.d.ts +0 -2
- package/dist/dts/components/settings-modal/settings-modal.template.test.d.ts.map +0 -1
- package/dist/dts/config/define-stateful-agent.test.d.ts +0 -2
- package/dist/dts/config/define-stateful-agent.test.d.ts.map +0 -1
- package/dist/dts/config/validate-providers.test.d.ts +0 -2
- package/dist/dts/config/validate-providers.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/budget-meter.test.d.ts +0 -2
- package/dist/dts/main/budget-meter.test.d.ts.map +0 -1
- package/dist/dts/main/cost-session-banking.test.d.ts +0 -2
- package/dist/dts/main/cost-session-banking.test.d.ts.map +0 -1
- package/dist/dts/main/file-attachments.test.d.ts +0 -2
- package/dist/dts/main/file-attachments.test.d.ts.map +0 -1
- package/dist/dts/main/interaction-cost.test.d.ts +0 -2
- package/dist/dts/main/interaction-cost.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/dts/main/persistence-broken-sources.test.d.ts +0 -2
- package/dist/dts/main/persistence-broken-sources.test.d.ts.map +0 -1
- package/dist/dts/main/popout-interaction-gate.test.d.ts +0 -2
- package/dist/dts/main/popout-interaction-gate.test.d.ts.map +0 -1
- package/dist/dts/state/ai-assistant-slice.test.d.ts +0 -2
- package/dist/dts/state/ai-assistant-slice.test.d.ts.map +0 -1
- package/dist/dts/state/debug-event-log.test.d.ts +0 -2
- package/dist/dts/state/debug-event-log.test.d.ts.map +0 -1
- package/dist/dts/state/driver-registry.test.d.ts +0 -2
- package/dist/dts/state/driver-registry.test.d.ts.map +0 -1
- package/dist/dts/state/interaction-context.test.d.ts +0 -2
- package/dist/dts/state/interaction-context.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/diagnostics-cursors.test.d.ts +0 -2
- package/dist/dts/state/persistence/diagnostics-cursors.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/diagnostics.test.d.ts +0 -2
- package/dist/dts/state/persistence/diagnostics.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/session-persistence-provider.test.d.ts +0 -2
- package/dist/dts/state/persistence/session-persistence-provider.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/session-persistence.integration.test.d.ts +0 -2
- package/dist/dts/state/persistence/session-persistence.integration.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/session-persister.test.d.ts +0 -2
- package/dist/dts/state/persistence/session-persister.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/session-snapshot.test.d.ts +0 -2
- package/dist/dts/state/persistence/session-snapshot.test.d.ts.map +0 -1
- package/dist/dts/state/persistence/stateful-restore.e2e.test.d.ts +0 -2
- package/dist/dts/state/persistence/stateful-restore.e2e.test.d.ts.map +0 -1
- package/dist/dts/utils/animation-exclusivity.test.d.ts +0 -2
- package/dist/dts/utils/animation-exclusivity.test.d.ts.map +0 -1
- package/dist/dts/utils/collect-session-models.test.d.ts +0 -2
- package/dist/dts/utils/collect-session-models.test.d.ts.map +0 -1
- package/dist/dts/utils/condense-history.test.d.ts +0 -2
- package/dist/dts/utils/condense-history.test.d.ts.map +0 -1
- package/dist/dts/utils/cost-session-history.test.d.ts +0 -2
- package/dist/dts/utils/cost-session-history.test.d.ts.map +0 -1
- package/dist/dts/utils/derive-cost-session-title.test.d.ts +0 -2
- package/dist/dts/utils/derive-cost-session-title.test.d.ts.map +0 -1
- package/dist/dts/utils/flatten-sub-agent-messages.test.d.ts +0 -2
- package/dist/dts/utils/flatten-sub-agent-messages.test.d.ts.map +0 -1
- package/dist/dts/utils/history-transform.test.d.ts +0 -2
- package/dist/dts/utils/history-transform.test.d.ts.map +0 -1
- package/dist/dts/utils/message-partition.test.d.ts +0 -2
- package/dist/dts/utils/message-partition.test.d.ts.map +0 -1
- package/dist/dts/utils/resolve-cost-history-config.test.d.ts +0 -2
- package/dist/dts/utils/resolve-cost-history-config.test.d.ts.map +0 -1
- package/dist/dts/utils/resolve-preference-baseline.test.d.ts +0 -2
- package/dist/dts/utils/resolve-preference-baseline.test.d.ts.map +0 -1
- package/dist/dts/utils/strip-agent-handlers.test.d.ts +0 -2
- package/dist/dts/utils/strip-agent-handlers.test.d.ts.map +0 -1
- package/dist/dts/utils/sum-costs.test.d.ts +0 -2
- package/dist/dts/utils/sum-costs.test.d.ts.map +0 -1
- package/dist/dts/utils/sum-tokens.test.d.ts +0 -2
- package/dist/dts/utils/sum-tokens.test.d.ts.map +0 -1
- package/dist/dts/utils/sum-usage.test.d.ts +0 -2
- package/dist/dts/utils/sum-usage.test.d.ts.map +0 -1
- package/dist/dts/utils/usage-rows.test.d.ts +0 -2
- package/dist/dts/utils/usage-rows.test.d.ts.map +0 -1
- package/dist/esm/components/chat-driver/chat-driver.compact.test.js +0 -93
- package/dist/esm/components/chat-driver/chat-driver.invocation-scope.test.js +0 -238
- package/dist/esm/components/chat-driver/chat-driver.test.js +0 -2770
- package/dist/esm/components/chat-driver/chat-driver.thinking-policy.test.js +0 -137
- package/dist/esm/components/chat-driver/chat-driver.trace-capture.test.js +0 -200
- package/dist/esm/components/chat-driver/chat-driver.turn-usage.test.js +0 -268
- package/dist/esm/components/chat-interaction-wrapper/chat-interaction-wrapper.test.js +0 -104
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.budget.test.js +0 -312
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.cost.test.js +0 -76
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.pin.test.js +0 -61
- package/dist/esm/components/settings-modal/settings-modal.styles.test.js +0 -80
- package/dist/esm/components/settings-modal/settings-modal.template.test.js +0 -91
- package/dist/esm/config/define-stateful-agent.test.js +0 -53
- package/dist/esm/config/validate-providers.test.js +0 -100
- package/dist/esm/main/blocked-state.test.js +0 -1065
- package/dist/esm/main/budget-meter.test.js +0 -359
- package/dist/esm/main/cost-session-banking.test.js +0 -538
- package/dist/esm/main/file-attachments.test.js +0 -164
- package/dist/esm/main/interaction-cost.test.js +0 -107
- package/dist/esm/main/main.styles.test.js +0 -161
- package/dist/esm/main/persistence-broken-sources.test.js +0 -180
- package/dist/esm/main/popout-interaction-gate.test.js +0 -54
- package/dist/esm/state/ai-assistant-slice.test.js +0 -229
- package/dist/esm/state/debug-event-log.test.js +0 -117
- package/dist/esm/state/driver-registry.test.js +0 -55
- package/dist/esm/state/interaction-context.test.js +0 -78
- package/dist/esm/state/persistence/diagnostics-cursors.test.js +0 -30
- package/dist/esm/state/persistence/diagnostics.test.js +0 -280
- package/dist/esm/state/persistence/session-persistence-provider.test.js +0 -110
- package/dist/esm/state/persistence/session-persistence.integration.test.js +0 -113
- package/dist/esm/state/persistence/session-persister.test.js +0 -613
- package/dist/esm/state/persistence/session-snapshot.test.js +0 -256
- package/dist/esm/state/persistence/stateful-restore.e2e.test.js +0 -158
- package/dist/esm/utils/animation-exclusivity.test.js +0 -52
- package/dist/esm/utils/collect-session-models.test.js +0 -53
- package/dist/esm/utils/condense-history.test.js +0 -547
- package/dist/esm/utils/cost-session-history.test.js +0 -174
- package/dist/esm/utils/derive-cost-session-title.test.js +0 -37
- package/dist/esm/utils/flatten-sub-agent-messages.test.js +0 -139
- package/dist/esm/utils/history-transform.test.js +0 -158
- package/dist/esm/utils/message-partition.test.js +0 -90
- package/dist/esm/utils/resolve-cost-history-config.test.js +0 -32
- package/dist/esm/utils/resolve-preference-baseline.test.js +0 -69
- package/dist/esm/utils/strip-agent-handlers.test.js +0 -81
- package/dist/esm/utils/sum-costs.test.js +0 -114
- package/dist/esm/utils/sum-tokens.test.js +0 -51
- package/dist/esm/utils/sum-usage.test.js +0 -164
- package/dist/esm/utils/usage-rows.test.js +0 -189
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/license.txt +0 -46
- package/sandbox/tsconfig.json +0 -8
- package/src/channel/ai-activity-bus.ts +0 -209
- package/src/channel/ai-activity-channel.ts +0 -146
- package/src/chat-driver-node.ts +0 -159
- package/src/components/activity-halo/activity-halo.ts +0 -106
- package/src/components/agent-picker/agent-picker.constants.ts +0 -2
- package/src/components/agent-picker/agent-picker.styles.ts +0 -24
- package/src/components/agent-picker/agent-picker.template.ts +0 -54
- package/src/components/agent-picker/agent-picker.ts +0 -99
- package/src/components/agent-picker/index.ts +0 -1
- package/src/components/ai-driver/ai-driver.ts +0 -166
- package/src/components/ai-driver/index.ts +0 -1
- package/src/components/chat-bubble/chat-bubble.styles.ts +0 -194
- package/src/components/chat-bubble/chat-bubble.template.ts +0 -67
- package/src/components/chat-bubble/chat-bubble.ts +0 -436
- package/src/components/chat-bubble/index.ts +0 -1
- package/src/components/chat-driver/align-event-globals.ts +0 -23
- package/src/components/chat-driver/chat-driver.compact.test.ts +0 -131
- package/src/components/chat-driver/chat-driver.invocation-scope.test.ts +0 -285
- package/src/components/chat-driver/chat-driver.test.ts +0 -3679
- package/src/components/chat-driver/chat-driver.thinking-policy.test.ts +0 -185
- package/src/components/chat-driver/chat-driver.trace-capture.test.ts +0 -251
- package/src/components/chat-driver/chat-driver.ts +0 -3925
- package/src/components/chat-driver/chat-driver.turn-usage.test.ts +0 -362
- package/src/components/chat-driver/index.ts +0 -1
- package/src/components/chat-interaction-wrapper/chat-interaction-wrapper.styles.ts +0 -7
- package/src/components/chat-interaction-wrapper/chat-interaction-wrapper.template.ts +0 -6
- package/src/components/chat-interaction-wrapper/chat-interaction-wrapper.test.ts +0 -144
- package/src/components/chat-interaction-wrapper/chat-interaction-wrapper.ts +0 -243
- package/src/components/chat-interaction-wrapper/index.ts +0 -3
- package/src/components/chat-markdown/chat-markdown.ts +0 -89
- package/src/components/chat-markdown/index.ts +0 -1
- package/src/components/flowing-waves-indicator.ts +0 -286
- package/src/components/halo-overlay.ts +0 -184
- package/src/components/orchestrating-driver/index.ts +0 -1
- package/src/components/orchestrating-driver/orchestrating-driver.budget.test.ts +0 -438
- package/src/components/orchestrating-driver/orchestrating-driver.cost.test.ts +0 -107
- package/src/components/orchestrating-driver/orchestrating-driver.pin.test.ts +0 -96
- package/src/components/orchestrating-driver/orchestrating-driver.ts +0 -813
- package/src/components/plasma-orb-indicator.ts +0 -281
- package/src/components/popout-manager/index.ts +0 -1
- package/src/components/popout-manager/popout-manager.ts +0 -212
- package/src/components/settings-modal/index.ts +0 -2
- package/src/components/settings-modal/settings-modal.styles.test.ts +0 -94
- package/src/components/settings-modal/settings-modal.styles.ts +0 -853
- package/src/components/settings-modal/settings-modal.template.test.ts +0 -124
- package/src/components/settings-modal/settings-modal.template.ts +0 -943
- package/src/components/waves-indicator.ts +0 -241
- package/src/config/config.ts +0 -608
- package/src/config/define-stateful-agent.test.ts +0 -64
- package/src/config/define-stateful-agent.ts +0 -642
- package/src/config/fallback-agents.ts +0 -29
- package/src/config/index.ts +0 -2
- package/src/config/validate-providers.test.ts +0 -148
- package/src/config/validate-providers.ts +0 -58
- package/src/index.ts +0 -29
- package/src/main/blocked-state.test.ts +0 -1444
- package/src/main/budget-meter.test.ts +0 -477
- package/src/main/cost-session-banking.test.ts +0 -679
- package/src/main/file-attachments.test.ts +0 -215
- package/src/main/index.ts +0 -3
- package/src/main/interaction-cost.test.ts +0 -140
- package/src/main/main.styles.test.ts +0 -216
- package/src/main/main.styles.ts +0 -995
- package/src/main/main.template.ts +0 -1119
- package/src/main/main.ts +0 -5432
- package/src/main/main.types.ts +0 -225
- package/src/main/persistence-broken-sources.test.ts +0 -219
- package/src/main/popout-interaction-gate.test.ts +0 -87
- package/src/provider/ai-provider-switcher.ts +0 -40
- package/src/provider/assistant-app-settings.ts +0 -84
- package/src/state/ai-assistant-slice.test.ts +0 -336
- package/src/state/ai-assistant-slice.ts +0 -604
- package/src/state/debug-event-log.test.ts +0 -154
- package/src/state/debug-event-log.ts +0 -358
- package/src/state/driver-registry.test.ts +0 -70
- package/src/state/driver-registry.ts +0 -79
- package/src/state/interaction-context.test.ts +0 -90
- package/src/state/interaction-context.ts +0 -101
- package/src/state/persistence/build-timeline-entries.ts +0 -66
- package/src/state/persistence/diagnostics-cursors.test.ts +0 -53
- package/src/state/persistence/diagnostics-cursors.ts +0 -80
- package/src/state/persistence/diagnostics.test.ts +0 -346
- package/src/state/persistence/diagnostics.ts +0 -220
- package/src/state/persistence/index.ts +0 -10
- package/src/state/persistence/persister-registry.ts +0 -55
- package/src/state/persistence/session-persistence-provider.test.ts +0 -136
- package/src/state/persistence/session-persistence-provider.ts +0 -226
- package/src/state/persistence/session-persistence.integration.test.ts +0 -141
- package/src/state/persistence/session-persister.test.ts +0 -787
- package/src/state/persistence/session-persister.ts +0 -917
- package/src/state/persistence/session-snapshot.test.ts +0 -352
- package/src/state/persistence/session-snapshot.ts +0 -344
- package/src/state/persistence/stateful-restore.e2e.test.ts +0 -229
- package/src/state/session-store.ts +0 -56
- package/src/styles/ai-colours.ts +0 -30
- package/src/styles/menu.ts +0 -187
- package/src/styles/settings-section.ts +0 -40
- package/src/suggestions/chat-suggestions.ts +0 -186
- package/src/tags/index.ts +0 -1
- package/src/types/ai-chat-widget.ts +0 -67
- package/src/types/interaction-context.ts +0 -82
- package/src/utils/animated-panel-toggle.ts +0 -62
- package/src/utils/animation-exclusivity.test.ts +0 -72
- package/src/utils/animation-exclusivity.ts +0 -40
- package/src/utils/banked-usage-baselines.ts +0 -90
- package/src/utils/collect-session-models.test.ts +0 -82
- package/src/utils/collect-session-models.ts +0 -65
- package/src/utils/condense-history.test.ts +0 -746
- package/src/utils/condense-history.ts +0 -448
- package/src/utils/cost-session-history.test.ts +0 -226
- package/src/utils/cost-session-history.ts +0 -218
- package/src/utils/derive-cost-session-title.test.ts +0 -63
- package/src/utils/derive-cost-session-title.ts +0 -76
- package/src/utils/flatten-sub-agent-messages.test.ts +0 -163
- package/src/utils/flatten-sub-agent-messages.ts +0 -88
- package/src/utils/format-usd.ts +0 -26
- package/src/utils/history-transform.test.ts +0 -228
- package/src/utils/history-transform.ts +0 -163
- package/src/utils/index.ts +0 -3
- package/src/utils/logger.ts +0 -3
- package/src/utils/message-partition.test.ts +0 -129
- package/src/utils/message-partition.ts +0 -115
- package/src/utils/resolve-cost-history-config.test.ts +0 -38
- package/src/utils/resolve-cost-history-config.ts +0 -38
- package/src/utils/resolve-preference-baseline.test.ts +0 -84
- package/src/utils/resolve-preference-baseline.ts +0 -80
- package/src/utils/strip-agent-handlers.test.ts +0 -99
- package/src/utils/strip-agent-handlers.ts +0 -53
- package/src/utils/sum-costs.test.ts +0 -136
- package/src/utils/sum-costs.ts +0 -18
- package/src/utils/sum-tokens.test.ts +0 -93
- package/src/utils/sum-tokens.ts +0 -68
- package/src/utils/sum-usage.test.ts +0 -191
- package/src/utils/sum-usage.ts +0 -208
- package/src/utils/tool-fold.ts +0 -181
- package/src/utils/usage-rows.test.ts +0 -237
- package/src/utils/usage-rows.ts +0 -187
- package/src/utils/with-timeout.ts +0 -24
- package/tsconfig.json +0 -9
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { assert, createLogicSuite } from '@genesislcap/foundation-testing';
|
|
2
|
-
import { FoundationAiAssistant } from '../../main/main';
|
|
3
|
-
import { getSessionStore, clearAllSessionStores } from '../../state/session-store';
|
|
4
|
-
import { settingsUsageMetersTemplate } from './settings-modal.template';
|
|
5
|
-
// Hold a reference so the custom-element registration isn't tree-shaken.
|
|
6
|
-
FoundationAiAssistant;
|
|
7
|
-
// GENC-1464 — the shared meter column in the settings modal's "AI Model
|
|
8
|
-
// Settings" section.
|
|
9
|
-
//
|
|
10
|
-
// The section body is a 4-unit flex column and the budget meter is a 2-unit
|
|
11
|
-
// one, so an unwrapped context indicator sat 4 units above the first vendor row
|
|
12
|
-
// while the vendor rows sat 2 apart — three visually identical meter rows
|
|
13
|
-
// reading as an uneven 4/2/2. Both meters now share ONE 2-unit column
|
|
14
|
-
// (`.settings-usage-meters`, grouped with `.settings-budget-usage` in the
|
|
15
|
-
// styles — see settings-modal.styles.test.ts for the gap itself).
|
|
16
|
-
//
|
|
17
|
-
// The wrapper must also be ABSENT when neither meter shows: a permanent wrapper
|
|
18
|
-
// is a permanent flex child of the section body, so a host with no meters would
|
|
19
|
-
// pay a stray 4-unit gap after its model slot for a div that renders nothing.
|
|
20
|
-
// That is a structural claim about the template, so this suite renders the
|
|
21
|
-
// template rather than reading a getter — the getter cannot show whether the
|
|
22
|
-
// `when` was wired to it.
|
|
23
|
-
//
|
|
24
|
-
// The element is created but never CONNECTED (`document.createElement` upgrades
|
|
25
|
-
// only), for the reason budget-meter.test.ts gives: connecting subscribes to
|
|
26
|
-
// `agenticActivityBus` and leaves the runner's event loop open.
|
|
27
|
-
const Suite = createLogicSuite('settings-modal usage meters structure');
|
|
28
|
-
const template = settingsUsageMetersTemplate('test-progress', 'test-button', 'test-icon');
|
|
29
|
-
let storeSeq = 0;
|
|
30
|
-
/** A fresh (unconnected) element wired to its own real session store. */
|
|
31
|
-
function element() {
|
|
32
|
-
const el = document.createElement('foundation-ai-assistant');
|
|
33
|
-
storeSeq += 1;
|
|
34
|
-
el._sessionRef = getSessionStore(`usage-meters-test-${storeSeq}`, false);
|
|
35
|
-
return el;
|
|
36
|
-
}
|
|
37
|
-
/** Renders the meters for `el` into a detached host and returns it. */
|
|
38
|
-
function render(el) {
|
|
39
|
-
const host = document.createElement('div');
|
|
40
|
-
template.render(el, host);
|
|
41
|
-
return host;
|
|
42
|
-
}
|
|
43
|
-
Suite.after(() => {
|
|
44
|
-
clearAllSessionStores();
|
|
45
|
-
});
|
|
46
|
-
Suite('both meters render inside one shared column', () => {
|
|
47
|
-
const el = element();
|
|
48
|
-
el.contextTokens = 1000;
|
|
49
|
-
el.contextLimit = 4000;
|
|
50
|
-
el.setVendorBudget('anthropic', { budgetUsd: 50, spentUsd: 45 });
|
|
51
|
-
const host = render(el);
|
|
52
|
-
const wrapper = host.querySelector('.settings-usage-meters');
|
|
53
|
-
assert.ok(wrapper, 'the shared column is rendered');
|
|
54
|
-
assert.ok(wrapper.querySelector('.settings-context-usage'), 'the context indicator is inside it');
|
|
55
|
-
assert.ok(wrapper.querySelector('.settings-budget-usage'), 'so is the budget meter');
|
|
56
|
-
// The rhythm the wrapper exists for: every meter row is a child of a 2-unit
|
|
57
|
-
// column, none of them of the section body's 4-unit one.
|
|
58
|
-
assert.is(host.querySelectorAll('.settings-usage-meters').length, 1, 'one column, not one per meter');
|
|
59
|
-
});
|
|
60
|
-
Suite('neither meter visible → no wrapper at all, not an empty one', () => {
|
|
61
|
-
// The stray-gap case. Nothing fed, no context figures: the section body must
|
|
62
|
-
// see no flex child from the meters.
|
|
63
|
-
const el = element();
|
|
64
|
-
const host = render(el);
|
|
65
|
-
assert.is(el.settingsContextUsageVisible, false, 'precondition: no context data');
|
|
66
|
-
assert.is(el.settingsBudgetUsageVisible, false, 'precondition: no budget data');
|
|
67
|
-
assert.is(host.querySelector('.settings-usage-meters'), null, 'no wrapper element');
|
|
68
|
-
assert.is(host.querySelectorAll('*').length, 0, 'and no element of any kind — comment markers only');
|
|
69
|
-
});
|
|
70
|
-
Suite('one meter alone still gets the shared column, with only its own child', () => {
|
|
71
|
-
// Both single-meter cases: the wrapper appears for either meter on its own,
|
|
72
|
-
// and the hidden sibling contributes NO element inside it (both gate with
|
|
73
|
-
// `when`, which emplaces comment markers, not empty divs — an empty div would
|
|
74
|
-
// be a second stray gap, inside the column this time).
|
|
75
|
-
const contextOnly = element();
|
|
76
|
-
contextOnly.contextTokens = 1000;
|
|
77
|
-
contextOnly.contextLimit = 4000;
|
|
78
|
-
const contextHost = render(contextOnly);
|
|
79
|
-
const contextWrapper = contextHost.querySelector('.settings-usage-meters');
|
|
80
|
-
assert.ok(contextWrapper, 'context alone still gets the column');
|
|
81
|
-
assert.is(contextWrapper.children.length, 1, 'the hidden budget meter adds no flex child');
|
|
82
|
-
assert.ok(contextWrapper.querySelector('.settings-context-usage'));
|
|
83
|
-
const budgetOnly = element();
|
|
84
|
-
budgetOnly.setVendorBudget('gemini', { budgetUsd: 50, spentUsd: 15 });
|
|
85
|
-
const budgetHost = render(budgetOnly);
|
|
86
|
-
const budgetWrapper = budgetHost.querySelector('.settings-usage-meters');
|
|
87
|
-
assert.ok(budgetWrapper, 'budget alone still gets the column');
|
|
88
|
-
assert.is(budgetWrapper.children.length, 1, 'the hidden context indicator adds no flex child');
|
|
89
|
-
assert.ok(budgetWrapper.querySelector('.settings-budget-usage'));
|
|
90
|
-
});
|
|
91
|
-
Suite.run();
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { assert, createLogicSuite } from '@genesislcap/foundation-testing';
|
|
3
|
-
import { defineStatefulAgent } from './define-stateful-agent';
|
|
4
|
-
// A minimal lifecycle context — `onActivate`/`onDeactivate` only read what the
|
|
5
|
-
// helper passes through, so the agent name, session key, and a live signal are
|
|
6
|
-
// enough to drive init/dispose in a Node-runnable test.
|
|
7
|
-
const lifecycleCtx = () => ({
|
|
8
|
-
agentName: 'wizard',
|
|
9
|
-
sessionKey: 'test-session',
|
|
10
|
-
signal: new AbortController().signal,
|
|
11
|
-
});
|
|
12
|
-
const onUnresolvedTool = createLogicSuite('defineStatefulAgent onUnresolvedTool');
|
|
13
|
-
onUnresolvedTool('threads the live state into the hook after init', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
-
const config = defineStatefulAgent({
|
|
15
|
-
name: 'wizard',
|
|
16
|
-
description: 'guided wizard',
|
|
17
|
-
init: () => ({ step: 'intake' }),
|
|
18
|
-
onUnresolvedTool: ({ state, toolName, kind, availableTools }) => `step=${state.step} tool=${toolName} kind=${kind} avail=${availableTools.join(',')}`,
|
|
19
|
-
});
|
|
20
|
-
yield config.onActivate(lifecycleCtx());
|
|
21
|
-
const result = yield config.onUnresolvedTool({
|
|
22
|
-
toolName: 'generate_view',
|
|
23
|
-
kind: 'stale',
|
|
24
|
-
availableTools: ['ask_user', 'validate'],
|
|
25
|
-
});
|
|
26
|
-
assert.is(result, 'step=intake tool=generate_view kind=stale avail=ask_user,validate');
|
|
27
|
-
}));
|
|
28
|
-
onUnresolvedTool('returns undefined before init rather than throwing', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
-
const config = defineStatefulAgent({
|
|
30
|
-
name: 'wizard',
|
|
31
|
-
description: 'guided wizard',
|
|
32
|
-
init: () => ({ step: 'intake' }),
|
|
33
|
-
// Would throw if it were ever reached without state — proves the wrapper
|
|
34
|
-
// short-circuits before delegating.
|
|
35
|
-
onUnresolvedTool: ({ state }) => `step=${state.step}`,
|
|
36
|
-
});
|
|
37
|
-
// No `onActivate` call — state has not been built yet.
|
|
38
|
-
const result = yield config.onUnresolvedTool({
|
|
39
|
-
toolName: 'generate_view',
|
|
40
|
-
kind: 'unknown',
|
|
41
|
-
availableTools: [],
|
|
42
|
-
});
|
|
43
|
-
assert.is(result, undefined, 'a pre-init call must degrade to the framework default');
|
|
44
|
-
}));
|
|
45
|
-
onUnresolvedTool('omits the hook from the config when not supplied', () => {
|
|
46
|
-
const config = defineStatefulAgent({
|
|
47
|
-
name: 'wizard',
|
|
48
|
-
description: 'guided wizard',
|
|
49
|
-
init: () => ({ step: 'intake' }),
|
|
50
|
-
});
|
|
51
|
-
assert.is(config.onUnresolvedTool, undefined);
|
|
52
|
-
});
|
|
53
|
-
onUnresolvedTool.run();
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { assert, createLogicSuite } from '@genesislcap/foundation-testing';
|
|
3
|
-
import { resolveChatProvider, validateStaticAgentProviders } from './validate-providers';
|
|
4
|
-
const chatProvider = () => ({
|
|
5
|
-
chat: () => __awaiter(void 0, void 0, void 0, function* () { return ({ role: 'assistant', content: '' }); }),
|
|
6
|
-
});
|
|
7
|
-
const promptOnlyProvider = () => ({
|
|
8
|
-
prompt: () => __awaiter(void 0, void 0, void 0, function* () { return ''; }),
|
|
9
|
-
});
|
|
10
|
-
/**
|
|
11
|
-
* Minimal in-test registry — implements only what the validation helpers
|
|
12
|
-
* touch (`get`, `names`). Avoids depending on foundation-ai's concrete
|
|
13
|
-
* registry impl, and keeps these tests Node-runnable.
|
|
14
|
-
*/
|
|
15
|
-
const makeRegistry = (providers) => {
|
|
16
|
-
const map = new Map(Object.entries(providers));
|
|
17
|
-
return {
|
|
18
|
-
get: (name) => map.get(name),
|
|
19
|
-
default: () => map.values().next().value,
|
|
20
|
-
defaultName: () => map.keys().next().value,
|
|
21
|
-
names: () => [...map.keys()],
|
|
22
|
-
getStatus: () => __awaiter(void 0, void 0, void 0, function* () { return null; }),
|
|
23
|
-
listStatuses: () => __awaiter(void 0, void 0, void 0, function* () { return []; }),
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
const specialist = (overrides) => (Object.assign({ name: overrides.name, description: 'test specialist' }, overrides));
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
// resolveChatProvider
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
const resolve = createLogicSuite('resolveChatProvider');
|
|
31
|
-
resolve('returns the provider when the name is registered and has chat()', () => {
|
|
32
|
-
const fast = chatProvider();
|
|
33
|
-
const registry = makeRegistry({ fast });
|
|
34
|
-
assert.is(resolveChatProvider(registry, 'fast', 'A'), fast);
|
|
35
|
-
});
|
|
36
|
-
resolve('throws on an unknown provider name with the agent name in the message', () => {
|
|
37
|
-
const registry = makeRegistry({ fast: chatProvider() });
|
|
38
|
-
assert.throws(() => resolveChatProvider(registry, 'deep', 'A'), /Agent "A" references unknown provider "deep"/);
|
|
39
|
-
});
|
|
40
|
-
resolve('throws including the registered names so the misconfiguration is debuggable', () => {
|
|
41
|
-
const registry = makeRegistry({
|
|
42
|
-
fast: chatProvider(),
|
|
43
|
-
deep: chatProvider(),
|
|
44
|
-
cheap: chatProvider(),
|
|
45
|
-
});
|
|
46
|
-
assert.throws(() => resolveChatProvider(registry, 'typo', 'A'), /Registered: fast, deep, cheap/);
|
|
47
|
-
});
|
|
48
|
-
resolve('throws when the resolved provider does not implement chat()', () => {
|
|
49
|
-
const registry = makeRegistry({ chrome: promptOnlyProvider() });
|
|
50
|
-
assert.throws(() => resolveChatProvider(registry, 'chrome', 'A'), /Agent "A" resolved to provider "chrome" which does not implement chat\(\)/);
|
|
51
|
-
});
|
|
52
|
-
resolve.run();
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// validateStaticAgentProviders
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
const validate = createLogicSuite('validateStaticAgentProviders');
|
|
57
|
-
validate('accepts agents with no `provider` field (back-compat path)', () => {
|
|
58
|
-
const registry = makeRegistry({ default: chatProvider() });
|
|
59
|
-
assert.not.throws(() => validateStaticAgentProviders([specialist({ name: 'A' })], registry));
|
|
60
|
-
});
|
|
61
|
-
validate('accepts agents that name a registered chat-capable provider', () => {
|
|
62
|
-
const registry = makeRegistry({ fast: chatProvider(), deep: chatProvider() });
|
|
63
|
-
assert.not.throws(() => validateStaticAgentProviders([specialist({ name: 'A', provider: 'deep' })], registry));
|
|
64
|
-
});
|
|
65
|
-
validate('throws when a top-level agent references an unknown provider', () => {
|
|
66
|
-
const registry = makeRegistry({ fast: chatProvider() });
|
|
67
|
-
assert.throws(() => validateStaticAgentProviders([specialist({ name: 'A', provider: 'deep' })], registry), /Agent "A" references unknown provider "deep"/);
|
|
68
|
-
});
|
|
69
|
-
validate('recurses into subAgents — bad provider on a sub-agent throws', () => {
|
|
70
|
-
const registry = makeRegistry({ fast: chatProvider() });
|
|
71
|
-
const sub = specialist({ name: 'Sub', provider: 'missing' });
|
|
72
|
-
assert.throws(() => validateStaticAgentProviders([specialist({ name: 'A', subAgents: [sub] })], registry), /Agent "Sub" references unknown provider "missing"/);
|
|
73
|
-
});
|
|
74
|
-
validate('recurses through multiple levels — bad provider on a deeply-nested sub-agent throws', () => {
|
|
75
|
-
const registry = makeRegistry({ fast: chatProvider() });
|
|
76
|
-
const deepest = specialist({ name: 'Deepest', provider: 'missing' });
|
|
77
|
-
const middle = specialist({ name: 'Middle', subAgents: [deepest] });
|
|
78
|
-
assert.throws(() => validateStaticAgentProviders([specialist({ name: 'Top', subAgents: [middle] })], registry), /Agent "Deepest" references unknown provider "missing"/);
|
|
79
|
-
});
|
|
80
|
-
validate('defers function-form `provider` — it is not invoked at validation time', () => {
|
|
81
|
-
const registry = makeRegistry({ fast: chatProvider() });
|
|
82
|
-
const agent = specialist({
|
|
83
|
-
name: 'A',
|
|
84
|
-
// If validateStaticAgentProviders eagerly resolved this, it would throw
|
|
85
|
-
// here. The contract is that function-form is deferred to the driver's
|
|
86
|
-
// per-turn resolver.
|
|
87
|
-
provider: () => {
|
|
88
|
-
throw new Error('function-form provider should not be invoked at validation time');
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
assert.not.throws(() => validateStaticAgentProviders([agent], registry));
|
|
92
|
-
});
|
|
93
|
-
validate('shared sub-agent across two parents validates cleanly', () => {
|
|
94
|
-
const registry = makeRegistry({ fast: chatProvider() });
|
|
95
|
-
const shared = specialist({ name: 'Shared', provider: 'fast' });
|
|
96
|
-
const parentA = specialist({ name: 'ParentA', subAgents: [shared] });
|
|
97
|
-
const parentB = specialist({ name: 'ParentB', subAgents: [shared] });
|
|
98
|
-
assert.not.throws(() => validateStaticAgentProviders([parentA, parentB], registry));
|
|
99
|
-
});
|
|
100
|
-
validate.run();
|