@genesislcap/ai-assistant 15.86.1 → 15.87.0
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 +5026 -645
- package/dist/ai-assistant.d.ts +802 -0
- package/dist/chat-driver.cjs +1487 -132
- package/dist/chat-driver.cjs.map +4 -4
- package/dist/chat-driver.mjs +1480 -132
- package/dist/chat-driver.mjs.map +4 -4
- package/dist/custom-elements.json +2779 -657
- package/dist/dts/autopilot/autopilot-session.d.ts +25 -0
- package/dist/dts/autopilot/autopilot-session.d.ts.map +1 -1
- package/dist/dts/chat-driver-node.d.ts +2 -0
- package/dist/dts/chat-driver-node.d.ts.map +1 -1
- package/dist/dts/components/ai-driver/ai-driver.d.ts +15 -0
- package/dist/dts/components/ai-driver/ai-driver.d.ts.map +1 -1
- package/dist/dts/components/ai-driver/base-driver-decorator.d.ts +6 -0
- package/dist/dts/components/ai-driver/base-driver-decorator.d.ts.map +1 -1
- package/dist/dts/components/chat-driver/chat-driver.d.ts +7 -0
- package/dist/dts/components/chat-driver/chat-driver.d.ts.map +1 -1
- package/dist/dts/components/chat-driver/interaction-controller.d.ts +12 -0
- package/dist/dts/components/chat-driver/interaction-controller.d.ts.map +1 -1
- package/dist/dts/headless/describe-interaction.d.ts +17 -0
- package/dist/dts/headless/describe-interaction.d.ts.map +1 -0
- package/dist/dts/headless/headless-debug.d.ts +28 -0
- package/dist/dts/headless/headless-debug.d.ts.map +1 -0
- package/dist/dts/headless/headless-persistence.d.ts +35 -0
- package/dist/dts/headless/headless-persistence.d.ts.map +1 -0
- package/dist/dts/headless/headless-session.d.ts +180 -0
- package/dist/dts/headless/headless-session.d.ts.map +1 -0
- package/dist/dts/headless/headless.types.d.ts +435 -0
- package/dist/dts/headless/headless.types.d.ts.map +1 -0
- package/dist/dts/headless/index.d.ts +5 -0
- package/dist/dts/headless/index.d.ts.map +1 -0
- package/dist/dts/headless-server/compact.d.ts +52 -0
- package/dist/dts/headless-server/compact.d.ts.map +1 -0
- package/dist/dts/headless-server/index.d.ts +23 -0
- package/dist/dts/headless-server/index.d.ts.map +1 -0
- package/dist/dts/headless-server/server.d.ts +13 -0
- package/dist/dts/headless-server/server.d.ts.map +1 -0
- package/dist/dts/headless-server/types.d.ts +210 -0
- package/dist/dts/headless-server/types.d.ts.map +1 -0
- package/dist/dts/index.d.ts +2 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/main/main.d.ts.map +1 -1
- package/dist/dts/state/debug-event-log.d.ts +1 -1
- package/dist/dts/state/debug-event-log.d.ts.map +1 -1
- package/dist/dts/state/decision-surface.d.ts +5 -4
- package/dist/dts/state/decision-surface.d.ts.map +1 -1
- package/dist/dts/state/persistence/debug-log-assembly.d.ts +49 -0
- package/dist/dts/state/persistence/debug-log-assembly.d.ts.map +1 -0
- package/dist/dts/state/persistence/index.d.ts +1 -0
- package/dist/dts/state/persistence/index.d.ts.map +1 -1
- package/dist/dts/state/persistence/session-persister.d.ts +7 -0
- package/dist/dts/state/persistence/session-persister.d.ts.map +1 -1
- package/dist/dts/types/interaction-surface.d.ts +30 -0
- package/dist/dts/types/interaction-surface.d.ts.map +1 -1
- package/dist/esm/autopilot/autopilot-session.js +31 -16
- package/dist/esm/chat-driver-node.js +8 -0
- package/dist/esm/components/ai-driver/base-driver-decorator.js +12 -0
- package/dist/esm/components/chat-driver/chat-driver.js +8 -0
- package/dist/esm/components/chat-driver/interaction-controller.js +66 -0
- package/dist/esm/headless/describe-interaction.js +55 -0
- package/dist/esm/headless/headless-debug.js +62 -0
- package/dist/esm/headless/headless-persistence.js +192 -0
- package/dist/esm/headless/headless-session.js +808 -0
- package/dist/esm/headless/headless.types.js +1 -0
- package/dist/esm/headless/index.js +3 -0
- package/dist/esm/headless-server/compact.js +160 -0
- package/dist/esm/headless-server/index.js +21 -0
- package/dist/esm/headless-server/server.js +746 -0
- package/dist/esm/headless-server/types.js +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/main/main.js +18 -37
- package/dist/esm/state/debug-event-log.js +6 -1
- package/dist/esm/state/decision-surface.js +75 -48
- package/dist/esm/state/persistence/debug-log-assembly.js +69 -0
- package/dist/esm/state/persistence/index.js +1 -0
- package/dist/esm/state/persistence/session-persister.js +16 -0
- package/dist/headless-server.cjs +853 -0
- package/dist/headless-server.cjs.map +7 -0
- package/dist/headless-server.mjs +819 -0
- package/dist/headless-server.mjs.map +7 -0
- package/package.json +28 -18
- package/scripts/build-headless-server-node.mjs +42 -0
- package/scripts/smoke-chat-driver-node.mjs +3 -0
- package/scripts/smoke-headless-server-node.mjs +112 -0
|
@@ -63,6 +63,14 @@
|
|
|
63
63
|
"package": "./config/fallback-agents"
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
|
+
{
|
|
67
|
+
"kind": "js",
|
|
68
|
+
"name": "*",
|
|
69
|
+
"declaration": {
|
|
70
|
+
"name": "*",
|
|
71
|
+
"package": "./headless"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
66
74
|
{
|
|
67
75
|
"kind": "js",
|
|
68
76
|
"name": "AnthropicProvider",
|
|
@@ -679,6 +687,22 @@
|
|
|
679
687
|
"module": "./state/persistence/diagnostics"
|
|
680
688
|
}
|
|
681
689
|
},
|
|
690
|
+
{
|
|
691
|
+
"kind": "js",
|
|
692
|
+
"name": "buildDiagnosticEntries",
|
|
693
|
+
"declaration": {
|
|
694
|
+
"name": "buildDiagnosticEntries",
|
|
695
|
+
"module": "./state/persistence/debug-log-assembly"
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
"kind": "js",
|
|
700
|
+
"name": "lifetimeDebugLog",
|
|
701
|
+
"declaration": {
|
|
702
|
+
"name": "lifetimeDebugLog",
|
|
703
|
+
"module": "./state/persistence/debug-log-assembly"
|
|
704
|
+
}
|
|
705
|
+
},
|
|
682
706
|
{
|
|
683
707
|
"kind": "js",
|
|
684
708
|
"name": "DebugLog",
|
|
@@ -750,6 +774,38 @@
|
|
|
750
774
|
"package": "./autopilot"
|
|
751
775
|
}
|
|
752
776
|
},
|
|
777
|
+
{
|
|
778
|
+
"kind": "js",
|
|
779
|
+
"name": "*",
|
|
780
|
+
"declaration": {
|
|
781
|
+
"name": "*",
|
|
782
|
+
"package": "./headless"
|
|
783
|
+
}
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
"kind": "js",
|
|
787
|
+
"name": "headlessPersistence",
|
|
788
|
+
"declaration": {
|
|
789
|
+
"name": "headlessPersistence",
|
|
790
|
+
"module": "./headless/headless-persistence"
|
|
791
|
+
}
|
|
792
|
+
},
|
|
793
|
+
{
|
|
794
|
+
"kind": "js",
|
|
795
|
+
"name": "type",
|
|
796
|
+
"declaration": {
|
|
797
|
+
"name": "type",
|
|
798
|
+
"module": "./headless/headless-persistence"
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"kind": "js",
|
|
803
|
+
"name": "HeadlessPersistenceOptions",
|
|
804
|
+
"declaration": {
|
|
805
|
+
"name": "HeadlessPersistenceOptions",
|
|
806
|
+
"module": "./headless/headless-persistence"
|
|
807
|
+
}
|
|
808
|
+
},
|
|
753
809
|
{
|
|
754
810
|
"kind": "js",
|
|
755
811
|
"name": "*",
|
|
@@ -1410,429 +1466,148 @@
|
|
|
1410
1466
|
},
|
|
1411
1467
|
{
|
|
1412
1468
|
"kind": "javascript-module",
|
|
1413
|
-
"path": "src/
|
|
1469
|
+
"path": "src/autopilot/autopilot-driver.ts",
|
|
1414
1470
|
"declarations": [
|
|
1415
1471
|
{
|
|
1416
1472
|
"kind": "variable",
|
|
1417
|
-
"name": "
|
|
1473
|
+
"name": "AUTOPILOT_CLAIMANT",
|
|
1418
1474
|
"type": {
|
|
1419
|
-
"text": "
|
|
1475
|
+
"text": "string"
|
|
1420
1476
|
},
|
|
1421
|
-
"default": "
|
|
1422
|
-
"description": "
|
|
1477
|
+
"default": "'autopilot'",
|
|
1478
|
+
"description": "The holder id the autopilot claims interactions as."
|
|
1423
1479
|
},
|
|
1424
1480
|
{
|
|
1425
1481
|
"kind": "class",
|
|
1426
|
-
"description": "
|
|
1427
|
-
"name": "
|
|
1482
|
+
"description": "Autopilot (GENC-1660): a driver decorator that answers the questions a working agent asks the\nuser, on their behalf, grounded in the agent's autopilot config (for bootstrap, the brief).\n\nNeither side calls the other. The working agent asks as it always does; this driver claims the\ninteractions its policy allows, while it is running for that flow, and answers each in one short\nturn on the flow's `AutopilotSession`. It plugs in only through the generic extension points\n— an interaction interceptor, a handler capability and the flow lifecycle — so the core knows\nnothing about it, and it wraps any `AiDriver`.",
|
|
1483
|
+
"name": "AutopilotDriver",
|
|
1428
1484
|
"members": [
|
|
1429
1485
|
{
|
|
1430
1486
|
"kind": "field",
|
|
1431
|
-
"name": "
|
|
1487
|
+
"name": "agents",
|
|
1488
|
+
"type": {
|
|
1489
|
+
"text": "readonly AgentConfig[]"
|
|
1490
|
+
},
|
|
1432
1491
|
"privacy": "private",
|
|
1433
|
-
"readonly": true
|
|
1434
|
-
"default": "new Map<string, Set<AnyHandler>>()"
|
|
1492
|
+
"readonly": true
|
|
1435
1493
|
},
|
|
1436
1494
|
{
|
|
1437
1495
|
"kind": "field",
|
|
1438
|
-
"name": "
|
|
1496
|
+
"name": "providerRegistry",
|
|
1439
1497
|
"type": {
|
|
1440
|
-
"text": "
|
|
1498
|
+
"text": "AIProviderRegistry"
|
|
1441
1499
|
},
|
|
1442
1500
|
"privacy": "private",
|
|
1443
|
-
"readonly": true
|
|
1444
|
-
"default": "new Set(config?.crossTabEvents ?? [])"
|
|
1501
|
+
"readonly": true
|
|
1445
1502
|
},
|
|
1446
1503
|
{
|
|
1447
1504
|
"kind": "field",
|
|
1448
|
-
"name": "
|
|
1505
|
+
"name": "sessionKey",
|
|
1449
1506
|
"type": {
|
|
1450
|
-
"text": "
|
|
1507
|
+
"text": "string"
|
|
1451
1508
|
},
|
|
1452
1509
|
"privacy": "private",
|
|
1453
1510
|
"readonly": true
|
|
1454
1511
|
},
|
|
1455
1512
|
{
|
|
1456
1513
|
"kind": "field",
|
|
1457
|
-
"name": "
|
|
1514
|
+
"name": "activityBus",
|
|
1458
1515
|
"type": {
|
|
1459
|
-
"text": "
|
|
1516
|
+
"text": "ActivityBus"
|
|
1460
1517
|
},
|
|
1461
|
-
"privacy": "private"
|
|
1518
|
+
"privacy": "private",
|
|
1519
|
+
"readonly": true
|
|
1462
1520
|
},
|
|
1463
1521
|
{
|
|
1464
1522
|
"kind": "field",
|
|
1465
|
-
"name": "
|
|
1523
|
+
"name": "listeners",
|
|
1524
|
+
"privacy": "private",
|
|
1525
|
+
"readonly": true,
|
|
1526
|
+
"default": "new Set<() => void>()"
|
|
1527
|
+
},
|
|
1528
|
+
{
|
|
1529
|
+
"kind": "field",
|
|
1530
|
+
"name": "sessions",
|
|
1531
|
+
"privacy": "private",
|
|
1532
|
+
"readonly": true,
|
|
1533
|
+
"default": "new Map<string, AutopilotSession>()"
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"kind": "field",
|
|
1537
|
+
"name": "onFor",
|
|
1466
1538
|
"type": {
|
|
1467
|
-
"text": "
|
|
1539
|
+
"text": "string | null"
|
|
1468
1540
|
},
|
|
1469
1541
|
"privacy": "private",
|
|
1470
|
-
"default": "
|
|
1542
|
+
"default": "null",
|
|
1543
|
+
"description": "The flow the mode applies to: set when it is first switched, cleared when that flow ends."
|
|
1471
1544
|
},
|
|
1472
1545
|
{
|
|
1473
|
-
"kind": "
|
|
1474
|
-
"name": "
|
|
1546
|
+
"kind": "field",
|
|
1547
|
+
"name": "mode",
|
|
1548
|
+
"type": {
|
|
1549
|
+
"text": "'paused' | 'running'"
|
|
1550
|
+
},
|
|
1475
1551
|
"privacy": "private",
|
|
1476
|
-
"
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1552
|
+
"default": "'paused'"
|
|
1553
|
+
},
|
|
1554
|
+
{
|
|
1555
|
+
"kind": "field",
|
|
1556
|
+
"name": "pauseState",
|
|
1557
|
+
"type": {
|
|
1558
|
+
"text": "AutopilotHostState['pause'] | undefined"
|
|
1480
1559
|
},
|
|
1481
|
-
"
|
|
1560
|
+
"privacy": "private"
|
|
1482
1561
|
},
|
|
1483
1562
|
{
|
|
1484
|
-
"kind": "
|
|
1485
|
-
"name": "
|
|
1486
|
-
"
|
|
1487
|
-
"
|
|
1488
|
-
"text": "() => void"
|
|
1489
|
-
}
|
|
1563
|
+
"kind": "field",
|
|
1564
|
+
"name": "held",
|
|
1565
|
+
"type": {
|
|
1566
|
+
"text": "Held | undefined"
|
|
1490
1567
|
},
|
|
1491
|
-
"
|
|
1492
|
-
{
|
|
1493
|
-
"name": "type",
|
|
1494
|
-
"type": {
|
|
1495
|
-
"text": "K"
|
|
1496
|
-
}
|
|
1497
|
-
},
|
|
1498
|
-
{
|
|
1499
|
-
"name": "handler",
|
|
1500
|
-
"type": {
|
|
1501
|
-
"text": "(detail: AgenticActivityEvents[K]) => void"
|
|
1502
|
-
}
|
|
1503
|
-
}
|
|
1504
|
-
],
|
|
1505
|
-
"description": "Subscribe to an event. Returns an unsubscribe function — call it in\n`disconnectedCallback` to avoid memory leaks."
|
|
1568
|
+
"privacy": "private"
|
|
1506
1569
|
},
|
|
1507
1570
|
{
|
|
1508
|
-
"kind": "
|
|
1509
|
-
"name": "
|
|
1510
|
-
"
|
|
1511
|
-
"
|
|
1512
|
-
"text": "void"
|
|
1513
|
-
}
|
|
1571
|
+
"kind": "field",
|
|
1572
|
+
"name": "open",
|
|
1573
|
+
"type": {
|
|
1574
|
+
"text": "InteractionOpened | undefined"
|
|
1514
1575
|
},
|
|
1515
|
-
"
|
|
1516
|
-
|
|
1517
|
-
"name": "type",
|
|
1518
|
-
"type": {
|
|
1519
|
-
"text": "K"
|
|
1520
|
-
}
|
|
1521
|
-
},
|
|
1522
|
-
{
|
|
1523
|
-
"name": "detail",
|
|
1524
|
-
"type": {
|
|
1525
|
-
"text": "AgenticActivityEvents[K]"
|
|
1526
|
-
}
|
|
1527
|
-
}
|
|
1528
|
-
],
|
|
1529
|
-
"description": "Publish an event to all local subscribers and, if configured, to other tabs\nvia BroadcastChannel."
|
|
1576
|
+
"privacy": "private",
|
|
1577
|
+
"description": "The interaction open right now, whoever holds it: claimed or not, it was offered here first.\n`held` covers only what the autopilot claimed, so this is how the status knows that the working\nagent is parked on a question left with the person (see `waitingOnUser`)."
|
|
1530
1578
|
},
|
|
1531
1579
|
{
|
|
1532
|
-
"kind": "
|
|
1533
|
-
"name": "
|
|
1534
|
-
"
|
|
1535
|
-
"
|
|
1536
|
-
"text": "void"
|
|
1537
|
-
}
|
|
1580
|
+
"kind": "field",
|
|
1581
|
+
"name": "declinedWhilePaused",
|
|
1582
|
+
"type": {
|
|
1583
|
+
"text": "InteractionOpened | undefined"
|
|
1538
1584
|
},
|
|
1539
|
-
"
|
|
1540
|
-
|
|
1541
|
-
"name": "type",
|
|
1542
|
-
"type": {
|
|
1543
|
-
"text": "keyof AgenticActivityEvents"
|
|
1544
|
-
}
|
|
1545
|
-
}
|
|
1546
|
-
],
|
|
1547
|
-
"description": "Add an event type to the cross-tab forwarding set at runtime.\nMust be called before the first AgenticActivityBus.publish of that event type."
|
|
1585
|
+
"privacy": "private",
|
|
1586
|
+
"description": "The open interaction, when the autopilot declined it only for being paused as it opened: a live\nResume may still take it (see `takeOpenOnResume`). Cleared when it is taken or settles."
|
|
1548
1587
|
},
|
|
1549
1588
|
{
|
|
1550
|
-
"kind": "
|
|
1551
|
-
"name": "
|
|
1552
|
-
"
|
|
1553
|
-
"
|
|
1554
|
-
"text": "void"
|
|
1555
|
-
}
|
|
1589
|
+
"kind": "field",
|
|
1590
|
+
"name": "refinements",
|
|
1591
|
+
"type": {
|
|
1592
|
+
"text": "{ key: string; count: number } | undefined"
|
|
1556
1593
|
},
|
|
1557
|
-
"
|
|
1594
|
+
"privacy": "private",
|
|
1595
|
+
"description": "Refining actions taken on the current step (written answers among them), for the limit."
|
|
1558
1596
|
},
|
|
1559
1597
|
{
|
|
1560
|
-
"kind": "
|
|
1561
|
-
"name": "
|
|
1598
|
+
"kind": "field",
|
|
1599
|
+
"name": "watchdog",
|
|
1600
|
+
"type": {
|
|
1601
|
+
"text": "ReturnType<typeof setTimeout> | undefined"
|
|
1602
|
+
},
|
|
1562
1603
|
"privacy": "private",
|
|
1563
|
-
"
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
"
|
|
1569
|
-
|
|
1570
|
-
"name": "type",
|
|
1571
|
-
"type": {
|
|
1572
|
-
"text": "string"
|
|
1573
|
-
}
|
|
1574
|
-
},
|
|
1575
|
-
{
|
|
1576
|
-
"name": "detail",
|
|
1577
|
-
"type": {
|
|
1578
|
-
"text": "unknown"
|
|
1579
|
-
}
|
|
1580
|
-
}
|
|
1581
|
-
]
|
|
1582
|
-
}
|
|
1583
|
-
]
|
|
1584
|
-
},
|
|
1585
|
-
{
|
|
1586
|
-
"kind": "variable",
|
|
1587
|
-
"name": "agenticActivityBus",
|
|
1588
|
-
"default": "new AgenticActivityBus({\n crossTabEvents: ['halo-start', 'halo-stop', 'tool-loop-start', 'tool-loop-end'],\n // Lazy: the tab-scoped name (and its `sessionStorage` read) is computed on first\n // cross-tab use in a browser, not at module-eval — so importing this module is\n // side-effect-free and Node/test-safe.\n channelNameFactory: () => getTabScopedChannelName('foundation-ai-activity'),\n})",
|
|
1589
|
-
"description": "Pre-instantiated singleton event bus for AI assistant activity.\n\n- `halo-start` / `halo-stop` are forwarded via a tab-scoped `BroadcastChannel` so that\n popout windows opened from this tab show halo animations, while remaining isolated from\n unrelated tabs on the same origin (tab-scoped channel name).\n- `tool-loop-start` / `tool-loop-end` are cross-tab for the same reason: they describe the\n assistant's lifecycle (a turn beginning / ending), and the most common subscribers\n (workspace transitions, post-turn deferred recomputation, UI gates tied to the assistant\n being idle) need the event regardless of whether the user is interacting with the chat\n in the main tab or a popout window. Tab-local-only telemetry can subscribe and filter.\n- `chat-popout` / `chat-popin` are in-memory only — they must only affect the tab where the\n user clicked."
|
|
1590
|
-
}
|
|
1591
|
-
],
|
|
1592
|
-
"exports": [
|
|
1593
|
-
{
|
|
1594
|
-
"kind": "js",
|
|
1595
|
-
"name": "NOOP_ACTIVITY_BUS",
|
|
1596
|
-
"declaration": {
|
|
1597
|
-
"name": "NOOP_ACTIVITY_BUS",
|
|
1598
|
-
"module": "src/channel/ai-activity-bus.ts"
|
|
1599
|
-
}
|
|
1600
|
-
},
|
|
1601
|
-
{
|
|
1602
|
-
"kind": "js",
|
|
1603
|
-
"name": "AgenticActivityBus",
|
|
1604
|
-
"declaration": {
|
|
1605
|
-
"name": "AgenticActivityBus",
|
|
1606
|
-
"module": "src/channel/ai-activity-bus.ts"
|
|
1607
|
-
}
|
|
1608
|
-
},
|
|
1609
|
-
{
|
|
1610
|
-
"kind": "js",
|
|
1611
|
-
"name": "agenticActivityBus",
|
|
1612
|
-
"declaration": {
|
|
1613
|
-
"name": "agenticActivityBus",
|
|
1614
|
-
"module": "src/channel/ai-activity-bus.ts"
|
|
1615
|
-
}
|
|
1616
|
-
}
|
|
1617
|
-
]
|
|
1618
|
-
},
|
|
1619
|
-
{
|
|
1620
|
-
"kind": "javascript-module",
|
|
1621
|
-
"path": "src/channel/ai-activity-channel.ts",
|
|
1622
|
-
"declarations": [],
|
|
1623
|
-
"exports": []
|
|
1624
|
-
},
|
|
1625
|
-
{
|
|
1626
|
-
"kind": "javascript-module",
|
|
1627
|
-
"path": "src/channel/autopilot-needs-user.ts",
|
|
1628
|
-
"declarations": [
|
|
1629
|
-
{
|
|
1630
|
-
"kind": "function",
|
|
1631
|
-
"name": "setAutopilotNeedsUser",
|
|
1632
|
-
"return": {
|
|
1633
|
-
"type": {
|
|
1634
|
-
"text": "void"
|
|
1635
|
-
}
|
|
1636
|
-
},
|
|
1637
|
-
"parameters": [
|
|
1638
|
-
{
|
|
1639
|
-
"name": "sessionKey",
|
|
1640
|
-
"type": {
|
|
1641
|
-
"text": "string"
|
|
1642
|
-
}
|
|
1643
|
-
},
|
|
1644
|
-
{
|
|
1645
|
-
"name": "needsUser",
|
|
1646
|
-
"type": {
|
|
1647
|
-
"text": "boolean"
|
|
1648
|
-
}
|
|
1649
|
-
}
|
|
1650
|
-
],
|
|
1651
|
-
"description": "Set it for one session, announcing `autopilot-needs-user` when it changes."
|
|
1652
|
-
},
|
|
1653
|
-
{
|
|
1654
|
-
"kind": "function",
|
|
1655
|
-
"name": "autopilotNeedsUser",
|
|
1656
|
-
"return": {
|
|
1657
|
-
"type": {
|
|
1658
|
-
"text": "boolean"
|
|
1659
|
-
}
|
|
1660
|
-
},
|
|
1661
|
-
"parameters": [
|
|
1662
|
-
{
|
|
1663
|
-
"name": "sessionKey",
|
|
1664
|
-
"optional": true,
|
|
1665
|
-
"type": {
|
|
1666
|
-
"text": "string"
|
|
1667
|
-
}
|
|
1668
|
-
}
|
|
1669
|
-
],
|
|
1670
|
-
"description": "Whether a session has something waiting on the person — or, without a key (a bubble that cannot\ntell which assistant it holds), whether any session has."
|
|
1671
|
-
}
|
|
1672
|
-
],
|
|
1673
|
-
"exports": [
|
|
1674
|
-
{
|
|
1675
|
-
"kind": "js",
|
|
1676
|
-
"name": "setAutopilotNeedsUser",
|
|
1677
|
-
"declaration": {
|
|
1678
|
-
"name": "setAutopilotNeedsUser",
|
|
1679
|
-
"module": "src/channel/autopilot-needs-user.ts"
|
|
1680
|
-
}
|
|
1681
|
-
},
|
|
1682
|
-
{
|
|
1683
|
-
"kind": "js",
|
|
1684
|
-
"name": "autopilotNeedsUser",
|
|
1685
|
-
"declaration": {
|
|
1686
|
-
"name": "autopilotNeedsUser",
|
|
1687
|
-
"module": "src/channel/autopilot-needs-user.ts"
|
|
1688
|
-
}
|
|
1689
|
-
}
|
|
1690
|
-
]
|
|
1691
|
-
},
|
|
1692
|
-
{
|
|
1693
|
-
"kind": "javascript-module",
|
|
1694
|
-
"path": "src/autopilot/autopilot-driver.ts",
|
|
1695
|
-
"declarations": [
|
|
1696
|
-
{
|
|
1697
|
-
"kind": "variable",
|
|
1698
|
-
"name": "AUTOPILOT_CLAIMANT",
|
|
1699
|
-
"type": {
|
|
1700
|
-
"text": "string"
|
|
1701
|
-
},
|
|
1702
|
-
"default": "'autopilot'",
|
|
1703
|
-
"description": "The holder id the autopilot claims interactions as."
|
|
1704
|
-
},
|
|
1705
|
-
{
|
|
1706
|
-
"kind": "class",
|
|
1707
|
-
"description": "Autopilot (GENC-1660): a driver decorator that answers the questions a working agent asks the\nuser, on their behalf, grounded in the agent's autopilot config (for bootstrap, the brief).\n\nNeither side calls the other. The working agent asks as it always does; this driver claims the\ninteractions its policy allows, while it is running for that flow, and answers each in one short\nturn on the flow's `AutopilotSession`. It plugs in only through the generic extension points\n— an interaction interceptor, a handler capability and the flow lifecycle — so the core knows\nnothing about it, and it wraps any `AiDriver`.",
|
|
1708
|
-
"name": "AutopilotDriver",
|
|
1709
|
-
"members": [
|
|
1710
|
-
{
|
|
1711
|
-
"kind": "field",
|
|
1712
|
-
"name": "agents",
|
|
1713
|
-
"type": {
|
|
1714
|
-
"text": "readonly AgentConfig[]"
|
|
1715
|
-
},
|
|
1716
|
-
"privacy": "private",
|
|
1717
|
-
"readonly": true
|
|
1718
|
-
},
|
|
1719
|
-
{
|
|
1720
|
-
"kind": "field",
|
|
1721
|
-
"name": "providerRegistry",
|
|
1722
|
-
"type": {
|
|
1723
|
-
"text": "AIProviderRegistry"
|
|
1724
|
-
},
|
|
1725
|
-
"privacy": "private",
|
|
1726
|
-
"readonly": true
|
|
1727
|
-
},
|
|
1728
|
-
{
|
|
1729
|
-
"kind": "field",
|
|
1730
|
-
"name": "sessionKey",
|
|
1731
|
-
"type": {
|
|
1732
|
-
"text": "string"
|
|
1733
|
-
},
|
|
1734
|
-
"privacy": "private",
|
|
1735
|
-
"readonly": true
|
|
1736
|
-
},
|
|
1737
|
-
{
|
|
1738
|
-
"kind": "field",
|
|
1739
|
-
"name": "activityBus",
|
|
1740
|
-
"type": {
|
|
1741
|
-
"text": "ActivityBus"
|
|
1742
|
-
},
|
|
1743
|
-
"privacy": "private",
|
|
1744
|
-
"readonly": true
|
|
1745
|
-
},
|
|
1746
|
-
{
|
|
1747
|
-
"kind": "field",
|
|
1748
|
-
"name": "listeners",
|
|
1749
|
-
"privacy": "private",
|
|
1750
|
-
"readonly": true,
|
|
1751
|
-
"default": "new Set<() => void>()"
|
|
1752
|
-
},
|
|
1753
|
-
{
|
|
1754
|
-
"kind": "field",
|
|
1755
|
-
"name": "sessions",
|
|
1756
|
-
"privacy": "private",
|
|
1757
|
-
"readonly": true,
|
|
1758
|
-
"default": "new Map<string, AutopilotSession>()"
|
|
1759
|
-
},
|
|
1760
|
-
{
|
|
1761
|
-
"kind": "field",
|
|
1762
|
-
"name": "onFor",
|
|
1763
|
-
"type": {
|
|
1764
|
-
"text": "string | null"
|
|
1765
|
-
},
|
|
1766
|
-
"privacy": "private",
|
|
1767
|
-
"default": "null",
|
|
1768
|
-
"description": "The flow the mode applies to: set when it is first switched, cleared when that flow ends."
|
|
1769
|
-
},
|
|
1770
|
-
{
|
|
1771
|
-
"kind": "field",
|
|
1772
|
-
"name": "mode",
|
|
1773
|
-
"type": {
|
|
1774
|
-
"text": "'paused' | 'running'"
|
|
1775
|
-
},
|
|
1776
|
-
"privacy": "private",
|
|
1777
|
-
"default": "'paused'"
|
|
1778
|
-
},
|
|
1779
|
-
{
|
|
1780
|
-
"kind": "field",
|
|
1781
|
-
"name": "pauseState",
|
|
1782
|
-
"type": {
|
|
1783
|
-
"text": "AutopilotHostState['pause'] | undefined"
|
|
1784
|
-
},
|
|
1785
|
-
"privacy": "private"
|
|
1786
|
-
},
|
|
1787
|
-
{
|
|
1788
|
-
"kind": "field",
|
|
1789
|
-
"name": "held",
|
|
1790
|
-
"type": {
|
|
1791
|
-
"text": "Held | undefined"
|
|
1792
|
-
},
|
|
1793
|
-
"privacy": "private"
|
|
1794
|
-
},
|
|
1795
|
-
{
|
|
1796
|
-
"kind": "field",
|
|
1797
|
-
"name": "open",
|
|
1798
|
-
"type": {
|
|
1799
|
-
"text": "InteractionOpened | undefined"
|
|
1800
|
-
},
|
|
1801
|
-
"privacy": "private",
|
|
1802
|
-
"description": "The interaction open right now, whoever holds it: claimed or not, it was offered here first.\n`held` covers only what the autopilot claimed, so this is how the status knows that the working\nagent is parked on a question left with the person (see `waitingOnUser`)."
|
|
1803
|
-
},
|
|
1804
|
-
{
|
|
1805
|
-
"kind": "field",
|
|
1806
|
-
"name": "declinedWhilePaused",
|
|
1807
|
-
"type": {
|
|
1808
|
-
"text": "InteractionOpened | undefined"
|
|
1809
|
-
},
|
|
1810
|
-
"privacy": "private",
|
|
1811
|
-
"description": "The open interaction, when the autopilot declined it only for being paused as it opened: a live\nResume may still take it (see `takeOpenOnResume`). Cleared when it is taken or settles."
|
|
1812
|
-
},
|
|
1813
|
-
{
|
|
1814
|
-
"kind": "field",
|
|
1815
|
-
"name": "refinements",
|
|
1816
|
-
"type": {
|
|
1817
|
-
"text": "{ key: string; count: number } | undefined"
|
|
1818
|
-
},
|
|
1819
|
-
"privacy": "private",
|
|
1820
|
-
"description": "Refining actions taken on the current step (written answers among them), for the limit."
|
|
1821
|
-
},
|
|
1822
|
-
{
|
|
1823
|
-
"kind": "field",
|
|
1824
|
-
"name": "watchdog",
|
|
1825
|
-
"type": {
|
|
1826
|
-
"text": "ReturnType<typeof setTimeout> | undefined"
|
|
1827
|
-
},
|
|
1828
|
-
"privacy": "private",
|
|
1829
|
-
"description": "The watchdog's next check, while a claimed interaction is pending."
|
|
1830
|
-
},
|
|
1831
|
-
{
|
|
1832
|
-
"kind": "field",
|
|
1833
|
-
"name": "endedDiagnostics",
|
|
1834
|
-
"type": {
|
|
1835
|
-
"text": "DiagnosticEntry[]"
|
|
1604
|
+
"description": "The watchdog's next check, while a claimed interaction is pending."
|
|
1605
|
+
},
|
|
1606
|
+
{
|
|
1607
|
+
"kind": "field",
|
|
1608
|
+
"name": "endedDiagnostics",
|
|
1609
|
+
"type": {
|
|
1610
|
+
"text": "DiagnosticEntry[]"
|
|
1836
1611
|
},
|
|
1837
1612
|
"privacy": "private",
|
|
1838
1613
|
"readonly": true,
|
|
@@ -3643,33 +3418,34 @@
|
|
|
3643
3418
|
},
|
|
3644
3419
|
{
|
|
3645
3420
|
"kind": "method",
|
|
3646
|
-
"name": "
|
|
3421
|
+
"name": "invokeAsUser",
|
|
3647
3422
|
"return": {
|
|
3648
3423
|
"type": {
|
|
3649
|
-
"text": "Promise<
|
|
3424
|
+
"text": "Promise<InvokeResult>"
|
|
3650
3425
|
}
|
|
3651
3426
|
},
|
|
3652
3427
|
"parameters": [
|
|
3653
3428
|
{
|
|
3654
|
-
"name": "
|
|
3429
|
+
"name": "interactionId",
|
|
3655
3430
|
"type": {
|
|
3656
3431
|
"text": "string"
|
|
3657
3432
|
}
|
|
3658
3433
|
},
|
|
3659
3434
|
{
|
|
3660
|
-
"name": "
|
|
3435
|
+
"name": "action",
|
|
3661
3436
|
"type": {
|
|
3662
|
-
"text": "
|
|
3437
|
+
"text": "string"
|
|
3663
3438
|
}
|
|
3664
3439
|
},
|
|
3665
3440
|
{
|
|
3666
|
-
"name": "
|
|
3441
|
+
"name": "args",
|
|
3667
3442
|
"optional": true,
|
|
3668
3443
|
"type": {
|
|
3669
|
-
"text": "
|
|
3444
|
+
"text": "unknown"
|
|
3670
3445
|
}
|
|
3671
3446
|
}
|
|
3672
3447
|
],
|
|
3448
|
+
"description": "Forwarded: the interaction belongs to the driver that opened it. An inner driver that cannot\nrun actions answers as if the interaction had ended.",
|
|
3673
3449
|
"inheritedFrom": {
|
|
3674
3450
|
"name": "BaseDriverDecorator",
|
|
3675
3451
|
"module": "src/components/ai-driver/base-driver-decorator.ts"
|
|
@@ -3677,10 +3453,44 @@
|
|
|
3677
3453
|
},
|
|
3678
3454
|
{
|
|
3679
3455
|
"kind": "method",
|
|
3680
|
-
"name": "
|
|
3456
|
+
"name": "presentInteraction",
|
|
3681
3457
|
"return": {
|
|
3682
3458
|
"type": {
|
|
3683
|
-
"text": "
|
|
3459
|
+
"text": "Promise<T>"
|
|
3460
|
+
}
|
|
3461
|
+
},
|
|
3462
|
+
"parameters": [
|
|
3463
|
+
{
|
|
3464
|
+
"name": "componentName",
|
|
3465
|
+
"type": {
|
|
3466
|
+
"text": "string"
|
|
3467
|
+
}
|
|
3468
|
+
},
|
|
3469
|
+
{
|
|
3470
|
+
"name": "data",
|
|
3471
|
+
"type": {
|
|
3472
|
+
"text": "unknown"
|
|
3473
|
+
}
|
|
3474
|
+
},
|
|
3475
|
+
{
|
|
3476
|
+
"name": "options",
|
|
3477
|
+
"optional": true,
|
|
3478
|
+
"type": {
|
|
3479
|
+
"text": "InteractionRequestOptions"
|
|
3480
|
+
}
|
|
3481
|
+
}
|
|
3482
|
+
],
|
|
3483
|
+
"inheritedFrom": {
|
|
3484
|
+
"name": "BaseDriverDecorator",
|
|
3485
|
+
"module": "src/components/ai-driver/base-driver-decorator.ts"
|
|
3486
|
+
}
|
|
3487
|
+
},
|
|
3488
|
+
{
|
|
3489
|
+
"kind": "method",
|
|
3490
|
+
"name": "provideHandlerCapability",
|
|
3491
|
+
"return": {
|
|
3492
|
+
"type": {
|
|
3493
|
+
"text": "() => void"
|
|
3684
3494
|
}
|
|
3685
3495
|
},
|
|
3686
3496
|
"parameters": [
|
|
@@ -4004,6 +3814,49 @@
|
|
|
4004
3814
|
],
|
|
4005
3815
|
"description": "`widget_act`'s `fields`, parsed leniently: an object is taken as it is (a model may send one\ndespite the schema's string), and a Markdown code fence around the JSON is stripped."
|
|
4006
3816
|
},
|
|
3817
|
+
{
|
|
3818
|
+
"kind": "function",
|
|
3819
|
+
"name": "byNumberOf",
|
|
3820
|
+
"parameters": [
|
|
3821
|
+
{
|
|
3822
|
+
"name": "numbering",
|
|
3823
|
+
"type": {
|
|
3824
|
+
"text": "readonly string[]"
|
|
3825
|
+
}
|
|
3826
|
+
}
|
|
3827
|
+
],
|
|
3828
|
+
"description": "A function reading a number as the action it stands for in the list last shown (`numbering`, as\nrenderActions returns it): `'2'` is `numbering[1]`; anything that is not a whole number,\nor is out of range, stands for nothing. Shared by `widget_act` and the headless driver, so \"2\"\nmeans the same option to both."
|
|
3829
|
+
},
|
|
3830
|
+
{
|
|
3831
|
+
"kind": "function",
|
|
3832
|
+
"name": "invokeArgsFor",
|
|
3833
|
+
"return": {
|
|
3834
|
+
"type": {
|
|
3835
|
+
"text": "{ ok: true; args: unknown } | { ok: false }"
|
|
3836
|
+
}
|
|
3837
|
+
},
|
|
3838
|
+
"parameters": [
|
|
3839
|
+
{
|
|
3840
|
+
"name": "listed",
|
|
3841
|
+
"type": {
|
|
3842
|
+
"text": "SurfaceAction | undefined"
|
|
3843
|
+
}
|
|
3844
|
+
},
|
|
3845
|
+
{
|
|
3846
|
+
"name": "given",
|
|
3847
|
+
"type": {
|
|
3848
|
+
"text": "{ options?: readonly string[]; text?: string; fields?: unknown }"
|
|
3849
|
+
}
|
|
3850
|
+
},
|
|
3851
|
+
{
|
|
3852
|
+
"name": "byNumber",
|
|
3853
|
+
"type": {
|
|
3854
|
+
"text": "(value: string) => string | undefined"
|
|
3855
|
+
}
|
|
3856
|
+
}
|
|
3857
|
+
],
|
|
3858
|
+
"description": "The arguments `widget_act` hands to `invoke` for `listed`, from what was asked. An action taking\none free-text argument gets `text`, as `reply` does; a form gets its `fields`, parsed leniently\n(parseFields; not ok when they do not parse); anything else its options (a number mapped\nto its name by `byNumber`) and text, as given. Pure, and shared with the headless driver, so\nboth build the same call from the same words."
|
|
3859
|
+
},
|
|
4007
3860
|
{
|
|
4008
3861
|
"kind": "function",
|
|
4009
3862
|
"name": "fieldsExample",
|
|
@@ -4389,6 +4242,22 @@
|
|
|
4389
4242
|
"module": "src/autopilot/autopilot-session.ts"
|
|
4390
4243
|
}
|
|
4391
4244
|
},
|
|
4245
|
+
{
|
|
4246
|
+
"kind": "js",
|
|
4247
|
+
"name": "byNumberOf",
|
|
4248
|
+
"declaration": {
|
|
4249
|
+
"name": "byNumberOf",
|
|
4250
|
+
"module": "src/autopilot/autopilot-session.ts"
|
|
4251
|
+
}
|
|
4252
|
+
},
|
|
4253
|
+
{
|
|
4254
|
+
"kind": "js",
|
|
4255
|
+
"name": "invokeArgsFor",
|
|
4256
|
+
"declaration": {
|
|
4257
|
+
"name": "invokeArgsFor",
|
|
4258
|
+
"module": "src/autopilot/autopilot-session.ts"
|
|
4259
|
+
}
|
|
4260
|
+
},
|
|
4392
4261
|
{
|
|
4393
4262
|
"kind": "js",
|
|
4394
4263
|
"name": "fieldsExample",
|
|
@@ -5061,235 +4930,285 @@
|
|
|
5061
4930
|
},
|
|
5062
4931
|
{
|
|
5063
4932
|
"kind": "javascript-module",
|
|
5064
|
-
"path": "src/
|
|
4933
|
+
"path": "src/channel/ai-activity-bus.ts",
|
|
5065
4934
|
"declarations": [
|
|
5066
4935
|
{
|
|
5067
|
-
"kind": "
|
|
5068
|
-
"name": "
|
|
5069
|
-
"
|
|
5070
|
-
|
|
5071
|
-
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
"kind": "js",
|
|
5075
|
-
"name": "CachePolicy",
|
|
5076
|
-
"declaration": {
|
|
5077
|
-
"name": "CachePolicy",
|
|
5078
|
-
"module": "src/config/config.ts"
|
|
5079
|
-
}
|
|
5080
|
-
},
|
|
5081
|
-
{
|
|
5082
|
-
"kind": "js",
|
|
5083
|
-
"name": "ChatFallback",
|
|
5084
|
-
"declaration": {
|
|
5085
|
-
"name": "ChatFallback",
|
|
5086
|
-
"module": "src/config/config.ts"
|
|
5087
|
-
}
|
|
5088
|
-
},
|
|
5089
|
-
{
|
|
5090
|
-
"kind": "js",
|
|
5091
|
-
"name": "ChatInputDuringExecutionMode",
|
|
5092
|
-
"declaration": {
|
|
5093
|
-
"name": "ChatInputDuringExecutionMode",
|
|
5094
|
-
"module": "src/config/config.ts"
|
|
5095
|
-
}
|
|
5096
|
-
},
|
|
5097
|
-
{
|
|
5098
|
-
"kind": "js",
|
|
5099
|
-
"name": "ChatThinkingPolicy",
|
|
5100
|
-
"declaration": {
|
|
5101
|
-
"name": "ChatThinkingPolicy",
|
|
5102
|
-
"module": "src/config/config.ts"
|
|
5103
|
-
}
|
|
5104
|
-
},
|
|
5105
|
-
{
|
|
5106
|
-
"kind": "js",
|
|
5107
|
-
"name": "ChatToolChoice",
|
|
5108
|
-
"declaration": {
|
|
5109
|
-
"name": "ChatToolChoice",
|
|
5110
|
-
"module": "src/config/config.ts"
|
|
5111
|
-
}
|
|
4936
|
+
"kind": "variable",
|
|
4937
|
+
"name": "NOOP_ACTIVITY_BUS",
|
|
4938
|
+
"type": {
|
|
4939
|
+
"text": "ActivityBus"
|
|
4940
|
+
},
|
|
4941
|
+
"default": "{ publish: () => {} }",
|
|
4942
|
+
"description": "No-op ActivityBus. The default when no bus is injected (Node, tests, headless\nserver use) — publishing goes nowhere and nothing is left open to tear down."
|
|
5112
4943
|
},
|
|
5113
4944
|
{
|
|
5114
|
-
"kind": "
|
|
5115
|
-
"
|
|
5116
|
-
"
|
|
5117
|
-
|
|
5118
|
-
"module": "src/config/config.ts"
|
|
5119
|
-
}
|
|
5120
|
-
}
|
|
5121
|
-
]
|
|
5122
|
-
},
|
|
5123
|
-
{
|
|
5124
|
-
"kind": "javascript-module",
|
|
5125
|
-
"path": "src/config/define-stateful-agent.ts",
|
|
5126
|
-
"declarations": [
|
|
5127
|
-
{
|
|
5128
|
-
"kind": "function",
|
|
5129
|
-
"name": "restoreMachine",
|
|
5130
|
-
"return": {
|
|
5131
|
-
"type": {
|
|
5132
|
-
"text": "void"
|
|
5133
|
-
}
|
|
5134
|
-
},
|
|
5135
|
-
"parameters": [
|
|
4945
|
+
"kind": "class",
|
|
4946
|
+
"description": "Typed in-process event bus for AI assistant activity events.\n\nDispatches events synchronously to all local subscribers in the same JS module instance\n(i.e. the same browser tab). Events listed in `crossTabEvents` are additionally forwarded\nvia a shared `BroadcastChannel` so that other tabs on the same origin receive them.",
|
|
4947
|
+
"name": "AgenticActivityBus",
|
|
4948
|
+
"members": [
|
|
5136
4949
|
{
|
|
5137
|
-
"
|
|
4950
|
+
"kind": "field",
|
|
4951
|
+
"name": "subscribers",
|
|
4952
|
+
"privacy": "private",
|
|
4953
|
+
"readonly": true,
|
|
4954
|
+
"default": "new Map<string, Set<AnyHandler>>()"
|
|
4955
|
+
},
|
|
4956
|
+
{
|
|
4957
|
+
"kind": "field",
|
|
4958
|
+
"name": "crossTabEvents",
|
|
5138
4959
|
"type": {
|
|
5139
|
-
"text": "
|
|
4960
|
+
"text": "Set<string>"
|
|
5140
4961
|
},
|
|
5141
|
-
"
|
|
4962
|
+
"privacy": "private",
|
|
4963
|
+
"readonly": true,
|
|
4964
|
+
"default": "new Set(config?.crossTabEvents ?? [])"
|
|
5142
4965
|
},
|
|
5143
4966
|
{
|
|
5144
|
-
"
|
|
4967
|
+
"kind": "field",
|
|
4968
|
+
"name": "channelNameFactory",
|
|
5145
4969
|
"type": {
|
|
5146
|
-
"text": "
|
|
4970
|
+
"text": "() => string | undefined"
|
|
5147
4971
|
},
|
|
5148
|
-
"
|
|
4972
|
+
"privacy": "private",
|
|
4973
|
+
"readonly": true
|
|
5149
4974
|
},
|
|
5150
4975
|
{
|
|
5151
|
-
"
|
|
5152
|
-
"
|
|
5153
|
-
"description": "the property the machine occupies in the snapshot; defaults to\n`'machine'` to match the conventional `{ machine }` state bag."
|
|
5154
|
-
}
|
|
5155
|
-
],
|
|
5156
|
-
"description": "Restore a foundation-state-machine instance from a snapshot produced by the\ndefault serializer (or `machine.getPersistedSnapshot()`). Call inside a\nstateful agent's `init` to resume the machine in its exact prior place:\n\n```ts\ninit: ({ restored }) => {\n const machine = new MyMachine();\n restoreMachine(machine, restored); // resume, or no-op on a fresh start\n return { machine };\n}\n```\n\nNo-ops when there is nothing to restore (a fresh session), leaving the\nfreshly-constructed machine in its initial state."
|
|
5157
|
-
},
|
|
5158
|
-
{
|
|
5159
|
-
"kind": "function",
|
|
5160
|
-
"name": "defineStatefulAgent",
|
|
5161
|
-
"return": {
|
|
5162
|
-
"type": {
|
|
5163
|
-
"text": "AgentConfig"
|
|
5164
|
-
}
|
|
5165
|
-
},
|
|
5166
|
-
"parameters": [
|
|
5167
|
-
{
|
|
5168
|
-
"name": "opts",
|
|
4976
|
+
"kind": "field",
|
|
4977
|
+
"name": "channel",
|
|
5169
4978
|
"type": {
|
|
5170
|
-
"text": "
|
|
5171
|
-
}
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
"description": "Build an `AgentConfig` whose `systemPrompt`, `toolDefinitions`, and tool\nhandlers all close over a long-lived state object created on activation.\n\nThe framework wires the lifecycle: `init` on `onActivate`, `dispose` on\n`onDeactivate`. State is held inside the helper's closure — never exposed on\nthe resulting `AgentConfig` — so the redux serializer doesn't see it."
|
|
5175
|
-
},
|
|
5176
|
-
{
|
|
5177
|
-
"kind": "function",
|
|
5178
|
-
"name": "defineAutopilot",
|
|
5179
|
-
"return": {
|
|
5180
|
-
"type": {
|
|
5181
|
-
"text": "AutopilotConfig<S>"
|
|
5182
|
-
}
|
|
5183
|
-
},
|
|
5184
|
-
"parameters": [
|
|
4979
|
+
"text": "BroadcastChannel | undefined"
|
|
4980
|
+
},
|
|
4981
|
+
"privacy": "private"
|
|
4982
|
+
},
|
|
5185
4983
|
{
|
|
5186
|
-
"
|
|
4984
|
+
"kind": "field",
|
|
4985
|
+
"name": "channelInitialised",
|
|
5187
4986
|
"type": {
|
|
5188
|
-
"text": "
|
|
5189
|
-
}
|
|
5190
|
-
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5196
|
-
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
4987
|
+
"text": "boolean"
|
|
4988
|
+
},
|
|
4989
|
+
"privacy": "private",
|
|
4990
|
+
"default": "false"
|
|
4991
|
+
},
|
|
4992
|
+
{
|
|
4993
|
+
"kind": "method",
|
|
4994
|
+
"name": "ensureChannel",
|
|
4995
|
+
"privacy": "private",
|
|
4996
|
+
"return": {
|
|
4997
|
+
"type": {
|
|
4998
|
+
"text": "void"
|
|
4999
|
+
}
|
|
5000
|
+
},
|
|
5001
|
+
"description": "Lazily open the cross-tab `BroadcastChannel` on first use. Deferred (rather than\ncreated in the constructor) so that importing this module, or constructing the bus\noff-browser (Node, tests, headless server), never opens a live channel or reads\n`sessionStorage` — both would keep a Node event loop alive and hang the process.\nCross-tab forwarding is inherently browser-only, so channel creation is gated on a\nbrowser environment; elsewhere the bus stays purely in-process."
|
|
5002
|
+
},
|
|
5003
|
+
{
|
|
5004
|
+
"kind": "method",
|
|
5005
|
+
"name": "subscribe",
|
|
5006
|
+
"return": {
|
|
5007
|
+
"type": {
|
|
5008
|
+
"text": "() => void"
|
|
5009
|
+
}
|
|
5010
|
+
},
|
|
5011
|
+
"parameters": [
|
|
5012
|
+
{
|
|
5013
|
+
"name": "type",
|
|
5014
|
+
"type": {
|
|
5015
|
+
"text": "K"
|
|
5016
|
+
}
|
|
5017
|
+
},
|
|
5018
|
+
{
|
|
5019
|
+
"name": "handler",
|
|
5020
|
+
"type": {
|
|
5021
|
+
"text": "(detail: AgenticActivityEvents[K]) => void"
|
|
5022
|
+
}
|
|
5023
|
+
}
|
|
5024
|
+
],
|
|
5025
|
+
"description": "Subscribe to an event. Returns an unsubscribe function — call it in\n`disconnectedCallback` to avoid memory leaks."
|
|
5026
|
+
},
|
|
5027
|
+
{
|
|
5028
|
+
"kind": "method",
|
|
5029
|
+
"name": "publish",
|
|
5030
|
+
"return": {
|
|
5031
|
+
"type": {
|
|
5032
|
+
"text": "void"
|
|
5033
|
+
}
|
|
5034
|
+
},
|
|
5035
|
+
"parameters": [
|
|
5036
|
+
{
|
|
5037
|
+
"name": "type",
|
|
5038
|
+
"type": {
|
|
5039
|
+
"text": "K"
|
|
5040
|
+
}
|
|
5041
|
+
},
|
|
5042
|
+
{
|
|
5043
|
+
"name": "detail",
|
|
5044
|
+
"type": {
|
|
5045
|
+
"text": "AgenticActivityEvents[K]"
|
|
5046
|
+
}
|
|
5047
|
+
}
|
|
5048
|
+
],
|
|
5049
|
+
"description": "Publish an event to all local subscribers and, if configured, to other tabs\nvia BroadcastChannel."
|
|
5050
|
+
},
|
|
5051
|
+
{
|
|
5052
|
+
"kind": "method",
|
|
5053
|
+
"name": "addCrossTabEvent",
|
|
5054
|
+
"return": {
|
|
5055
|
+
"type": {
|
|
5056
|
+
"text": "void"
|
|
5057
|
+
}
|
|
5058
|
+
},
|
|
5059
|
+
"parameters": [
|
|
5060
|
+
{
|
|
5061
|
+
"name": "type",
|
|
5062
|
+
"type": {
|
|
5063
|
+
"text": "keyof AgenticActivityEvents"
|
|
5064
|
+
}
|
|
5065
|
+
}
|
|
5066
|
+
],
|
|
5067
|
+
"description": "Add an event type to the cross-tab forwarding set at runtime.\nMust be called before the first AgenticActivityBus.publish of that event type."
|
|
5068
|
+
},
|
|
5069
|
+
{
|
|
5070
|
+
"kind": "method",
|
|
5071
|
+
"name": "close",
|
|
5072
|
+
"return": {
|
|
5073
|
+
"type": {
|
|
5074
|
+
"text": "void"
|
|
5075
|
+
}
|
|
5076
|
+
},
|
|
5077
|
+
"description": "Close the underlying BroadcastChannel. Call once on application teardown if needed."
|
|
5078
|
+
},
|
|
5079
|
+
{
|
|
5080
|
+
"kind": "method",
|
|
5081
|
+
"name": "notifyLocal",
|
|
5082
|
+
"privacy": "private",
|
|
5083
|
+
"return": {
|
|
5084
|
+
"type": {
|
|
5085
|
+
"text": "void"
|
|
5086
|
+
}
|
|
5087
|
+
},
|
|
5088
|
+
"parameters": [
|
|
5089
|
+
{
|
|
5090
|
+
"name": "type",
|
|
5091
|
+
"type": {
|
|
5092
|
+
"text": "string"
|
|
5093
|
+
}
|
|
5094
|
+
},
|
|
5095
|
+
{
|
|
5096
|
+
"name": "detail",
|
|
5097
|
+
"type": {
|
|
5098
|
+
"text": "unknown"
|
|
5099
|
+
}
|
|
5100
|
+
}
|
|
5101
|
+
]
|
|
5102
|
+
}
|
|
5103
|
+
]
|
|
5234
5104
|
},
|
|
5235
5105
|
{
|
|
5236
5106
|
"kind": "variable",
|
|
5237
|
-
"name": "
|
|
5238
|
-
"
|
|
5239
|
-
|
|
5240
|
-
},
|
|
5241
|
-
"default": "{\n name: 'Assistant',\n fallback: true,\n systemPrompt: `You are a concise assistant. The user's request is outside your scope. The available specialists are: {{agents}}.\n\n{{unroutable}}\n\nAnswer in a single short sentence. Do not elaborate.`,\n}",
|
|
5242
|
-
"description": "A brief, professional fallback agent. States what is available without\nelaboration. The `{{agents}}` placeholder is replaced at runtime by\n`OrchestratingDriver` with the generated specialist list.\n\nThe `{{unroutable}}` placeholder positions `UNROUTABLE_INSTRUCTION` — the framework's\ninstruction for a substantive request no specialist covers, which is otherwise APPENDED to a\nstring-form prompt. Positioned rather than appended for one reason: this preset's whole point is\nbrevity, and appended text would be the last thing the model reads. Putting the block above the\nbrevity rule leaves \"a single short sentence\" with the recency, so the two compose instead of\ncompeting. A prompt whose tone rules matter should do the same."
|
|
5107
|
+
"name": "agenticActivityBus",
|
|
5108
|
+
"default": "new AgenticActivityBus({\n crossTabEvents: ['halo-start', 'halo-stop', 'tool-loop-start', 'tool-loop-end'],\n // Lazy: the tab-scoped name (and its `sessionStorage` read) is computed on first\n // cross-tab use in a browser, not at module-eval — so importing this module is\n // side-effect-free and Node/test-safe.\n channelNameFactory: () => getTabScopedChannelName('foundation-ai-activity'),\n})",
|
|
5109
|
+
"description": "Pre-instantiated singleton event bus for AI assistant activity.\n\n- `halo-start` / `halo-stop` are forwarded via a tab-scoped `BroadcastChannel` so that\n popout windows opened from this tab show halo animations, while remaining isolated from\n unrelated tabs on the same origin (tab-scoped channel name).\n- `tool-loop-start` / `tool-loop-end` are cross-tab for the same reason: they describe the\n assistant's lifecycle (a turn beginning / ending), and the most common subscribers\n (workspace transitions, post-turn deferred recomputation, UI gates tied to the assistant\n being idle) need the event regardless of whether the user is interacting with the chat\n in the main tab or a popout window. Tab-local-only telemetry can subscribe and filter.\n- `chat-popout` / `chat-popin` are in-memory only — they must only affect the tab where the\n user clicked."
|
|
5243
5110
|
}
|
|
5244
5111
|
],
|
|
5245
5112
|
"exports": [
|
|
5246
5113
|
{
|
|
5247
5114
|
"kind": "js",
|
|
5248
|
-
"name": "
|
|
5115
|
+
"name": "NOOP_ACTIVITY_BUS",
|
|
5249
5116
|
"declaration": {
|
|
5250
|
-
"name": "
|
|
5251
|
-
"module": "src/
|
|
5117
|
+
"name": "NOOP_ACTIVITY_BUS",
|
|
5118
|
+
"module": "src/channel/ai-activity-bus.ts"
|
|
5252
5119
|
}
|
|
5253
5120
|
},
|
|
5254
5121
|
{
|
|
5255
5122
|
"kind": "js",
|
|
5256
|
-
"name": "
|
|
5123
|
+
"name": "AgenticActivityBus",
|
|
5257
5124
|
"declaration": {
|
|
5258
|
-
"name": "
|
|
5259
|
-
"module": "src/
|
|
5125
|
+
"name": "AgenticActivityBus",
|
|
5126
|
+
"module": "src/channel/ai-activity-bus.ts"
|
|
5127
|
+
}
|
|
5128
|
+
},
|
|
5129
|
+
{
|
|
5130
|
+
"kind": "js",
|
|
5131
|
+
"name": "agenticActivityBus",
|
|
5132
|
+
"declaration": {
|
|
5133
|
+
"name": "agenticActivityBus",
|
|
5134
|
+
"module": "src/channel/ai-activity-bus.ts"
|
|
5260
5135
|
}
|
|
5261
5136
|
}
|
|
5262
5137
|
]
|
|
5263
5138
|
},
|
|
5264
5139
|
{
|
|
5265
5140
|
"kind": "javascript-module",
|
|
5266
|
-
"path": "src/
|
|
5141
|
+
"path": "src/channel/ai-activity-channel.ts",
|
|
5267
5142
|
"declarations": [],
|
|
5143
|
+
"exports": []
|
|
5144
|
+
},
|
|
5145
|
+
{
|
|
5146
|
+
"kind": "javascript-module",
|
|
5147
|
+
"path": "src/channel/autopilot-needs-user.ts",
|
|
5148
|
+
"declarations": [
|
|
5149
|
+
{
|
|
5150
|
+
"kind": "function",
|
|
5151
|
+
"name": "setAutopilotNeedsUser",
|
|
5152
|
+
"return": {
|
|
5153
|
+
"type": {
|
|
5154
|
+
"text": "void"
|
|
5155
|
+
}
|
|
5156
|
+
},
|
|
5157
|
+
"parameters": [
|
|
5158
|
+
{
|
|
5159
|
+
"name": "sessionKey",
|
|
5160
|
+
"type": {
|
|
5161
|
+
"text": "string"
|
|
5162
|
+
}
|
|
5163
|
+
},
|
|
5164
|
+
{
|
|
5165
|
+
"name": "needsUser",
|
|
5166
|
+
"type": {
|
|
5167
|
+
"text": "boolean"
|
|
5168
|
+
}
|
|
5169
|
+
}
|
|
5170
|
+
],
|
|
5171
|
+
"description": "Set it for one session, announcing `autopilot-needs-user` when it changes."
|
|
5172
|
+
},
|
|
5173
|
+
{
|
|
5174
|
+
"kind": "function",
|
|
5175
|
+
"name": "autopilotNeedsUser",
|
|
5176
|
+
"return": {
|
|
5177
|
+
"type": {
|
|
5178
|
+
"text": "boolean"
|
|
5179
|
+
}
|
|
5180
|
+
},
|
|
5181
|
+
"parameters": [
|
|
5182
|
+
{
|
|
5183
|
+
"name": "sessionKey",
|
|
5184
|
+
"optional": true,
|
|
5185
|
+
"type": {
|
|
5186
|
+
"text": "string"
|
|
5187
|
+
}
|
|
5188
|
+
}
|
|
5189
|
+
],
|
|
5190
|
+
"description": "Whether a session has something waiting on the person — or, without a key (a bubble that cannot\ntell which assistant it holds), whether any session has."
|
|
5191
|
+
}
|
|
5192
|
+
],
|
|
5268
5193
|
"exports": [
|
|
5269
5194
|
{
|
|
5270
5195
|
"kind": "js",
|
|
5271
|
-
"name": "
|
|
5196
|
+
"name": "setAutopilotNeedsUser",
|
|
5272
5197
|
"declaration": {
|
|
5273
|
-
"name": "
|
|
5274
|
-
"
|
|
5198
|
+
"name": "setAutopilotNeedsUser",
|
|
5199
|
+
"module": "src/channel/autopilot-needs-user.ts"
|
|
5275
5200
|
}
|
|
5276
5201
|
},
|
|
5277
5202
|
{
|
|
5278
5203
|
"kind": "js",
|
|
5279
|
-
"name": "
|
|
5204
|
+
"name": "autopilotNeedsUser",
|
|
5280
5205
|
"declaration": {
|
|
5281
|
-
"name": "
|
|
5282
|
-
"
|
|
5206
|
+
"name": "autopilotNeedsUser",
|
|
5207
|
+
"module": "src/channel/autopilot-needs-user.ts"
|
|
5283
5208
|
}
|
|
5284
5209
|
}
|
|
5285
5210
|
]
|
|
5286
5211
|
},
|
|
5287
|
-
{
|
|
5288
|
-
"kind": "javascript-module",
|
|
5289
|
-
"path": "src/config/validate-providers.ts",
|
|
5290
|
-
"declarations": [],
|
|
5291
|
-
"exports": []
|
|
5292
|
-
},
|
|
5293
5212
|
{
|
|
5294
5213
|
"kind": "javascript-module",
|
|
5295
5214
|
"path": "src/components/flowing-waves-indicator.ts",
|
|
@@ -5816,35 +5735,266 @@
|
|
|
5816
5735
|
},
|
|
5817
5736
|
{
|
|
5818
5737
|
"kind": "javascript-module",
|
|
5819
|
-
"path": "src/
|
|
5820
|
-
"declarations": [],
|
|
5821
|
-
"exports": []
|
|
5822
|
-
},
|
|
5823
|
-
{
|
|
5824
|
-
"kind": "javascript-module",
|
|
5825
|
-
"path": "src/genesis/config.ts",
|
|
5738
|
+
"path": "src/config/config.ts",
|
|
5826
5739
|
"declarations": [
|
|
5827
|
-
{
|
|
5828
|
-
"kind": "variable",
|
|
5829
|
-
"name": "DEFAULT_MAX_ROWS",
|
|
5830
|
-
"type": {
|
|
5831
|
-
"text": "number"
|
|
5832
|
-
},
|
|
5833
|
-
"default": "50",
|
|
5834
|
-
"description": "The default read cap, and the ceiling the config may raise it to."
|
|
5835
|
-
},
|
|
5836
|
-
{
|
|
5837
|
-
"kind": "variable",
|
|
5838
|
-
"name": "MAX_ROWS_CEILING",
|
|
5839
|
-
"type": {
|
|
5840
|
-
"text": "number"
|
|
5841
|
-
},
|
|
5842
|
-
"default": "1000"
|
|
5843
|
-
},
|
|
5844
5740
|
{
|
|
5845
5741
|
"kind": "function",
|
|
5846
|
-
"name": "
|
|
5847
|
-
"
|
|
5742
|
+
"name": "defineAgent",
|
|
5743
|
+
"description": "Identity helper that infers the narrowest possible type for an agent config,\npreserving string literal types (including `name`) without requiring `as const`.\n\nUse this when you need `typeof myAgent` to carry the literal `name` type —\nfor example, when wiring `ChatToolHandlers<typeof myAgent>`.\n\n```ts\nconst myAgent = defineAgent({ name: 'my_agent', ... });\ntype Handlers = ChatToolHandlers<typeof myAgent>;\n// requestSubAgent name param is now typed as 'my_agent'\n```"
|
|
5744
|
+
}
|
|
5745
|
+
],
|
|
5746
|
+
"exports": [
|
|
5747
|
+
{
|
|
5748
|
+
"kind": "js",
|
|
5749
|
+
"name": "CachePolicy",
|
|
5750
|
+
"declaration": {
|
|
5751
|
+
"name": "CachePolicy",
|
|
5752
|
+
"module": "src/config/config.ts"
|
|
5753
|
+
}
|
|
5754
|
+
},
|
|
5755
|
+
{
|
|
5756
|
+
"kind": "js",
|
|
5757
|
+
"name": "ChatFallback",
|
|
5758
|
+
"declaration": {
|
|
5759
|
+
"name": "ChatFallback",
|
|
5760
|
+
"module": "src/config/config.ts"
|
|
5761
|
+
}
|
|
5762
|
+
},
|
|
5763
|
+
{
|
|
5764
|
+
"kind": "js",
|
|
5765
|
+
"name": "ChatInputDuringExecutionMode",
|
|
5766
|
+
"declaration": {
|
|
5767
|
+
"name": "ChatInputDuringExecutionMode",
|
|
5768
|
+
"module": "src/config/config.ts"
|
|
5769
|
+
}
|
|
5770
|
+
},
|
|
5771
|
+
{
|
|
5772
|
+
"kind": "js",
|
|
5773
|
+
"name": "ChatThinkingPolicy",
|
|
5774
|
+
"declaration": {
|
|
5775
|
+
"name": "ChatThinkingPolicy",
|
|
5776
|
+
"module": "src/config/config.ts"
|
|
5777
|
+
}
|
|
5778
|
+
},
|
|
5779
|
+
{
|
|
5780
|
+
"kind": "js",
|
|
5781
|
+
"name": "ChatToolChoice",
|
|
5782
|
+
"declaration": {
|
|
5783
|
+
"name": "ChatToolChoice",
|
|
5784
|
+
"module": "src/config/config.ts"
|
|
5785
|
+
}
|
|
5786
|
+
},
|
|
5787
|
+
{
|
|
5788
|
+
"kind": "js",
|
|
5789
|
+
"name": "defineAgent",
|
|
5790
|
+
"declaration": {
|
|
5791
|
+
"name": "defineAgent",
|
|
5792
|
+
"module": "src/config/config.ts"
|
|
5793
|
+
}
|
|
5794
|
+
}
|
|
5795
|
+
]
|
|
5796
|
+
},
|
|
5797
|
+
{
|
|
5798
|
+
"kind": "javascript-module",
|
|
5799
|
+
"path": "src/config/define-stateful-agent.ts",
|
|
5800
|
+
"declarations": [
|
|
5801
|
+
{
|
|
5802
|
+
"kind": "function",
|
|
5803
|
+
"name": "restoreMachine",
|
|
5804
|
+
"return": {
|
|
5805
|
+
"type": {
|
|
5806
|
+
"text": "void"
|
|
5807
|
+
}
|
|
5808
|
+
},
|
|
5809
|
+
"parameters": [
|
|
5810
|
+
{
|
|
5811
|
+
"name": "machine",
|
|
5812
|
+
"type": {
|
|
5813
|
+
"text": "{ stop: () => void; start: (options?: { state?: unknown }) => void }"
|
|
5814
|
+
},
|
|
5815
|
+
"description": "the machine to restore (already constructed/started)."
|
|
5816
|
+
},
|
|
5817
|
+
{
|
|
5818
|
+
"name": "restored",
|
|
5819
|
+
"type": {
|
|
5820
|
+
"text": "unknown"
|
|
5821
|
+
},
|
|
5822
|
+
"description": "the agent's serialized image (`ctx.restored` in `init`)."
|
|
5823
|
+
},
|
|
5824
|
+
{
|
|
5825
|
+
"name": "key",
|
|
5826
|
+
"default": "'machine'",
|
|
5827
|
+
"description": "the property the machine occupies in the snapshot; defaults to\n`'machine'` to match the conventional `{ machine }` state bag."
|
|
5828
|
+
}
|
|
5829
|
+
],
|
|
5830
|
+
"description": "Restore a foundation-state-machine instance from a snapshot produced by the\ndefault serializer (or `machine.getPersistedSnapshot()`). Call inside a\nstateful agent's `init` to resume the machine in its exact prior place:\n\n```ts\ninit: ({ restored }) => {\n const machine = new MyMachine();\n restoreMachine(machine, restored); // resume, or no-op on a fresh start\n return { machine };\n}\n```\n\nNo-ops when there is nothing to restore (a fresh session), leaving the\nfreshly-constructed machine in its initial state."
|
|
5831
|
+
},
|
|
5832
|
+
{
|
|
5833
|
+
"kind": "function",
|
|
5834
|
+
"name": "defineStatefulAgent",
|
|
5835
|
+
"return": {
|
|
5836
|
+
"type": {
|
|
5837
|
+
"text": "AgentConfig"
|
|
5838
|
+
}
|
|
5839
|
+
},
|
|
5840
|
+
"parameters": [
|
|
5841
|
+
{
|
|
5842
|
+
"name": "opts",
|
|
5843
|
+
"type": {
|
|
5844
|
+
"text": "StatefulAgentInit<S>"
|
|
5845
|
+
}
|
|
5846
|
+
}
|
|
5847
|
+
],
|
|
5848
|
+
"description": "Build an `AgentConfig` whose `systemPrompt`, `toolDefinitions`, and tool\nhandlers all close over a long-lived state object created on activation.\n\nThe framework wires the lifecycle: `init` on `onActivate`, `dispose` on\n`onDeactivate`. State is held inside the helper's closure — never exposed on\nthe resulting `AgentConfig` — so the redux serializer doesn't see it."
|
|
5849
|
+
},
|
|
5850
|
+
{
|
|
5851
|
+
"kind": "function",
|
|
5852
|
+
"name": "defineAutopilot",
|
|
5853
|
+
"return": {
|
|
5854
|
+
"type": {
|
|
5855
|
+
"text": "AutopilotConfig<S>"
|
|
5856
|
+
}
|
|
5857
|
+
},
|
|
5858
|
+
"parameters": [
|
|
5859
|
+
{
|
|
5860
|
+
"name": "config",
|
|
5861
|
+
"type": {
|
|
5862
|
+
"text": "AutopilotConfig<S>"
|
|
5863
|
+
}
|
|
5864
|
+
}
|
|
5865
|
+
],
|
|
5866
|
+
"description": "Define an autopilot for a stateful agent whose state is `S` (GENC-1660). An identity function\nthat exists for its type: the resolvers get `S`, and the result goes on `defineStatefulAgent`'s\n`autopilot` option."
|
|
5867
|
+
}
|
|
5868
|
+
],
|
|
5869
|
+
"exports": [
|
|
5870
|
+
{
|
|
5871
|
+
"kind": "js",
|
|
5872
|
+
"name": "restoreMachine",
|
|
5873
|
+
"declaration": {
|
|
5874
|
+
"name": "restoreMachine",
|
|
5875
|
+
"module": "src/config/define-stateful-agent.ts"
|
|
5876
|
+
}
|
|
5877
|
+
},
|
|
5878
|
+
{
|
|
5879
|
+
"kind": "js",
|
|
5880
|
+
"name": "defineStatefulAgent",
|
|
5881
|
+
"declaration": {
|
|
5882
|
+
"name": "defineStatefulAgent",
|
|
5883
|
+
"module": "src/config/define-stateful-agent.ts"
|
|
5884
|
+
}
|
|
5885
|
+
},
|
|
5886
|
+
{
|
|
5887
|
+
"kind": "js",
|
|
5888
|
+
"name": "defineAutopilot",
|
|
5889
|
+
"declaration": {
|
|
5890
|
+
"name": "defineAutopilot",
|
|
5891
|
+
"module": "src/config/define-stateful-agent.ts"
|
|
5892
|
+
}
|
|
5893
|
+
}
|
|
5894
|
+
]
|
|
5895
|
+
},
|
|
5896
|
+
{
|
|
5897
|
+
"kind": "javascript-module",
|
|
5898
|
+
"path": "src/config/fallback-agents.ts",
|
|
5899
|
+
"declarations": [
|
|
5900
|
+
{
|
|
5901
|
+
"kind": "variable",
|
|
5902
|
+
"name": "friendlyFallbackAgent",
|
|
5903
|
+
"type": {
|
|
5904
|
+
"text": "FallbackAgentConfig"
|
|
5905
|
+
},
|
|
5906
|
+
"default": "{\n name: 'Assistant',\n fallback: true,\n systemPrompt: `You are a warm, friendly assistant. For general conversation like \"Hi\" or \"How are you\", you can have a friendly chat. For anything more complex, you cannot directly help, but you can explain what specialists are available. The available specialists are:\\n\\n{{agents}}\\n\\nPolitely let the user know what you can help with and invite them to rephrase their request if it is outside your scope.`,\n}",
|
|
5907
|
+
"description": "A warm, conversational fallback agent. Acknowledges it can't help directly,\nexplains what the available specialists can do, and invites the user to retry.\n\nThe system prompt is generated at runtime by `OrchestratingDriver` from the\nspecialist list — no manual authoring required."
|
|
5908
|
+
},
|
|
5909
|
+
{
|
|
5910
|
+
"kind": "variable",
|
|
5911
|
+
"name": "strictFallbackAgent",
|
|
5912
|
+
"type": {
|
|
5913
|
+
"text": "FallbackAgentConfig"
|
|
5914
|
+
},
|
|
5915
|
+
"default": "{\n name: 'Assistant',\n fallback: true,\n systemPrompt: `You are a concise assistant. The user's request is outside your scope. The available specialists are: {{agents}}.\n\n{{unroutable}}\n\nAnswer in a single short sentence. Do not elaborate.`,\n}",
|
|
5916
|
+
"description": "A brief, professional fallback agent. States what is available without\nelaboration. The `{{agents}}` placeholder is replaced at runtime by\n`OrchestratingDriver` with the generated specialist list.\n\nThe `{{unroutable}}` placeholder positions `UNROUTABLE_INSTRUCTION` — the framework's\ninstruction for a substantive request no specialist covers, which is otherwise APPENDED to a\nstring-form prompt. Positioned rather than appended for one reason: this preset's whole point is\nbrevity, and appended text would be the last thing the model reads. Putting the block above the\nbrevity rule leaves \"a single short sentence\" with the recency, so the two compose instead of\ncompeting. A prompt whose tone rules matter should do the same."
|
|
5917
|
+
}
|
|
5918
|
+
],
|
|
5919
|
+
"exports": [
|
|
5920
|
+
{
|
|
5921
|
+
"kind": "js",
|
|
5922
|
+
"name": "friendlyFallbackAgent",
|
|
5923
|
+
"declaration": {
|
|
5924
|
+
"name": "friendlyFallbackAgent",
|
|
5925
|
+
"module": "src/config/fallback-agents.ts"
|
|
5926
|
+
}
|
|
5927
|
+
},
|
|
5928
|
+
{
|
|
5929
|
+
"kind": "js",
|
|
5930
|
+
"name": "strictFallbackAgent",
|
|
5931
|
+
"declaration": {
|
|
5932
|
+
"name": "strictFallbackAgent",
|
|
5933
|
+
"module": "src/config/fallback-agents.ts"
|
|
5934
|
+
}
|
|
5935
|
+
}
|
|
5936
|
+
]
|
|
5937
|
+
},
|
|
5938
|
+
{
|
|
5939
|
+
"kind": "javascript-module",
|
|
5940
|
+
"path": "src/config/index.ts",
|
|
5941
|
+
"declarations": [],
|
|
5942
|
+
"exports": [
|
|
5943
|
+
{
|
|
5944
|
+
"kind": "js",
|
|
5945
|
+
"name": "*",
|
|
5946
|
+
"declaration": {
|
|
5947
|
+
"name": "*",
|
|
5948
|
+
"package": "./config"
|
|
5949
|
+
}
|
|
5950
|
+
},
|
|
5951
|
+
{
|
|
5952
|
+
"kind": "js",
|
|
5953
|
+
"name": "*",
|
|
5954
|
+
"declaration": {
|
|
5955
|
+
"name": "*",
|
|
5956
|
+
"package": "./fallback-agents"
|
|
5957
|
+
}
|
|
5958
|
+
}
|
|
5959
|
+
]
|
|
5960
|
+
},
|
|
5961
|
+
{
|
|
5962
|
+
"kind": "javascript-module",
|
|
5963
|
+
"path": "src/config/validate-providers.ts",
|
|
5964
|
+
"declarations": [],
|
|
5965
|
+
"exports": []
|
|
5966
|
+
},
|
|
5967
|
+
{
|
|
5968
|
+
"kind": "javascript-module",
|
|
5969
|
+
"path": "src/genesis/calendar.ts",
|
|
5970
|
+
"declarations": [],
|
|
5971
|
+
"exports": []
|
|
5972
|
+
},
|
|
5973
|
+
{
|
|
5974
|
+
"kind": "javascript-module",
|
|
5975
|
+
"path": "src/genesis/config.ts",
|
|
5976
|
+
"declarations": [
|
|
5977
|
+
{
|
|
5978
|
+
"kind": "variable",
|
|
5979
|
+
"name": "DEFAULT_MAX_ROWS",
|
|
5980
|
+
"type": {
|
|
5981
|
+
"text": "number"
|
|
5982
|
+
},
|
|
5983
|
+
"default": "50",
|
|
5984
|
+
"description": "The default read cap, and the ceiling the config may raise it to."
|
|
5985
|
+
},
|
|
5986
|
+
{
|
|
5987
|
+
"kind": "variable",
|
|
5988
|
+
"name": "MAX_ROWS_CEILING",
|
|
5989
|
+
"type": {
|
|
5990
|
+
"text": "number"
|
|
5991
|
+
},
|
|
5992
|
+
"default": "1000"
|
|
5993
|
+
},
|
|
5994
|
+
{
|
|
5995
|
+
"kind": "function",
|
|
5996
|
+
"name": "toolNameOf",
|
|
5997
|
+
"return": {
|
|
5848
5998
|
"type": {
|
|
5849
5999
|
"text": "string"
|
|
5850
6000
|
}
|
|
@@ -6882,121 +7032,1889 @@
|
|
|
6882
7032
|
},
|
|
6883
7033
|
{
|
|
6884
7034
|
"kind": "javascript-module",
|
|
6885
|
-
"path": "src/genesis/write-payload.ts",
|
|
7035
|
+
"path": "src/genesis/write-payload.ts",
|
|
7036
|
+
"declarations": [
|
|
7037
|
+
{
|
|
7038
|
+
"kind": "function",
|
|
7039
|
+
"name": "buildEventPayload",
|
|
7040
|
+
"return": {
|
|
7041
|
+
"type": {
|
|
7042
|
+
"text": "PayloadResult"
|
|
7043
|
+
}
|
|
7044
|
+
},
|
|
7045
|
+
"parameters": [
|
|
7046
|
+
{
|
|
7047
|
+
"name": "fields",
|
|
7048
|
+
"type": {
|
|
7049
|
+
"text": "readonly GenesisEventField[]"
|
|
7050
|
+
}
|
|
7051
|
+
},
|
|
7052
|
+
{
|
|
7053
|
+
"name": "row",
|
|
7054
|
+
"type": {
|
|
7055
|
+
"text": "unknown"
|
|
7056
|
+
}
|
|
7057
|
+
},
|
|
7058
|
+
{
|
|
7059
|
+
"name": "{ op, preImage, unchecked }",
|
|
7060
|
+
"type": {
|
|
7061
|
+
"text": "BuildPayloadOptions"
|
|
7062
|
+
}
|
|
7063
|
+
}
|
|
7064
|
+
]
|
|
7065
|
+
}
|
|
7066
|
+
],
|
|
7067
|
+
"exports": [
|
|
7068
|
+
{
|
|
7069
|
+
"kind": "js",
|
|
7070
|
+
"name": "buildEventPayload",
|
|
7071
|
+
"declaration": {
|
|
7072
|
+
"name": "buildEventPayload",
|
|
7073
|
+
"module": "src/genesis/write-payload.ts"
|
|
7074
|
+
}
|
|
7075
|
+
}
|
|
7076
|
+
]
|
|
7077
|
+
},
|
|
7078
|
+
{
|
|
7079
|
+
"kind": "javascript-module",
|
|
7080
|
+
"path": "src/genesis/write-plan.ts",
|
|
7081
|
+
"declarations": [
|
|
7082
|
+
{
|
|
7083
|
+
"kind": "variable",
|
|
7084
|
+
"name": "MAX_WRITE_ROWS",
|
|
7085
|
+
"type": {
|
|
7086
|
+
"text": "number"
|
|
7087
|
+
},
|
|
7088
|
+
"default": "25",
|
|
7089
|
+
"description": "A batch a person can actually read before approving it."
|
|
7090
|
+
}
|
|
7091
|
+
],
|
|
7092
|
+
"exports": [
|
|
7093
|
+
{
|
|
7094
|
+
"kind": "js",
|
|
7095
|
+
"name": "MAX_WRITE_ROWS",
|
|
7096
|
+
"declaration": {
|
|
7097
|
+
"name": "MAX_WRITE_ROWS",
|
|
7098
|
+
"module": "src/genesis/write-plan.ts"
|
|
7099
|
+
}
|
|
7100
|
+
}
|
|
7101
|
+
]
|
|
7102
|
+
},
|
|
7103
|
+
{
|
|
7104
|
+
"kind": "javascript-module",
|
|
7105
|
+
"path": "src/genesis/write-tools.ts",
|
|
7106
|
+
"declarations": [
|
|
7107
|
+
{
|
|
7108
|
+
"kind": "function",
|
|
7109
|
+
"name": "createGenesisWriteTools",
|
|
7110
|
+
"return": {
|
|
7111
|
+
"type": {
|
|
7112
|
+
"text": "{\n toolDefinitions: () => Promise<ChatToolDefinition[]>;\n toolHandlers: ChatToolHandlers;\n /**\n * The events that can get a write tool, as far as the config can tell: an event refused for its\n * op, its rowSources entry or a malformed references, or a modify or delete with no row source,\n * is not among them. Their metadata, read when the tools are first listed, can still withhold one.\n */\n writableEvents: readonly string[];\n}"
|
|
7113
|
+
}
|
|
7114
|
+
},
|
|
7115
|
+
"parameters": [
|
|
7116
|
+
{
|
|
7117
|
+
"name": "resources",
|
|
7118
|
+
"type": {
|
|
7119
|
+
"text": "readonly GenesisAiResource[]"
|
|
7120
|
+
}
|
|
7121
|
+
},
|
|
7122
|
+
{
|
|
7123
|
+
"name": "options",
|
|
7124
|
+
"default": "{}",
|
|
7125
|
+
"type": {
|
|
7126
|
+
"text": "GenesisWriteToolsOptions"
|
|
7127
|
+
}
|
|
7128
|
+
}
|
|
7129
|
+
],
|
|
7130
|
+
"description": "Builds the assistant's write tools from an app's event resources."
|
|
7131
|
+
}
|
|
7132
|
+
],
|
|
7133
|
+
"exports": [
|
|
7134
|
+
{
|
|
7135
|
+
"kind": "js",
|
|
7136
|
+
"name": "createGenesisWriteTools",
|
|
7137
|
+
"declaration": {
|
|
7138
|
+
"name": "createGenesisWriteTools",
|
|
7139
|
+
"module": "src/genesis/write-tools.ts"
|
|
7140
|
+
}
|
|
7141
|
+
}
|
|
7142
|
+
]
|
|
7143
|
+
},
|
|
7144
|
+
{
|
|
7145
|
+
"kind": "javascript-module",
|
|
7146
|
+
"path": "src/genesis/write-turn.ts",
|
|
7147
|
+
"declarations": [],
|
|
7148
|
+
"exports": []
|
|
7149
|
+
},
|
|
7150
|
+
{
|
|
7151
|
+
"kind": "javascript-module",
|
|
7152
|
+
"path": "src/headless/describe-interaction.ts",
|
|
7153
|
+
"declarations": [
|
|
7154
|
+
{
|
|
7155
|
+
"kind": "function",
|
|
7156
|
+
"name": "describeInteraction",
|
|
7157
|
+
"return": {
|
|
7158
|
+
"type": {
|
|
7159
|
+
"text": "InteractionDescription"
|
|
7160
|
+
}
|
|
7161
|
+
},
|
|
7162
|
+
"parameters": [
|
|
7163
|
+
{
|
|
7164
|
+
"name": "input",
|
|
7165
|
+
"type": {
|
|
7166
|
+
"text": "DescribeInteractionInput"
|
|
7167
|
+
}
|
|
7168
|
+
}
|
|
7169
|
+
],
|
|
7170
|
+
"description": "What the person is being asked, as a compact JSON-serialisable record a model can read and\nanswer (GENC-1660): the same text the autopilot is sent for the decision (`renderDecision`,\nso there is one rendering of a decision, not two), and its actions as data, numbered as that text\nnumbers them, so \"1\" means the same option here and there.\n\nWith no surface — a widget with no controller, or one that has not exposed anything yet — there\nis nothing to act on: `controller` is `false` (or `true` and not `ready`, while a controller that\nwill expose a surface has not yet), `actions` is empty, and `text` is the widget as text alone.\n\nReads the surface fresh each time, so it describes the widget as it is now."
|
|
7171
|
+
}
|
|
7172
|
+
],
|
|
7173
|
+
"exports": [
|
|
7174
|
+
{
|
|
7175
|
+
"kind": "js",
|
|
7176
|
+
"name": "describeInteraction",
|
|
7177
|
+
"declaration": {
|
|
7178
|
+
"name": "describeInteraction",
|
|
7179
|
+
"module": "src/headless/describe-interaction.ts"
|
|
7180
|
+
}
|
|
7181
|
+
}
|
|
7182
|
+
]
|
|
7183
|
+
},
|
|
7184
|
+
{
|
|
7185
|
+
"kind": "javascript-module",
|
|
7186
|
+
"path": "src/headless/headless-debug.ts",
|
|
7187
|
+
"declarations": [
|
|
7188
|
+
{
|
|
7189
|
+
"kind": "function",
|
|
7190
|
+
"name": "headlessMetaSnapshot",
|
|
7191
|
+
"return": {
|
|
7192
|
+
"type": {
|
|
7193
|
+
"text": "DiagnosticEntry"
|
|
7194
|
+
}
|
|
7195
|
+
},
|
|
7196
|
+
"parameters": [
|
|
7197
|
+
{
|
|
7198
|
+
"name": "driver",
|
|
7199
|
+
"type": {
|
|
7200
|
+
"text": "AiDriver"
|
|
7201
|
+
}
|
|
7202
|
+
},
|
|
7203
|
+
{
|
|
7204
|
+
"name": "options",
|
|
7205
|
+
"default": "{}",
|
|
7206
|
+
"type": {
|
|
7207
|
+
"text": "HeadlessDebugOptions"
|
|
7208
|
+
}
|
|
7209
|
+
}
|
|
7210
|
+
],
|
|
7211
|
+
"description": "The `meta-snapshot` entry for right now, gathered the way the assistant element gathers it\n(`buildMetaSnapshot` does the assembly; this reads what it reports): the live agent comes from\nthe DRIVER, the transcript from its raw history, and the figures from the transcript, so what a\nheadless host logs is what the browser would. The context window and model, which the element\nlearns from its provider registry, are the host's to say."
|
|
7212
|
+
},
|
|
7213
|
+
{
|
|
7214
|
+
"kind": "function",
|
|
7215
|
+
"name": "headlessDiagnosticEntries",
|
|
7216
|
+
"return": {
|
|
7217
|
+
"type": {
|
|
7218
|
+
"text": "DiagnosticEntry[]"
|
|
7219
|
+
}
|
|
7220
|
+
},
|
|
7221
|
+
"parameters": [
|
|
7222
|
+
{
|
|
7223
|
+
"name": "driver",
|
|
7224
|
+
"type": {
|
|
7225
|
+
"text": "AiDriver"
|
|
7226
|
+
}
|
|
7227
|
+
},
|
|
7228
|
+
{
|
|
7229
|
+
"name": "stateKey",
|
|
7230
|
+
"type": {
|
|
7231
|
+
"text": "string"
|
|
7232
|
+
}
|
|
7233
|
+
},
|
|
7234
|
+
{
|
|
7235
|
+
"name": "options",
|
|
7236
|
+
"default": "{}",
|
|
7237
|
+
"type": {
|
|
7238
|
+
"text": "HeadlessDebugOptions"
|
|
7239
|
+
}
|
|
7240
|
+
}
|
|
7241
|
+
],
|
|
7242
|
+
"description": "The diagnostic entries for the session so far, from the same `buildDiagnosticEntries` the\nbrowser's element and its persister use."
|
|
7243
|
+
},
|
|
7244
|
+
{
|
|
7245
|
+
"kind": "function",
|
|
7246
|
+
"name": "headlessCurrentDebugLog",
|
|
7247
|
+
"return": {
|
|
7248
|
+
"type": {
|
|
7249
|
+
"text": "DebugLog"
|
|
7250
|
+
}
|
|
7251
|
+
},
|
|
7252
|
+
"parameters": [
|
|
7253
|
+
{
|
|
7254
|
+
"name": "driver",
|
|
7255
|
+
"type": {
|
|
7256
|
+
"text": "AiDriver"
|
|
7257
|
+
}
|
|
7258
|
+
},
|
|
7259
|
+
{
|
|
7260
|
+
"name": "stateKey",
|
|
7261
|
+
"type": {
|
|
7262
|
+
"text": "string"
|
|
7263
|
+
}
|
|
7264
|
+
},
|
|
7265
|
+
{
|
|
7266
|
+
"name": "options",
|
|
7267
|
+
"default": "{}",
|
|
7268
|
+
"type": {
|
|
7269
|
+
"text": "HeadlessDebugOptions"
|
|
7270
|
+
}
|
|
7271
|
+
}
|
|
7272
|
+
],
|
|
7273
|
+
"description": "The current page's debug log: what `HeadlessSession.debugLog()` returns when nothing is\npersisted, and the fallback when the stored stream cannot be read."
|
|
7274
|
+
}
|
|
7275
|
+
],
|
|
7276
|
+
"exports": [
|
|
7277
|
+
{
|
|
7278
|
+
"kind": "js",
|
|
7279
|
+
"name": "headlessMetaSnapshot",
|
|
7280
|
+
"declaration": {
|
|
7281
|
+
"name": "headlessMetaSnapshot",
|
|
7282
|
+
"module": "src/headless/headless-debug.ts"
|
|
7283
|
+
}
|
|
7284
|
+
},
|
|
7285
|
+
{
|
|
7286
|
+
"kind": "js",
|
|
7287
|
+
"name": "headlessDiagnosticEntries",
|
|
7288
|
+
"declaration": {
|
|
7289
|
+
"name": "headlessDiagnosticEntries",
|
|
7290
|
+
"module": "src/headless/headless-debug.ts"
|
|
7291
|
+
}
|
|
7292
|
+
},
|
|
7293
|
+
{
|
|
7294
|
+
"kind": "js",
|
|
7295
|
+
"name": "headlessCurrentDebugLog",
|
|
7296
|
+
"declaration": {
|
|
7297
|
+
"name": "headlessCurrentDebugLog",
|
|
7298
|
+
"module": "src/headless/headless-debug.ts"
|
|
7299
|
+
}
|
|
7300
|
+
}
|
|
7301
|
+
]
|
|
7302
|
+
},
|
|
7303
|
+
{
|
|
7304
|
+
"kind": "javascript-module",
|
|
7305
|
+
"path": "src/headless/headless-persistence.ts",
|
|
7306
|
+
"declarations": [
|
|
7307
|
+
{
|
|
7308
|
+
"kind": "function",
|
|
7309
|
+
"name": "headlessPersistence",
|
|
7310
|
+
"return": {
|
|
7311
|
+
"type": {
|
|
7312
|
+
"text": "HeadlessPersistence"
|
|
7313
|
+
}
|
|
7314
|
+
},
|
|
7315
|
+
"parameters": [
|
|
7316
|
+
{
|
|
7317
|
+
"name": "options",
|
|
7318
|
+
"type": {
|
|
7319
|
+
"text": "HeadlessPersistenceOptions"
|
|
7320
|
+
}
|
|
7321
|
+
}
|
|
7322
|
+
],
|
|
7323
|
+
"description": "Persistence for a `HeadlessSession`: it writes exactly what the browser writes — the\n`sessions/<key>` snapshot and the `diag/<key>` stream — through the platform's\n`SessionPersister` and the host's `SessionPersistenceProvider`, and builds the lifetime debug log\nfrom the same code as the browser's Download.\n\nExported from the package's main entry only, NOT from the Node entry (`./chat-driver`): it\nreaches the session store, and through it `@genesislcap/foundation-redux`, which are not\nNode-clean. The `persister` it makes is the registry's, so a host can restore through\n`getPersister(stateKey)`."
|
|
7324
|
+
}
|
|
7325
|
+
],
|
|
7326
|
+
"exports": [
|
|
7327
|
+
{
|
|
7328
|
+
"kind": "js",
|
|
7329
|
+
"name": "headlessPersistence",
|
|
7330
|
+
"declaration": {
|
|
7331
|
+
"name": "headlessPersistence",
|
|
7332
|
+
"module": "src/headless/headless-persistence.ts"
|
|
7333
|
+
}
|
|
7334
|
+
}
|
|
7335
|
+
]
|
|
7336
|
+
},
|
|
7337
|
+
{
|
|
7338
|
+
"kind": "javascript-module",
|
|
7339
|
+
"path": "src/headless/headless-session.ts",
|
|
7340
|
+
"declarations": [
|
|
7341
|
+
{
|
|
7342
|
+
"kind": "class",
|
|
7343
|
+
"description": "A driver with no screen: a way for a host with no browser (a coding agent behind a small HTTP\nserver, a test) to run a whole assistant journey as the person (GENC-1660).\n\nIt watches the driver for interactions and turns the conversation into an append-only log of\nplain-data events (see HeadlessEvent): `decision` when the person has something to\nanswer, `working` when someone else has it, `settled`, the visible `message`s, the end of each\n`turn`, the autopilot's state, and the host's own `probe`. The caller reads the log with\nHeadlessSession.wait, a long poll cursored by `seq`, so nothing is lost between calls.\nIt answers with HeadlessSession.act, which runs a widget's action as a click would, with\nthe same numbered options the autopilot is shown.\n\nIt only observes: its interceptor never claims an interaction, so an autopilot on the same\ndriver works as it always does, and what the session reports as a `decision` is what the autopilot\nhas handed to the person. Plain classes only: no DOM, no FAST.",
|
|
7344
|
+
"name": "HeadlessSession",
|
|
7345
|
+
"members": [
|
|
7346
|
+
{
|
|
7347
|
+
"kind": "field",
|
|
7348
|
+
"name": "sessionKey",
|
|
7349
|
+
"type": {
|
|
7350
|
+
"text": "string"
|
|
7351
|
+
},
|
|
7352
|
+
"privacy": "private",
|
|
7353
|
+
"readonly": true
|
|
7354
|
+
},
|
|
7355
|
+
{
|
|
7356
|
+
"kind": "field",
|
|
7357
|
+
"name": "allowRaw",
|
|
7358
|
+
"type": {
|
|
7359
|
+
"text": "boolean"
|
|
7360
|
+
},
|
|
7361
|
+
"privacy": "private",
|
|
7362
|
+
"readonly": true
|
|
7363
|
+
},
|
|
7364
|
+
{
|
|
7365
|
+
"kind": "field",
|
|
7366
|
+
"name": "clock",
|
|
7367
|
+
"type": {
|
|
7368
|
+
"text": "() => number"
|
|
7369
|
+
},
|
|
7370
|
+
"privacy": "private",
|
|
7371
|
+
"readonly": true
|
|
7372
|
+
},
|
|
7373
|
+
{
|
|
7374
|
+
"kind": "field",
|
|
7375
|
+
"name": "autopilotHost",
|
|
7376
|
+
"type": {
|
|
7377
|
+
"text": "AutopilotLike | undefined"
|
|
7378
|
+
},
|
|
7379
|
+
"privacy": "private",
|
|
7380
|
+
"readonly": true,
|
|
7381
|
+
"default": "autopilot"
|
|
7382
|
+
},
|
|
7383
|
+
{
|
|
7384
|
+
"kind": "field",
|
|
7385
|
+
"name": "events",
|
|
7386
|
+
"type": {
|
|
7387
|
+
"text": "HeadlessEvent[]"
|
|
7388
|
+
},
|
|
7389
|
+
"privacy": "private",
|
|
7390
|
+
"readonly": true,
|
|
7391
|
+
"default": "[]"
|
|
7392
|
+
},
|
|
7393
|
+
{
|
|
7394
|
+
"kind": "field",
|
|
7395
|
+
"name": "seq",
|
|
7396
|
+
"type": {
|
|
7397
|
+
"text": "number"
|
|
7398
|
+
},
|
|
7399
|
+
"privacy": "private",
|
|
7400
|
+
"default": "0"
|
|
7401
|
+
},
|
|
7402
|
+
{
|
|
7403
|
+
"kind": "field",
|
|
7404
|
+
"name": "tracked",
|
|
7405
|
+
"privacy": "private",
|
|
7406
|
+
"readonly": true,
|
|
7407
|
+
"default": "new Map<string, Tracked>()"
|
|
7408
|
+
},
|
|
7409
|
+
{
|
|
7410
|
+
"kind": "field",
|
|
7411
|
+
"name": "origin",
|
|
7412
|
+
"privacy": "private",
|
|
7413
|
+
"readonly": true,
|
|
7414
|
+
"default": "new Map<string, { auto?: boolean; raw?: boolean }>()",
|
|
7415
|
+
"description": "What the session did to an interaction itself, for `settled` to say when the driver reports it."
|
|
7416
|
+
},
|
|
7417
|
+
{
|
|
7418
|
+
"kind": "field",
|
|
7419
|
+
"name": "waiters",
|
|
7420
|
+
"privacy": "private",
|
|
7421
|
+
"readonly": true,
|
|
7422
|
+
"default": "new Set<Waiter>()"
|
|
7423
|
+
},
|
|
7424
|
+
{
|
|
7425
|
+
"kind": "field",
|
|
7426
|
+
"name": "teardown",
|
|
7427
|
+
"type": {
|
|
7428
|
+
"text": "Array<() => void>"
|
|
7429
|
+
},
|
|
7430
|
+
"privacy": "private",
|
|
7431
|
+
"readonly": true,
|
|
7432
|
+
"default": "[]"
|
|
7433
|
+
},
|
|
7434
|
+
{
|
|
7435
|
+
"kind": "field",
|
|
7436
|
+
"name": "seen",
|
|
7437
|
+
"type": {
|
|
7438
|
+
"text": "number"
|
|
7439
|
+
},
|
|
7440
|
+
"privacy": "private",
|
|
7441
|
+
"description": "How much of the driver's history has been reported as messages."
|
|
7442
|
+
},
|
|
7443
|
+
{
|
|
7444
|
+
"kind": "field",
|
|
7445
|
+
"name": "turn",
|
|
7446
|
+
"type": {
|
|
7447
|
+
"text": "Promise<unknown> | undefined"
|
|
7448
|
+
},
|
|
7449
|
+
"privacy": "private",
|
|
7450
|
+
"description": "The `send` in flight, if any."
|
|
7451
|
+
},
|
|
7452
|
+
{
|
|
7453
|
+
"kind": "field",
|
|
7454
|
+
"name": "open",
|
|
7455
|
+
"type": {
|
|
7456
|
+
"text": "{ start: number; reason?: string; failureReason?: string } | undefined"
|
|
7457
|
+
},
|
|
7458
|
+
"privacy": "private",
|
|
7459
|
+
"description": "The turn that is running, whoever started it, until the driver has been idle for a beat:\n`start` is where its messages begin in the history. Its `reason` and `failureReason` are what\nended it, when something said."
|
|
7460
|
+
},
|
|
7461
|
+
{
|
|
7462
|
+
"kind": "field",
|
|
7463
|
+
"name": "base",
|
|
7464
|
+
"type": {
|
|
7465
|
+
"text": "number"
|
|
7466
|
+
},
|
|
7467
|
+
"privacy": "private",
|
|
7468
|
+
"description": "History length when the last turn closed: where a turn the session did not start begins."
|
|
7469
|
+
},
|
|
7470
|
+
{
|
|
7471
|
+
"kind": "field",
|
|
7472
|
+
"name": "quiesceTimer",
|
|
7473
|
+
"type": {
|
|
7474
|
+
"text": "ReturnType<typeof setTimeout> | undefined"
|
|
7475
|
+
},
|
|
7476
|
+
"privacy": "private"
|
|
7477
|
+
},
|
|
7478
|
+
{
|
|
7479
|
+
"kind": "field",
|
|
7480
|
+
"name": "poller",
|
|
7481
|
+
"type": {
|
|
7482
|
+
"text": "ReturnType<typeof setInterval> | undefined"
|
|
7483
|
+
},
|
|
7484
|
+
"privacy": "private"
|
|
7485
|
+
},
|
|
7486
|
+
{
|
|
7487
|
+
"kind": "field",
|
|
7488
|
+
"name": "persistence",
|
|
7489
|
+
"type": {
|
|
7490
|
+
"text": "HeadlessPersistenceBinding | undefined"
|
|
7491
|
+
},
|
|
7492
|
+
"privacy": "private",
|
|
7493
|
+
"readonly": true
|
|
7494
|
+
},
|
|
7495
|
+
{
|
|
7496
|
+
"kind": "field",
|
|
7497
|
+
"name": "lastProbe",
|
|
7498
|
+
"type": {
|
|
7499
|
+
"text": "Record<string, unknown>"
|
|
7500
|
+
},
|
|
7501
|
+
"privacy": "private",
|
|
7502
|
+
"default": "{}"
|
|
7503
|
+
},
|
|
7504
|
+
{
|
|
7505
|
+
"kind": "field",
|
|
7506
|
+
"name": "lastAutopilot",
|
|
7507
|
+
"type": {
|
|
7508
|
+
"text": "string"
|
|
7509
|
+
},
|
|
7510
|
+
"privacy": "private",
|
|
7511
|
+
"default": "''"
|
|
7512
|
+
},
|
|
7513
|
+
{
|
|
7514
|
+
"kind": "field",
|
|
7515
|
+
"name": "disposed",
|
|
7516
|
+
"type": {
|
|
7517
|
+
"text": "boolean"
|
|
7518
|
+
},
|
|
7519
|
+
"privacy": "private",
|
|
7520
|
+
"default": "false"
|
|
7521
|
+
},
|
|
7522
|
+
{
|
|
7523
|
+
"kind": "method",
|
|
7524
|
+
"name": "send",
|
|
7525
|
+
"return": {
|
|
7526
|
+
"type": {
|
|
7527
|
+
"text": "HeadlessResult"
|
|
7528
|
+
}
|
|
7529
|
+
},
|
|
7530
|
+
"parameters": [
|
|
7531
|
+
{
|
|
7532
|
+
"name": "text",
|
|
7533
|
+
"type": {
|
|
7534
|
+
"text": "string"
|
|
7535
|
+
}
|
|
7536
|
+
},
|
|
7537
|
+
{
|
|
7538
|
+
"name": "options",
|
|
7539
|
+
"default": "{}",
|
|
7540
|
+
"type": {
|
|
7541
|
+
"text": "HeadlessSendOptions"
|
|
7542
|
+
}
|
|
7543
|
+
}
|
|
7544
|
+
],
|
|
7545
|
+
"description": "Send the person's message, and start the turn. Returns as soon as the turn has started, not\nwhen it ends: a turn includes every interaction parked on the person, so it can run as long as\nthe journey. Its end is the `turn` event.\n\nRefused, never thrown, when the message is empty, or a turn is already running."
|
|
7546
|
+
},
|
|
7547
|
+
{
|
|
7548
|
+
"kind": "method",
|
|
7549
|
+
"name": "act",
|
|
7550
|
+
"return": {
|
|
7551
|
+
"type": {
|
|
7552
|
+
"text": "Promise<HeadlessActResult>"
|
|
7553
|
+
}
|
|
7554
|
+
},
|
|
7555
|
+
"parameters": [
|
|
7556
|
+
{
|
|
7557
|
+
"name": "interactionId",
|
|
7558
|
+
"type": {
|
|
7559
|
+
"text": "string"
|
|
7560
|
+
}
|
|
7561
|
+
},
|
|
7562
|
+
{
|
|
7563
|
+
"name": "action",
|
|
7564
|
+
"type": {
|
|
7565
|
+
"text": "string | number"
|
|
7566
|
+
}
|
|
7567
|
+
},
|
|
7568
|
+
{
|
|
7569
|
+
"name": "args",
|
|
7570
|
+
"default": "{}",
|
|
7571
|
+
"type": {
|
|
7572
|
+
"text": "HeadlessActArgs"
|
|
7573
|
+
}
|
|
7574
|
+
}
|
|
7575
|
+
],
|
|
7576
|
+
"description": "Run one of a pending interaction's actions as the person, as a click would (the answer is\ncredited `answeredBy: 'user'`). `action` is a number from the description's actions, or an\naction's name; `args` carry the text, the options (numbers or labels) or the form's fields it\ntakes. Refused, with the reason and what is enabled, when a claimant holds the interaction,\nthe action is unknown or disabled, or its arguments do not fit: nothing runs then.\n\nThe result is the driver's `InvokeResult`, plus `description` of the interaction when it is\nstill open."
|
|
7577
|
+
},
|
|
7578
|
+
{
|
|
7579
|
+
"kind": "method",
|
|
7580
|
+
"name": "resolve",
|
|
7581
|
+
"return": {
|
|
7582
|
+
"type": {
|
|
7583
|
+
"text": "HeadlessResult"
|
|
7584
|
+
}
|
|
7585
|
+
},
|
|
7586
|
+
"parameters": [
|
|
7587
|
+
{
|
|
7588
|
+
"name": "interactionId",
|
|
7589
|
+
"type": {
|
|
7590
|
+
"text": "string"
|
|
7591
|
+
}
|
|
7592
|
+
},
|
|
7593
|
+
{
|
|
7594
|
+
"name": "result",
|
|
7595
|
+
"type": {
|
|
7596
|
+
"text": "unknown"
|
|
7597
|
+
}
|
|
7598
|
+
}
|
|
7599
|
+
],
|
|
7600
|
+
"description": "Settle a pending interaction raw, with `result` as the widget would have resolved it,\nbypassing its actions and everything they check: an escape hatch for a widget with no\ncontroller, or one that cannot be acted on. Logs `settled` with `raw: true` and records\n`headless.raw-resolved`. Refused when `allowRaw` is `false`, when the interaction is not\npending, or when a claimant holds it: as for `act`, the person takes it back first."
|
|
7601
|
+
},
|
|
7602
|
+
{
|
|
7603
|
+
"kind": "method",
|
|
7604
|
+
"name": "read",
|
|
7605
|
+
"return": {
|
|
7606
|
+
"type": {
|
|
7607
|
+
"text": "Promise<HeadlessReadResult>"
|
|
7608
|
+
}
|
|
7609
|
+
},
|
|
7610
|
+
"parameters": [
|
|
7611
|
+
{
|
|
7612
|
+
"name": "interactionId",
|
|
7613
|
+
"type": {
|
|
7614
|
+
"text": "string"
|
|
7615
|
+
}
|
|
7616
|
+
},
|
|
7617
|
+
{
|
|
7618
|
+
"name": "request",
|
|
7619
|
+
"default": "{}",
|
|
7620
|
+
"type": {
|
|
7621
|
+
"text": "HeadlessReadRequest"
|
|
7622
|
+
}
|
|
7623
|
+
}
|
|
7624
|
+
],
|
|
7625
|
+
"description": "Read from a pending interaction without changing it: one of its views, or (with `tool`) one of\nthe widget tools given to the session. The text is capped. A view the surface does not list is\nrefused, naming those it does, as the autopilot's `widget_read` does."
|
|
7626
|
+
},
|
|
7627
|
+
{
|
|
7628
|
+
"kind": "method",
|
|
7629
|
+
"name": "wait",
|
|
7630
|
+
"return": {
|
|
7631
|
+
"type": {
|
|
7632
|
+
"text": "Promise<HeadlessWaitResult>"
|
|
7633
|
+
}
|
|
7634
|
+
},
|
|
7635
|
+
"parameters": [
|
|
7636
|
+
{
|
|
7637
|
+
"name": "request",
|
|
7638
|
+
"type": {
|
|
7639
|
+
"text": "HeadlessWaitRequest"
|
|
7640
|
+
}
|
|
7641
|
+
}
|
|
7642
|
+
],
|
|
7643
|
+
"description": "Wait for the log to say something, then return what it said. Resolves as soon as an event in\n`until` is in the log after `since` (immediately, when one already is), or at `maxWaitMs` with\nstatus `'working'`. Either way it returns every event after `since`, and `nextSeq`, the cursor\nfor the next call: poll with it and nothing is lost."
|
|
7644
|
+
},
|
|
7645
|
+
{
|
|
7646
|
+
"kind": "method",
|
|
7647
|
+
"name": "eventsSince",
|
|
7648
|
+
"return": {
|
|
7649
|
+
"type": {
|
|
7650
|
+
"text": "readonly HeadlessEvent[]"
|
|
7651
|
+
}
|
|
7652
|
+
},
|
|
7653
|
+
"parameters": [
|
|
7654
|
+
{
|
|
7655
|
+
"name": "since",
|
|
7656
|
+
"default": "0"
|
|
7657
|
+
}
|
|
7658
|
+
],
|
|
7659
|
+
"description": "Every event logged after `since` (default: all the log keeps), without waiting."
|
|
7660
|
+
},
|
|
7661
|
+
{
|
|
7662
|
+
"kind": "method",
|
|
7663
|
+
"name": "state",
|
|
7664
|
+
"return": {
|
|
7665
|
+
"type": {
|
|
7666
|
+
"text": "HeadlessState"
|
|
7667
|
+
}
|
|
7668
|
+
},
|
|
7669
|
+
"description": "What is going on now: whether a turn runs, the interaction the person should answer first (and\nthe others open behind it), the autopilot, what it has cost, and the host's probe."
|
|
7670
|
+
},
|
|
7671
|
+
{
|
|
7672
|
+
"kind": "method",
|
|
7673
|
+
"name": "flush",
|
|
7674
|
+
"return": {
|
|
7675
|
+
"type": {
|
|
7676
|
+
"text": "Promise<void>"
|
|
7677
|
+
}
|
|
7678
|
+
},
|
|
7679
|
+
"description": "Save the session now: the snapshot, and the diagnostics appended since the last flush, rather\nthan at the next throttled save. A no-op without `persistence`."
|
|
7680
|
+
},
|
|
7681
|
+
{
|
|
7682
|
+
"kind": "method",
|
|
7683
|
+
"name": "debugLog",
|
|
7684
|
+
"return": {
|
|
7685
|
+
"type": {
|
|
7686
|
+
"text": "Promise<DebugLog>"
|
|
7687
|
+
}
|
|
7688
|
+
},
|
|
7689
|
+
"description": "The debug log, the document the browser's Download gives. With `persistence`, the log of the\nwhole session stitched from the stored stream with a fresh `meta-snapshot` (`lifetimeDebugLog`,\nthe same code); without, the current page's, from `buildDiagnosticEntries`. Never throws."
|
|
7690
|
+
},
|
|
7691
|
+
{
|
|
7692
|
+
"kind": "method",
|
|
7693
|
+
"name": "stop",
|
|
7694
|
+
"return": {
|
|
7695
|
+
"type": {
|
|
7696
|
+
"text": "HeadlessResult"
|
|
7697
|
+
}
|
|
7698
|
+
},
|
|
7699
|
+
"description": "Stop the running turn, when the driver can."
|
|
7700
|
+
},
|
|
7701
|
+
{
|
|
7702
|
+
"kind": "method",
|
|
7703
|
+
"name": "autopilot",
|
|
7704
|
+
"return": {
|
|
7705
|
+
"type": {
|
|
7706
|
+
"text": "HeadlessResult"
|
|
7707
|
+
}
|
|
7708
|
+
},
|
|
7709
|
+
"parameters": [
|
|
7710
|
+
{
|
|
7711
|
+
"name": "mode",
|
|
7712
|
+
"type": {
|
|
7713
|
+
"text": "'pause' | 'resume' | 'stop' | 'keepPaused'"
|
|
7714
|
+
}
|
|
7715
|
+
},
|
|
7716
|
+
{
|
|
7717
|
+
"name": "interactionId",
|
|
7718
|
+
"optional": true,
|
|
7719
|
+
"type": {
|
|
7720
|
+
"text": "string"
|
|
7721
|
+
}
|
|
7722
|
+
}
|
|
7723
|
+
],
|
|
7724
|
+
"description": "Pause, resume or stop the autopilot, when there is one. Pausing hands what it holds to the\nperson, which then appears as a `decision`.\n\n`'keepPaused'` is the hand-back banner's \"Keep paused\": it turns the autopilot's own hand-back\nof one interaction into an ordinary pause, so it does not take the question back once it is\nanswered. `interactionId` names the interaction handed back; omitted, it is the one the\nautopilot's own pause is waiting on (`state().autopilot`'s hand-back, the `decision` it left\nwith the person). Refused, with why, when the autopilot has handed nothing back, when\n`interactionId` is not the one it handed back, or when the host cannot keep paused; the host's\nown `keepPaused` would do nothing in those cases without saying so."
|
|
7725
|
+
},
|
|
7726
|
+
{
|
|
7727
|
+
"kind": "method",
|
|
7728
|
+
"name": "keepPaused",
|
|
7729
|
+
"privacy": "private",
|
|
7730
|
+
"return": {
|
|
7731
|
+
"type": {
|
|
7732
|
+
"text": "HeadlessResult"
|
|
7733
|
+
}
|
|
7734
|
+
},
|
|
7735
|
+
"parameters": [
|
|
7736
|
+
{
|
|
7737
|
+
"name": "host",
|
|
7738
|
+
"type": {
|
|
7739
|
+
"text": "AutopilotLike"
|
|
7740
|
+
}
|
|
7741
|
+
},
|
|
7742
|
+
{
|
|
7743
|
+
"name": "interactionId",
|
|
7744
|
+
"type": {
|
|
7745
|
+
"text": "string | undefined"
|
|
7746
|
+
}
|
|
7747
|
+
}
|
|
7748
|
+
]
|
|
7749
|
+
},
|
|
7750
|
+
{
|
|
7751
|
+
"kind": "method",
|
|
7752
|
+
"name": "dispose",
|
|
7753
|
+
"return": {
|
|
7754
|
+
"type": {
|
|
7755
|
+
"text": "void"
|
|
7756
|
+
}
|
|
7757
|
+
},
|
|
7758
|
+
"description": "Detach: remove the interceptor and every subscription, and release anyone waiting."
|
|
7759
|
+
},
|
|
7760
|
+
{
|
|
7761
|
+
"kind": "method",
|
|
7762
|
+
"name": "listen",
|
|
7763
|
+
"privacy": "private",
|
|
7764
|
+
"return": {
|
|
7765
|
+
"type": {
|
|
7766
|
+
"text": "void"
|
|
7767
|
+
}
|
|
7768
|
+
},
|
|
7769
|
+
"parameters": [
|
|
7770
|
+
{
|
|
7771
|
+
"name": "type",
|
|
7772
|
+
"type": {
|
|
7773
|
+
"text": "string"
|
|
7774
|
+
}
|
|
7775
|
+
},
|
|
7776
|
+
{
|
|
7777
|
+
"name": "handler",
|
|
7778
|
+
"type": {
|
|
7779
|
+
"text": "(e: Event) => void"
|
|
7780
|
+
}
|
|
7781
|
+
}
|
|
7782
|
+
]
|
|
7783
|
+
},
|
|
7784
|
+
{
|
|
7785
|
+
"kind": "method",
|
|
7786
|
+
"name": "history",
|
|
7787
|
+
"privacy": "private",
|
|
7788
|
+
"return": {
|
|
7789
|
+
"type": {
|
|
7790
|
+
"text": "readonly ChatMessage[]"
|
|
7791
|
+
}
|
|
7792
|
+
}
|
|
7793
|
+
},
|
|
7794
|
+
{
|
|
7795
|
+
"kind": "method",
|
|
7796
|
+
"name": "onOpened",
|
|
7797
|
+
"privacy": "private",
|
|
7798
|
+
"return": {
|
|
7799
|
+
"type": {
|
|
7800
|
+
"text": "void"
|
|
7801
|
+
}
|
|
7802
|
+
},
|
|
7803
|
+
"parameters": [
|
|
7804
|
+
{
|
|
7805
|
+
"name": "opened",
|
|
7806
|
+
"type": {
|
|
7807
|
+
"text": "InteractionOpened"
|
|
7808
|
+
}
|
|
7809
|
+
}
|
|
7810
|
+
],
|
|
7811
|
+
"description": "An interaction opened: watch it. Who holds it is not decided yet, so it is reported later."
|
|
7812
|
+
},
|
|
7813
|
+
{
|
|
7814
|
+
"kind": "method",
|
|
7815
|
+
"name": "onSettled",
|
|
7816
|
+
"privacy": "private",
|
|
7817
|
+
"return": {
|
|
7818
|
+
"type": {
|
|
7819
|
+
"text": "void"
|
|
7820
|
+
}
|
|
7821
|
+
},
|
|
7822
|
+
"parameters": [
|
|
7823
|
+
{
|
|
7824
|
+
"name": "detail",
|
|
7825
|
+
"type": {
|
|
7826
|
+
"text": "{\n interactionId: string;\n answeredBy?: string;\n resolvedItself?: boolean;\n }"
|
|
7827
|
+
}
|
|
7828
|
+
}
|
|
7829
|
+
],
|
|
7830
|
+
"description": "The driver says an interaction settled, by whatever route."
|
|
7831
|
+
},
|
|
7832
|
+
{
|
|
7833
|
+
"kind": "method",
|
|
7834
|
+
"name": "onEnded",
|
|
7835
|
+
"privacy": "private",
|
|
7836
|
+
"return": {
|
|
7837
|
+
"type": {
|
|
7838
|
+
"text": "void"
|
|
7839
|
+
}
|
|
7840
|
+
},
|
|
7841
|
+
"parameters": [
|
|
7842
|
+
{
|
|
7843
|
+
"name": "t",
|
|
7844
|
+
"type": {
|
|
7845
|
+
"text": "Tracked"
|
|
7846
|
+
}
|
|
7847
|
+
}
|
|
7848
|
+
],
|
|
7849
|
+
"description": "The interaction's context was disposed: if nothing said it settled, say it did."
|
|
7850
|
+
},
|
|
7851
|
+
{
|
|
7852
|
+
"kind": "method",
|
|
7853
|
+
"name": "settle",
|
|
7854
|
+
"privacy": "private",
|
|
7855
|
+
"return": {
|
|
7856
|
+
"type": {
|
|
7857
|
+
"text": "void"
|
|
7858
|
+
}
|
|
7859
|
+
},
|
|
7860
|
+
"parameters": [
|
|
7861
|
+
{
|
|
7862
|
+
"name": "t",
|
|
7863
|
+
"type": {
|
|
7864
|
+
"text": "Tracked"
|
|
7865
|
+
}
|
|
7866
|
+
},
|
|
7867
|
+
{
|
|
7868
|
+
"name": "how",
|
|
7869
|
+
"type": {
|
|
7870
|
+
"text": "{ answeredBy?: string; resolvedItself?: boolean; auto?: boolean; raw?: boolean }"
|
|
7871
|
+
}
|
|
7872
|
+
}
|
|
7873
|
+
]
|
|
7874
|
+
},
|
|
7875
|
+
{
|
|
7876
|
+
"kind": "method",
|
|
7877
|
+
"name": "release",
|
|
7878
|
+
"privacy": "private",
|
|
7879
|
+
"return": {
|
|
7880
|
+
"type": {
|
|
7881
|
+
"text": "void"
|
|
7882
|
+
}
|
|
7883
|
+
},
|
|
7884
|
+
"parameters": [
|
|
7885
|
+
{
|
|
7886
|
+
"name": "t",
|
|
7887
|
+
"type": {
|
|
7888
|
+
"text": "Tracked"
|
|
7889
|
+
}
|
|
7890
|
+
}
|
|
7891
|
+
]
|
|
7892
|
+
},
|
|
7893
|
+
{
|
|
7894
|
+
"kind": "method",
|
|
7895
|
+
"name": "onHistory",
|
|
7896
|
+
"privacy": "private",
|
|
7897
|
+
"return": {
|
|
7898
|
+
"type": {
|
|
7899
|
+
"text": "void"
|
|
7900
|
+
}
|
|
7901
|
+
},
|
|
7902
|
+
"description": "New messages in the driver's history: report what the person would see of them."
|
|
7903
|
+
},
|
|
7904
|
+
{
|
|
7905
|
+
"kind": "method",
|
|
7906
|
+
"name": "reportMessages",
|
|
7907
|
+
"privacy": "private",
|
|
7908
|
+
"return": {
|
|
7909
|
+
"type": {
|
|
7910
|
+
"text": "void"
|
|
7911
|
+
}
|
|
7912
|
+
}
|
|
7913
|
+
},
|
|
7914
|
+
{
|
|
7915
|
+
"kind": "method",
|
|
7916
|
+
"name": "onAutopilot",
|
|
7917
|
+
"privacy": "private",
|
|
7918
|
+
"return": {
|
|
7919
|
+
"type": {
|
|
7920
|
+
"text": "void"
|
|
7921
|
+
}
|
|
7922
|
+
}
|
|
7923
|
+
},
|
|
7924
|
+
{
|
|
7925
|
+
"kind": "method",
|
|
7926
|
+
"name": "autopilotSignature",
|
|
7927
|
+
"privacy": "private",
|
|
7928
|
+
"return": {
|
|
7929
|
+
"type": {
|
|
7930
|
+
"text": "string"
|
|
7931
|
+
}
|
|
7932
|
+
}
|
|
7933
|
+
},
|
|
7934
|
+
{
|
|
7935
|
+
"kind": "method",
|
|
7936
|
+
"name": "describe",
|
|
7937
|
+
"privacy": "private",
|
|
7938
|
+
"return": {
|
|
7939
|
+
"type": {
|
|
7940
|
+
"text": "InteractionDescription"
|
|
7941
|
+
}
|
|
7942
|
+
},
|
|
7943
|
+
"parameters": [
|
|
7944
|
+
{
|
|
7945
|
+
"name": "t",
|
|
7946
|
+
"type": {
|
|
7947
|
+
"text": "Tracked"
|
|
7948
|
+
}
|
|
7949
|
+
}
|
|
7950
|
+
]
|
|
7951
|
+
},
|
|
7952
|
+
{
|
|
7953
|
+
"kind": "method",
|
|
7954
|
+
"name": "evaluate",
|
|
7955
|
+
"privacy": "private",
|
|
7956
|
+
"return": {
|
|
7957
|
+
"type": {
|
|
7958
|
+
"text": "void"
|
|
7959
|
+
}
|
|
7960
|
+
},
|
|
7961
|
+
"parameters": [
|
|
7962
|
+
{
|
|
7963
|
+
"name": "t",
|
|
7964
|
+
"type": {
|
|
7965
|
+
"text": "Tracked"
|
|
7966
|
+
}
|
|
7967
|
+
}
|
|
7968
|
+
],
|
|
7969
|
+
"description": "Report where an interaction stands, when that has changed. A `decision` when the person holds\nit and can act; `working` when a claimant holds it or it is not ready yet. A `decision` is\nlogged again only when its description changed materially: who holds it, whether it is ready\nor has a controller, or which actions are enabled. The text and facts alone do not count."
|
|
7970
|
+
},
|
|
7971
|
+
{
|
|
7972
|
+
"kind": "method",
|
|
7973
|
+
"name": "autoSettle",
|
|
7974
|
+
"privacy": "private",
|
|
7975
|
+
"return": {
|
|
7976
|
+
"type": {
|
|
7977
|
+
"text": "boolean"
|
|
7978
|
+
}
|
|
7979
|
+
},
|
|
7980
|
+
"parameters": [
|
|
7981
|
+
{
|
|
7982
|
+
"name": "t",
|
|
7983
|
+
"type": {
|
|
7984
|
+
"text": "Tracked"
|
|
7985
|
+
}
|
|
7986
|
+
}
|
|
7987
|
+
],
|
|
7988
|
+
"description": "Settle a widget that settles itself in a browser, as it would on mounting. Once, and only when\nthe person holds it. Returns whether it settled it."
|
|
7989
|
+
},
|
|
7990
|
+
{
|
|
7991
|
+
"kind": "method",
|
|
7992
|
+
"name": "readTool",
|
|
7993
|
+
"privacy": "private",
|
|
7994
|
+
"return": {
|
|
7995
|
+
"type": {
|
|
7996
|
+
"text": "Promise<HeadlessReadResult>"
|
|
7997
|
+
}
|
|
7998
|
+
},
|
|
7999
|
+
"parameters": [
|
|
8000
|
+
{
|
|
8001
|
+
"name": "t",
|
|
8002
|
+
"type": {
|
|
8003
|
+
"text": "Tracked"
|
|
8004
|
+
}
|
|
8005
|
+
},
|
|
8006
|
+
{
|
|
8007
|
+
"name": "name",
|
|
8008
|
+
"type": {
|
|
8009
|
+
"text": "string"
|
|
8010
|
+
}
|
|
8011
|
+
},
|
|
8012
|
+
{
|
|
8013
|
+
"name": "args",
|
|
8014
|
+
"type": {
|
|
8015
|
+
"text": "Record<string, unknown> | undefined"
|
|
8016
|
+
}
|
|
8017
|
+
}
|
|
8018
|
+
]
|
|
8019
|
+
},
|
|
8020
|
+
{
|
|
8021
|
+
"kind": "method",
|
|
8022
|
+
"name": "observe",
|
|
8023
|
+
"privacy": "private",
|
|
8024
|
+
"return": {
|
|
8025
|
+
"type": {
|
|
8026
|
+
"text": "void"
|
|
8027
|
+
}
|
|
8028
|
+
},
|
|
8029
|
+
"description": "Notice a turn begin or end, whoever started it. The driver being busy (or a `send` in flight)\nis a turn; once it has been idle for a beat the turn is over and is reported, once. The beat\ncovers the gaps inside one turn, such as a hand-off continuing it, which are a microtask long.\nA turn that begins the instant another ends, with no idle between, is reported as one."
|
|
8030
|
+
},
|
|
8031
|
+
{
|
|
8032
|
+
"kind": "method",
|
|
8033
|
+
"name": "closeTurn",
|
|
8034
|
+
"privacy": "private",
|
|
8035
|
+
"return": {
|
|
8036
|
+
"type": {
|
|
8037
|
+
"text": "void"
|
|
8038
|
+
}
|
|
8039
|
+
},
|
|
8040
|
+
"description": "Report the open turn as ended, unless the driver is busy again."
|
|
8041
|
+
},
|
|
8042
|
+
{
|
|
8043
|
+
"kind": "method",
|
|
8044
|
+
"name": "startPolling",
|
|
8045
|
+
"privacy": "private",
|
|
8046
|
+
"return": {
|
|
8047
|
+
"type": {
|
|
8048
|
+
"text": "void"
|
|
8049
|
+
}
|
|
8050
|
+
},
|
|
8051
|
+
"description": "Without a shared bus nothing says a turn ended, so while one is open the driver is asked."
|
|
8052
|
+
},
|
|
8053
|
+
{
|
|
8054
|
+
"kind": "method",
|
|
8055
|
+
"name": "stopPolling",
|
|
8056
|
+
"privacy": "private",
|
|
8057
|
+
"return": {
|
|
8058
|
+
"type": {
|
|
8059
|
+
"text": "void"
|
|
8060
|
+
}
|
|
8061
|
+
}
|
|
8062
|
+
},
|
|
8063
|
+
{
|
|
8064
|
+
"kind": "method",
|
|
8065
|
+
"name": "logTurn",
|
|
8066
|
+
"privacy": "private",
|
|
8067
|
+
"return": {
|
|
8068
|
+
"type": {
|
|
8069
|
+
"text": "void"
|
|
8070
|
+
}
|
|
8071
|
+
},
|
|
8072
|
+
"parameters": [
|
|
8073
|
+
{
|
|
8074
|
+
"name": "reason",
|
|
8075
|
+
"type": {
|
|
8076
|
+
"text": "string"
|
|
8077
|
+
}
|
|
8078
|
+
},
|
|
8079
|
+
{
|
|
8080
|
+
"name": "failureReason",
|
|
8081
|
+
"type": {
|
|
8082
|
+
"text": "string | undefined"
|
|
8083
|
+
}
|
|
8084
|
+
},
|
|
8085
|
+
{
|
|
8086
|
+
"name": "start",
|
|
8087
|
+
"type": {
|
|
8088
|
+
"text": "number"
|
|
8089
|
+
}
|
|
8090
|
+
}
|
|
8091
|
+
]
|
|
8092
|
+
},
|
|
8093
|
+
{
|
|
8094
|
+
"kind": "method",
|
|
8095
|
+
"name": "log",
|
|
8096
|
+
"privacy": "private",
|
|
8097
|
+
"return": {
|
|
8098
|
+
"type": {
|
|
8099
|
+
"text": "void"
|
|
8100
|
+
}
|
|
8101
|
+
},
|
|
8102
|
+
"parameters": [
|
|
8103
|
+
{
|
|
8104
|
+
"name": "event",
|
|
8105
|
+
"type": {
|
|
8106
|
+
"text": "NewEvent"
|
|
8107
|
+
}
|
|
8108
|
+
}
|
|
8109
|
+
]
|
|
8110
|
+
},
|
|
8111
|
+
{
|
|
8112
|
+
"kind": "method",
|
|
8113
|
+
"name": "append",
|
|
8114
|
+
"privacy": "private",
|
|
8115
|
+
"return": {
|
|
8116
|
+
"type": {
|
|
8117
|
+
"text": "void"
|
|
8118
|
+
}
|
|
8119
|
+
},
|
|
8120
|
+
"parameters": [
|
|
8121
|
+
{
|
|
8122
|
+
"name": "event",
|
|
8123
|
+
"type": {
|
|
8124
|
+
"text": "NewEvent"
|
|
8125
|
+
}
|
|
8126
|
+
}
|
|
8127
|
+
]
|
|
8128
|
+
},
|
|
8129
|
+
{
|
|
8130
|
+
"kind": "method",
|
|
8131
|
+
"name": "readProbe",
|
|
8132
|
+
"privacy": "private",
|
|
8133
|
+
"return": {
|
|
8134
|
+
"type": {
|
|
8135
|
+
"text": "Record<string, unknown>"
|
|
8136
|
+
}
|
|
8137
|
+
}
|
|
8138
|
+
},
|
|
8139
|
+
{
|
|
8140
|
+
"kind": "method",
|
|
8141
|
+
"name": "checkProbe",
|
|
8142
|
+
"privacy": "private",
|
|
8143
|
+
"return": {
|
|
8144
|
+
"type": {
|
|
8145
|
+
"text": "void"
|
|
8146
|
+
}
|
|
8147
|
+
},
|
|
8148
|
+
"description": "Read the probe again; a change in any top-level value is a `probe` event."
|
|
8149
|
+
},
|
|
8150
|
+
{
|
|
8151
|
+
"kind": "method",
|
|
8152
|
+
"name": "waited",
|
|
8153
|
+
"privacy": "private",
|
|
8154
|
+
"return": {
|
|
8155
|
+
"type": {
|
|
8156
|
+
"text": "HeadlessWaitResult"
|
|
8157
|
+
}
|
|
8158
|
+
},
|
|
8159
|
+
"parameters": [
|
|
8160
|
+
{
|
|
8161
|
+
"name": "since",
|
|
8162
|
+
"type": {
|
|
8163
|
+
"text": "number"
|
|
8164
|
+
}
|
|
8165
|
+
},
|
|
8166
|
+
{
|
|
8167
|
+
"name": "status",
|
|
8168
|
+
"type": {
|
|
8169
|
+
"text": "HeadlessWaitResult['status']"
|
|
8170
|
+
}
|
|
8171
|
+
}
|
|
8172
|
+
]
|
|
8173
|
+
}
|
|
8174
|
+
]
|
|
8175
|
+
}
|
|
8176
|
+
],
|
|
8177
|
+
"exports": [
|
|
8178
|
+
{
|
|
8179
|
+
"kind": "js",
|
|
8180
|
+
"name": "HeadlessSession",
|
|
8181
|
+
"declaration": {
|
|
8182
|
+
"name": "HeadlessSession",
|
|
8183
|
+
"module": "src/headless/headless-session.ts"
|
|
8184
|
+
}
|
|
8185
|
+
}
|
|
8186
|
+
]
|
|
8187
|
+
},
|
|
8188
|
+
{
|
|
8189
|
+
"kind": "javascript-module",
|
|
8190
|
+
"path": "src/headless/headless.types.ts",
|
|
8191
|
+
"declarations": [],
|
|
8192
|
+
"exports": []
|
|
8193
|
+
},
|
|
8194
|
+
{
|
|
8195
|
+
"kind": "javascript-module",
|
|
8196
|
+
"path": "src/headless/index.ts",
|
|
8197
|
+
"declarations": [],
|
|
8198
|
+
"exports": [
|
|
8199
|
+
{
|
|
8200
|
+
"kind": "js",
|
|
8201
|
+
"name": "describeInteraction",
|
|
8202
|
+
"declaration": {
|
|
8203
|
+
"name": "describeInteraction",
|
|
8204
|
+
"module": "./describe-interaction"
|
|
8205
|
+
}
|
|
8206
|
+
},
|
|
8207
|
+
{
|
|
8208
|
+
"kind": "js",
|
|
8209
|
+
"name": "headlessCurrentDebugLog",
|
|
8210
|
+
"declaration": {
|
|
8211
|
+
"name": "headlessCurrentDebugLog",
|
|
8212
|
+
"module": "./headless-debug"
|
|
8213
|
+
}
|
|
8214
|
+
},
|
|
8215
|
+
{
|
|
8216
|
+
"kind": "js",
|
|
8217
|
+
"name": "headlessDiagnosticEntries",
|
|
8218
|
+
"declaration": {
|
|
8219
|
+
"name": "headlessDiagnosticEntries",
|
|
8220
|
+
"module": "./headless-debug"
|
|
8221
|
+
}
|
|
8222
|
+
},
|
|
8223
|
+
{
|
|
8224
|
+
"kind": "js",
|
|
8225
|
+
"name": "headlessMetaSnapshot",
|
|
8226
|
+
"declaration": {
|
|
8227
|
+
"name": "headlessMetaSnapshot",
|
|
8228
|
+
"module": "./headless-debug"
|
|
8229
|
+
}
|
|
8230
|
+
},
|
|
8231
|
+
{
|
|
8232
|
+
"kind": "js",
|
|
8233
|
+
"name": "HeadlessSession",
|
|
8234
|
+
"declaration": {
|
|
8235
|
+
"name": "HeadlessSession",
|
|
8236
|
+
"module": "./headless-session"
|
|
8237
|
+
}
|
|
8238
|
+
},
|
|
8239
|
+
{
|
|
8240
|
+
"kind": "js",
|
|
8241
|
+
"name": "AutopilotLike",
|
|
8242
|
+
"declaration": {
|
|
8243
|
+
"name": "AutopilotLike",
|
|
8244
|
+
"module": "./headless.types"
|
|
8245
|
+
}
|
|
8246
|
+
},
|
|
8247
|
+
{
|
|
8248
|
+
"kind": "js",
|
|
8249
|
+
"name": "DescribedAction",
|
|
8250
|
+
"declaration": {
|
|
8251
|
+
"name": "DescribedAction",
|
|
8252
|
+
"module": "./headless.types"
|
|
8253
|
+
}
|
|
8254
|
+
},
|
|
8255
|
+
{
|
|
8256
|
+
"kind": "js",
|
|
8257
|
+
"name": "DescribeInteractionInput",
|
|
8258
|
+
"declaration": {
|
|
8259
|
+
"name": "DescribeInteractionInput",
|
|
8260
|
+
"module": "./headless.types"
|
|
8261
|
+
}
|
|
8262
|
+
},
|
|
8263
|
+
{
|
|
8264
|
+
"kind": "js",
|
|
8265
|
+
"name": "HeadlessActArgs",
|
|
8266
|
+
"declaration": {
|
|
8267
|
+
"name": "HeadlessActArgs",
|
|
8268
|
+
"module": "./headless.types"
|
|
8269
|
+
}
|
|
8270
|
+
},
|
|
8271
|
+
{
|
|
8272
|
+
"kind": "js",
|
|
8273
|
+
"name": "HeadlessActResult",
|
|
8274
|
+
"declaration": {
|
|
8275
|
+
"name": "HeadlessActResult",
|
|
8276
|
+
"module": "./headless.types"
|
|
8277
|
+
}
|
|
8278
|
+
},
|
|
8279
|
+
{
|
|
8280
|
+
"kind": "js",
|
|
8281
|
+
"name": "HeadlessDebugOptions",
|
|
8282
|
+
"declaration": {
|
|
8283
|
+
"name": "HeadlessDebugOptions",
|
|
8284
|
+
"module": "./headless.types"
|
|
8285
|
+
}
|
|
8286
|
+
},
|
|
8287
|
+
{
|
|
8288
|
+
"kind": "js",
|
|
8289
|
+
"name": "HeadlessEvent",
|
|
8290
|
+
"declaration": {
|
|
8291
|
+
"name": "HeadlessEvent",
|
|
8292
|
+
"module": "./headless.types"
|
|
8293
|
+
}
|
|
8294
|
+
},
|
|
8295
|
+
{
|
|
8296
|
+
"kind": "js",
|
|
8297
|
+
"name": "HeadlessEventBase",
|
|
8298
|
+
"declaration": {
|
|
8299
|
+
"name": "HeadlessEventBase",
|
|
8300
|
+
"module": "./headless.types"
|
|
8301
|
+
}
|
|
8302
|
+
},
|
|
8303
|
+
{
|
|
8304
|
+
"kind": "js",
|
|
8305
|
+
"name": "HeadlessEventType",
|
|
8306
|
+
"declaration": {
|
|
8307
|
+
"name": "HeadlessEventType",
|
|
8308
|
+
"module": "./headless.types"
|
|
8309
|
+
}
|
|
8310
|
+
},
|
|
8311
|
+
{
|
|
8312
|
+
"kind": "js",
|
|
8313
|
+
"name": "HeadlessPersistence",
|
|
8314
|
+
"declaration": {
|
|
8315
|
+
"name": "HeadlessPersistence",
|
|
8316
|
+
"module": "./headless.types"
|
|
8317
|
+
}
|
|
8318
|
+
},
|
|
8319
|
+
{
|
|
8320
|
+
"kind": "js",
|
|
8321
|
+
"name": "HeadlessPersistenceBinding",
|
|
8322
|
+
"declaration": {
|
|
8323
|
+
"name": "HeadlessPersistenceBinding",
|
|
8324
|
+
"module": "./headless.types"
|
|
8325
|
+
}
|
|
8326
|
+
},
|
|
8327
|
+
{
|
|
8328
|
+
"kind": "js",
|
|
8329
|
+
"name": "HeadlessPersistenceHost",
|
|
8330
|
+
"declaration": {
|
|
8331
|
+
"name": "HeadlessPersistenceHost",
|
|
8332
|
+
"module": "./headless.types"
|
|
8333
|
+
}
|
|
8334
|
+
},
|
|
8335
|
+
{
|
|
8336
|
+
"kind": "js",
|
|
8337
|
+
"name": "HeadlessReadRequest",
|
|
8338
|
+
"declaration": {
|
|
8339
|
+
"name": "HeadlessReadRequest",
|
|
8340
|
+
"module": "./headless.types"
|
|
8341
|
+
}
|
|
8342
|
+
},
|
|
8343
|
+
{
|
|
8344
|
+
"kind": "js",
|
|
8345
|
+
"name": "HeadlessReadResult",
|
|
8346
|
+
"declaration": {
|
|
8347
|
+
"name": "HeadlessReadResult",
|
|
8348
|
+
"module": "./headless.types"
|
|
8349
|
+
}
|
|
8350
|
+
},
|
|
8351
|
+
{
|
|
8352
|
+
"kind": "js",
|
|
8353
|
+
"name": "HeadlessResult",
|
|
8354
|
+
"declaration": {
|
|
8355
|
+
"name": "HeadlessResult",
|
|
8356
|
+
"module": "./headless.types"
|
|
8357
|
+
}
|
|
8358
|
+
},
|
|
8359
|
+
{
|
|
8360
|
+
"kind": "js",
|
|
8361
|
+
"name": "HeadlessSendOptions",
|
|
8362
|
+
"declaration": {
|
|
8363
|
+
"name": "HeadlessSendOptions",
|
|
8364
|
+
"module": "./headless.types"
|
|
8365
|
+
}
|
|
8366
|
+
},
|
|
8367
|
+
{
|
|
8368
|
+
"kind": "js",
|
|
8369
|
+
"name": "HeadlessSessionOptions",
|
|
8370
|
+
"declaration": {
|
|
8371
|
+
"name": "HeadlessSessionOptions",
|
|
8372
|
+
"module": "./headless.types"
|
|
8373
|
+
}
|
|
8374
|
+
},
|
|
8375
|
+
{
|
|
8376
|
+
"kind": "js",
|
|
8377
|
+
"name": "HeadlessState",
|
|
8378
|
+
"declaration": {
|
|
8379
|
+
"name": "HeadlessState",
|
|
8380
|
+
"module": "./headless.types"
|
|
8381
|
+
}
|
|
8382
|
+
},
|
|
8383
|
+
{
|
|
8384
|
+
"kind": "js",
|
|
8385
|
+
"name": "HeadlessWaitRequest",
|
|
8386
|
+
"declaration": {
|
|
8387
|
+
"name": "HeadlessWaitRequest",
|
|
8388
|
+
"module": "./headless.types"
|
|
8389
|
+
}
|
|
8390
|
+
},
|
|
8391
|
+
{
|
|
8392
|
+
"kind": "js",
|
|
8393
|
+
"name": "HeadlessWaitResult",
|
|
8394
|
+
"declaration": {
|
|
8395
|
+
"name": "HeadlessWaitResult",
|
|
8396
|
+
"module": "./headless.types"
|
|
8397
|
+
}
|
|
8398
|
+
},
|
|
8399
|
+
{
|
|
8400
|
+
"kind": "js",
|
|
8401
|
+
"name": "InteractionDescription",
|
|
8402
|
+
"declaration": {
|
|
8403
|
+
"name": "InteractionDescription",
|
|
8404
|
+
"module": "./headless.types"
|
|
8405
|
+
}
|
|
8406
|
+
},
|
|
8407
|
+
{
|
|
8408
|
+
"kind": "js",
|
|
8409
|
+
"name": "PendingSummary",
|
|
8410
|
+
"declaration": {
|
|
8411
|
+
"name": "PendingSummary",
|
|
8412
|
+
"module": "./headless.types"
|
|
8413
|
+
}
|
|
8414
|
+
}
|
|
8415
|
+
]
|
|
8416
|
+
},
|
|
8417
|
+
{
|
|
8418
|
+
"kind": "javascript-module",
|
|
8419
|
+
"path": "src/headless-server/compact.ts",
|
|
8420
|
+
"declarations": [
|
|
8421
|
+
{
|
|
8422
|
+
"kind": "function",
|
|
8423
|
+
"name": "firstLines",
|
|
8424
|
+
"return": {
|
|
8425
|
+
"type": {
|
|
8426
|
+
"text": "{ text: string; chars?: number }"
|
|
8427
|
+
}
|
|
8428
|
+
},
|
|
8429
|
+
"parameters": [
|
|
8430
|
+
{
|
|
8431
|
+
"name": "text",
|
|
8432
|
+
"type": {
|
|
8433
|
+
"text": "string"
|
|
8434
|
+
}
|
|
8435
|
+
},
|
|
8436
|
+
{
|
|
8437
|
+
"name": "lines",
|
|
8438
|
+
"type": {
|
|
8439
|
+
"text": "number"
|
|
8440
|
+
}
|
|
8441
|
+
},
|
|
8442
|
+
{
|
|
8443
|
+
"name": "chars",
|
|
8444
|
+
"type": {
|
|
8445
|
+
"text": "number"
|
|
8446
|
+
}
|
|
8447
|
+
}
|
|
8448
|
+
],
|
|
8449
|
+
"description": "The first `lines` lines of `text`, at most `chars` characters, and its full length when it was cut."
|
|
8450
|
+
},
|
|
8451
|
+
{
|
|
8452
|
+
"kind": "function",
|
|
8453
|
+
"name": "present",
|
|
8454
|
+
"return": {
|
|
8455
|
+
"type": {
|
|
8456
|
+
"text": "Partial<T>"
|
|
8457
|
+
}
|
|
8458
|
+
},
|
|
8459
|
+
"parameters": [
|
|
8460
|
+
{
|
|
8461
|
+
"name": "source",
|
|
8462
|
+
"type": {
|
|
8463
|
+
"text": "T"
|
|
8464
|
+
}
|
|
8465
|
+
}
|
|
8466
|
+
],
|
|
8467
|
+
"description": "The keys of `source` that are set, as a new object: a field with nothing to say is dropped."
|
|
8468
|
+
},
|
|
8469
|
+
{
|
|
8470
|
+
"kind": "function",
|
|
8471
|
+
"name": "compactEvent",
|
|
8472
|
+
"return": {
|
|
8473
|
+
"type": {
|
|
8474
|
+
"text": "CompactEvent | undefined"
|
|
8475
|
+
}
|
|
8476
|
+
},
|
|
8477
|
+
"parameters": [
|
|
8478
|
+
{
|
|
8479
|
+
"name": "event",
|
|
8480
|
+
"type": {
|
|
8481
|
+
"text": "HeadlessEvent"
|
|
8482
|
+
}
|
|
8483
|
+
},
|
|
8484
|
+
{
|
|
8485
|
+
"name": "options",
|
|
8486
|
+
"default": "{}",
|
|
8487
|
+
"type": {
|
|
8488
|
+
"text": "CompactOptions"
|
|
8489
|
+
}
|
|
8490
|
+
}
|
|
8491
|
+
],
|
|
8492
|
+
"description": "One session event, compact. `decision` and `working` are not reported as events: what the person is asked\nis the reply's `decision`, and what is working is its `working`. A message carries its first lines and\nits length; a probe event is the host's view of it (see `ServerOptions.probeEvent`)."
|
|
8493
|
+
},
|
|
8494
|
+
{
|
|
8495
|
+
"kind": "function",
|
|
8496
|
+
"name": "leanDecisionText",
|
|
8497
|
+
"return": {
|
|
8498
|
+
"type": {
|
|
8499
|
+
"text": "string"
|
|
8500
|
+
}
|
|
8501
|
+
},
|
|
8502
|
+
"parameters": [
|
|
8503
|
+
{
|
|
8504
|
+
"name": "text",
|
|
8505
|
+
"type": {
|
|
8506
|
+
"text": "string"
|
|
8507
|
+
}
|
|
8508
|
+
},
|
|
8509
|
+
{
|
|
8510
|
+
"name": "views",
|
|
8511
|
+
"optional": true,
|
|
8512
|
+
"type": {
|
|
8513
|
+
"text": "Readonly<Record<string, string>>"
|
|
8514
|
+
}
|
|
8515
|
+
}
|
|
8516
|
+
],
|
|
8517
|
+
"description": "A decision's text without its `Now: <the preview view as JSON>` line, and nothing else (`decisionText:\n\"lean\"`). `renderDecision` writes the preview as `Now: ${capRead(JSON.stringify(view))}`: `JSON.stringify`\nwith no indent never breaks a line, so the JSON is the one line, and `capRead` adds a second, `[Cut at …]`,\nonly when it cut it. Both go; in their place is a pointer to `read`. The line is found by position, not\nby prefix alone: it follows the Views list, whose entry for the preview ends `(shown below as Now)`, so a\ncard that itself has a line starting `Now: ` is not mistaken for it.\n\nThe text comes back as it was when there is no preview to find (a card with no preview view, or a short-form\ndecision, which shows no `Now:`), or when `views` does not name the one the Views list marks."
|
|
8518
|
+
},
|
|
8519
|
+
{
|
|
8520
|
+
"kind": "function",
|
|
8521
|
+
"name": "compactDecision",
|
|
8522
|
+
"return": {
|
|
8523
|
+
"type": {
|
|
8524
|
+
"text": "CompactDecision"
|
|
8525
|
+
}
|
|
8526
|
+
},
|
|
8527
|
+
"parameters": [
|
|
8528
|
+
{
|
|
8529
|
+
"name": "description",
|
|
8530
|
+
"type": {
|
|
8531
|
+
"text": "InteractionDescription"
|
|
8532
|
+
}
|
|
8533
|
+
},
|
|
8534
|
+
{
|
|
8535
|
+
"name": "decisionText",
|
|
8536
|
+
"default": "'full'",
|
|
8537
|
+
"type": {
|
|
8538
|
+
"text": "DecisionText"
|
|
8539
|
+
}
|
|
8540
|
+
}
|
|
8541
|
+
],
|
|
8542
|
+
"description": "A decision as the reply carries it: what to read and what to choose from, and nothing empty. With\n`decisionText: \"lean\"` its `text` leaves out the preview view's JSON (leanDecisionText); nothing\nelse about it changes."
|
|
8543
|
+
},
|
|
8544
|
+
{
|
|
8545
|
+
"kind": "function",
|
|
8546
|
+
"name": "shortDecision",
|
|
8547
|
+
"return": {
|
|
8548
|
+
"type": {
|
|
8549
|
+
"text": "CompactDecision"
|
|
8550
|
+
}
|
|
8551
|
+
},
|
|
8552
|
+
"parameters": [
|
|
8553
|
+
{
|
|
8554
|
+
"name": "interactionId",
|
|
8555
|
+
"type": {
|
|
8556
|
+
"text": "string"
|
|
8557
|
+
}
|
|
8558
|
+
},
|
|
8559
|
+
{
|
|
8560
|
+
"name": "component",
|
|
8561
|
+
"type": {
|
|
8562
|
+
"text": "string"
|
|
8563
|
+
}
|
|
8564
|
+
},
|
|
8565
|
+
{
|
|
8566
|
+
"name": "actions",
|
|
8567
|
+
"type": {
|
|
8568
|
+
"text": "ReadonlyArray<{ n?: number; name: string; enabled: boolean }>"
|
|
8569
|
+
}
|
|
8570
|
+
}
|
|
8571
|
+
],
|
|
8572
|
+
"description": "A decision cut to what a caller who has already read the card needs: which interaction, and the actions as\n`n`, `name`, `enabled`. For the reply to an edit, and to a refused action, where the card has not changed\nenough to be worth sending again."
|
|
8573
|
+
},
|
|
8574
|
+
{
|
|
8575
|
+
"kind": "function",
|
|
8576
|
+
"name": "capOutput",
|
|
8577
|
+
"return": {
|
|
8578
|
+
"type": {
|
|
8579
|
+
"text": "unknown"
|
|
8580
|
+
}
|
|
8581
|
+
},
|
|
8582
|
+
"parameters": [
|
|
8583
|
+
{
|
|
8584
|
+
"name": "output",
|
|
8585
|
+
"type": {
|
|
8586
|
+
"text": "unknown"
|
|
8587
|
+
}
|
|
8588
|
+
}
|
|
8589
|
+
],
|
|
8590
|
+
"description": "What an editing action returned, as the reply carries it: whole when small, else its first characters."
|
|
8591
|
+
}
|
|
8592
|
+
],
|
|
8593
|
+
"exports": [
|
|
8594
|
+
{
|
|
8595
|
+
"kind": "js",
|
|
8596
|
+
"name": "firstLines",
|
|
8597
|
+
"declaration": {
|
|
8598
|
+
"name": "firstLines",
|
|
8599
|
+
"module": "src/headless-server/compact.ts"
|
|
8600
|
+
}
|
|
8601
|
+
},
|
|
8602
|
+
{
|
|
8603
|
+
"kind": "js",
|
|
8604
|
+
"name": "present",
|
|
8605
|
+
"declaration": {
|
|
8606
|
+
"name": "present",
|
|
8607
|
+
"module": "src/headless-server/compact.ts"
|
|
8608
|
+
}
|
|
8609
|
+
},
|
|
8610
|
+
{
|
|
8611
|
+
"kind": "js",
|
|
8612
|
+
"name": "compactEvent",
|
|
8613
|
+
"declaration": {
|
|
8614
|
+
"name": "compactEvent",
|
|
8615
|
+
"module": "src/headless-server/compact.ts"
|
|
8616
|
+
}
|
|
8617
|
+
},
|
|
8618
|
+
{
|
|
8619
|
+
"kind": "js",
|
|
8620
|
+
"name": "leanDecisionText",
|
|
8621
|
+
"declaration": {
|
|
8622
|
+
"name": "leanDecisionText",
|
|
8623
|
+
"module": "src/headless-server/compact.ts"
|
|
8624
|
+
}
|
|
8625
|
+
},
|
|
8626
|
+
{
|
|
8627
|
+
"kind": "js",
|
|
8628
|
+
"name": "compactDecision",
|
|
8629
|
+
"declaration": {
|
|
8630
|
+
"name": "compactDecision",
|
|
8631
|
+
"module": "src/headless-server/compact.ts"
|
|
8632
|
+
}
|
|
8633
|
+
},
|
|
8634
|
+
{
|
|
8635
|
+
"kind": "js",
|
|
8636
|
+
"name": "shortDecision",
|
|
8637
|
+
"declaration": {
|
|
8638
|
+
"name": "shortDecision",
|
|
8639
|
+
"module": "src/headless-server/compact.ts"
|
|
8640
|
+
}
|
|
8641
|
+
},
|
|
8642
|
+
{
|
|
8643
|
+
"kind": "js",
|
|
8644
|
+
"name": "capOutput",
|
|
8645
|
+
"declaration": {
|
|
8646
|
+
"name": "capOutput",
|
|
8647
|
+
"module": "src/headless-server/compact.ts"
|
|
8648
|
+
}
|
|
8649
|
+
}
|
|
8650
|
+
]
|
|
8651
|
+
},
|
|
8652
|
+
{
|
|
8653
|
+
"kind": "javascript-module",
|
|
8654
|
+
"path": "src/headless-server/index.ts",
|
|
8655
|
+
"declarations": [],
|
|
8656
|
+
"exports": [
|
|
8657
|
+
{
|
|
8658
|
+
"kind": "js",
|
|
8659
|
+
"name": "capOutput",
|
|
8660
|
+
"declaration": {
|
|
8661
|
+
"name": "capOutput",
|
|
8662
|
+
"module": "./compact"
|
|
8663
|
+
}
|
|
8664
|
+
},
|
|
8665
|
+
{
|
|
8666
|
+
"kind": "js",
|
|
8667
|
+
"name": "compactDecision",
|
|
8668
|
+
"declaration": {
|
|
8669
|
+
"name": "compactDecision",
|
|
8670
|
+
"module": "./compact"
|
|
8671
|
+
}
|
|
8672
|
+
},
|
|
8673
|
+
{
|
|
8674
|
+
"kind": "js",
|
|
8675
|
+
"name": "compactEvent",
|
|
8676
|
+
"declaration": {
|
|
8677
|
+
"name": "compactEvent",
|
|
8678
|
+
"module": "./compact"
|
|
8679
|
+
}
|
|
8680
|
+
},
|
|
8681
|
+
{
|
|
8682
|
+
"kind": "js",
|
|
8683
|
+
"name": "firstLines",
|
|
8684
|
+
"declaration": {
|
|
8685
|
+
"name": "firstLines",
|
|
8686
|
+
"module": "./compact"
|
|
8687
|
+
}
|
|
8688
|
+
},
|
|
8689
|
+
{
|
|
8690
|
+
"kind": "js",
|
|
8691
|
+
"name": "leanDecisionText",
|
|
8692
|
+
"declaration": {
|
|
8693
|
+
"name": "leanDecisionText",
|
|
8694
|
+
"module": "./compact"
|
|
8695
|
+
}
|
|
8696
|
+
},
|
|
8697
|
+
{
|
|
8698
|
+
"kind": "js",
|
|
8699
|
+
"name": "shortDecision",
|
|
8700
|
+
"declaration": {
|
|
8701
|
+
"name": "shortDecision",
|
|
8702
|
+
"module": "./compact"
|
|
8703
|
+
}
|
|
8704
|
+
},
|
|
8705
|
+
{
|
|
8706
|
+
"kind": "js",
|
|
8707
|
+
"name": "createHeadlessServer",
|
|
8708
|
+
"declaration": {
|
|
8709
|
+
"name": "createHeadlessServer",
|
|
8710
|
+
"module": "./server"
|
|
8711
|
+
}
|
|
8712
|
+
},
|
|
8713
|
+
{
|
|
8714
|
+
"kind": "js",
|
|
8715
|
+
"name": "DECISION_TEXTS",
|
|
8716
|
+
"declaration": {
|
|
8717
|
+
"name": "DECISION_TEXTS",
|
|
8718
|
+
"module": "./types"
|
|
8719
|
+
}
|
|
8720
|
+
},
|
|
8721
|
+
{
|
|
8722
|
+
"kind": "js",
|
|
8723
|
+
"name": "DEFAULT_DECISION_TEXT",
|
|
8724
|
+
"declaration": {
|
|
8725
|
+
"name": "DEFAULT_DECISION_TEXT",
|
|
8726
|
+
"module": "./types"
|
|
8727
|
+
}
|
|
8728
|
+
},
|
|
8729
|
+
{
|
|
8730
|
+
"kind": "js",
|
|
8731
|
+
"name": "Command",
|
|
8732
|
+
"declaration": {
|
|
8733
|
+
"name": "Command",
|
|
8734
|
+
"module": "./types"
|
|
8735
|
+
}
|
|
8736
|
+
},
|
|
8737
|
+
{
|
|
8738
|
+
"kind": "js",
|
|
8739
|
+
"name": "CompactAction",
|
|
8740
|
+
"declaration": {
|
|
8741
|
+
"name": "CompactAction",
|
|
8742
|
+
"module": "./types"
|
|
8743
|
+
}
|
|
8744
|
+
},
|
|
8745
|
+
{
|
|
8746
|
+
"kind": "js",
|
|
8747
|
+
"name": "CompactDecision",
|
|
8748
|
+
"declaration": {
|
|
8749
|
+
"name": "CompactDecision",
|
|
8750
|
+
"module": "./types"
|
|
8751
|
+
}
|
|
8752
|
+
},
|
|
8753
|
+
{
|
|
8754
|
+
"kind": "js",
|
|
8755
|
+
"name": "CompactEvent",
|
|
8756
|
+
"declaration": {
|
|
8757
|
+
"name": "CompactEvent",
|
|
8758
|
+
"module": "./types"
|
|
8759
|
+
}
|
|
8760
|
+
},
|
|
8761
|
+
{
|
|
8762
|
+
"kind": "js",
|
|
8763
|
+
"name": "Composer",
|
|
8764
|
+
"declaration": {
|
|
8765
|
+
"name": "Composer",
|
|
8766
|
+
"module": "./types"
|
|
8767
|
+
}
|
|
8768
|
+
},
|
|
8769
|
+
{
|
|
8770
|
+
"kind": "js",
|
|
8771
|
+
"name": "DecisionText",
|
|
8772
|
+
"declaration": {
|
|
8773
|
+
"name": "DecisionText",
|
|
8774
|
+
"module": "./types"
|
|
8775
|
+
}
|
|
8776
|
+
},
|
|
8777
|
+
{
|
|
8778
|
+
"kind": "js",
|
|
8779
|
+
"name": "ExtraOp",
|
|
8780
|
+
"declaration": {
|
|
8781
|
+
"name": "ExtraOp",
|
|
8782
|
+
"module": "./types"
|
|
8783
|
+
}
|
|
8784
|
+
},
|
|
8785
|
+
{
|
|
8786
|
+
"kind": "js",
|
|
8787
|
+
"name": "ExtraOpResult",
|
|
8788
|
+
"declaration": {
|
|
8789
|
+
"name": "ExtraOpResult",
|
|
8790
|
+
"module": "./types"
|
|
8791
|
+
}
|
|
8792
|
+
},
|
|
8793
|
+
{
|
|
8794
|
+
"kind": "js",
|
|
8795
|
+
"name": "HeadlessServer",
|
|
8796
|
+
"declaration": {
|
|
8797
|
+
"name": "HeadlessServer",
|
|
8798
|
+
"module": "./types"
|
|
8799
|
+
}
|
|
8800
|
+
},
|
|
8801
|
+
{
|
|
8802
|
+
"kind": "js",
|
|
8803
|
+
"name": "HeadlessServerHandle",
|
|
8804
|
+
"declaration": {
|
|
8805
|
+
"name": "HeadlessServerHandle",
|
|
8806
|
+
"module": "./types"
|
|
8807
|
+
}
|
|
8808
|
+
},
|
|
8809
|
+
{
|
|
8810
|
+
"kind": "js",
|
|
8811
|
+
"name": "Reply",
|
|
8812
|
+
"declaration": {
|
|
8813
|
+
"name": "Reply",
|
|
8814
|
+
"module": "./types"
|
|
8815
|
+
}
|
|
8816
|
+
},
|
|
8817
|
+
{
|
|
8818
|
+
"kind": "js",
|
|
8819
|
+
"name": "ServerOptions",
|
|
8820
|
+
"declaration": {
|
|
8821
|
+
"name": "ServerOptions",
|
|
8822
|
+
"module": "./types"
|
|
8823
|
+
}
|
|
8824
|
+
},
|
|
8825
|
+
{
|
|
8826
|
+
"kind": "js",
|
|
8827
|
+
"name": "Status",
|
|
8828
|
+
"declaration": {
|
|
8829
|
+
"name": "Status",
|
|
8830
|
+
"module": "./types"
|
|
8831
|
+
}
|
|
8832
|
+
},
|
|
8833
|
+
{
|
|
8834
|
+
"kind": "js",
|
|
8835
|
+
"name": "WorkingInfo",
|
|
8836
|
+
"declaration": {
|
|
8837
|
+
"name": "WorkingInfo",
|
|
8838
|
+
"module": "./types"
|
|
8839
|
+
}
|
|
8840
|
+
}
|
|
8841
|
+
]
|
|
8842
|
+
},
|
|
8843
|
+
{
|
|
8844
|
+
"kind": "javascript-module",
|
|
8845
|
+
"path": "src/headless-server/server.ts",
|
|
6886
8846
|
"declarations": [
|
|
6887
8847
|
{
|
|
6888
8848
|
"kind": "function",
|
|
6889
|
-
"name": "
|
|
8849
|
+
"name": "createHeadlessServer",
|
|
6890
8850
|
"return": {
|
|
6891
8851
|
"type": {
|
|
6892
|
-
"text": "
|
|
8852
|
+
"text": "HeadlessServer"
|
|
6893
8853
|
}
|
|
6894
8854
|
},
|
|
6895
8855
|
"parameters": [
|
|
6896
8856
|
{
|
|
6897
|
-
"name": "
|
|
6898
|
-
"type": {
|
|
6899
|
-
"text": "readonly GenesisEventField[]"
|
|
6900
|
-
}
|
|
6901
|
-
},
|
|
6902
|
-
{
|
|
6903
|
-
"name": "row",
|
|
6904
|
-
"type": {
|
|
6905
|
-
"text": "unknown"
|
|
6906
|
-
}
|
|
6907
|
-
},
|
|
6908
|
-
{
|
|
6909
|
-
"name": "{ op, preImage, unchecked }",
|
|
8857
|
+
"name": "options",
|
|
6910
8858
|
"type": {
|
|
6911
|
-
"text": "
|
|
8859
|
+
"text": "ServerOptions"
|
|
6912
8860
|
}
|
|
6913
8861
|
}
|
|
6914
|
-
]
|
|
8862
|
+
],
|
|
8863
|
+
"description": "The headless server (PLAN §5, D7): `node:http` on 127.0.0.1, `GET /health` and `POST /cmd`.\n\nEvery command is APPLIED and then LONG-POLLS (§5.5): the reply comes when the journey next needs the\nperson (an interaction is held by them and ready), a turn ends, the run ends, or something fails, or at\n`maxWaitMs` with `status: \"working\"`. Nothing is lost on a client timeout: the command was applied before\nthe wait, events carry `seq`, and `{op: \"wait\", since}` returns everything after it.\n\nThe session is the only thing it drives; what the host owns is reached through ServerOptions."
|
|
6915
8864
|
}
|
|
6916
8865
|
],
|
|
6917
8866
|
"exports": [
|
|
6918
8867
|
{
|
|
6919
8868
|
"kind": "js",
|
|
6920
|
-
"name": "
|
|
8869
|
+
"name": "createHeadlessServer",
|
|
6921
8870
|
"declaration": {
|
|
6922
|
-
"name": "
|
|
6923
|
-
"module": "src/
|
|
8871
|
+
"name": "createHeadlessServer",
|
|
8872
|
+
"module": "src/headless-server/server.ts"
|
|
6924
8873
|
}
|
|
6925
8874
|
}
|
|
6926
8875
|
]
|
|
6927
8876
|
},
|
|
6928
8877
|
{
|
|
6929
8878
|
"kind": "javascript-module",
|
|
6930
|
-
"path": "src/
|
|
8879
|
+
"path": "src/headless-server/types.ts",
|
|
6931
8880
|
"declarations": [
|
|
6932
8881
|
{
|
|
6933
8882
|
"kind": "variable",
|
|
6934
|
-
"name": "
|
|
8883
|
+
"name": "DECISION_TEXTS",
|
|
6935
8884
|
"type": {
|
|
6936
|
-
"text": "
|
|
8885
|
+
"text": "readonly DecisionText[]"
|
|
6937
8886
|
},
|
|
6938
|
-
"default": "
|
|
6939
|
-
|
|
8887
|
+
"default": "['full', 'lean']"
|
|
8888
|
+
},
|
|
8889
|
+
{
|
|
8890
|
+
"kind": "variable",
|
|
8891
|
+
"name": "DEFAULT_DECISION_TEXT",
|
|
8892
|
+
"type": {
|
|
8893
|
+
"text": "DecisionText"
|
|
8894
|
+
},
|
|
8895
|
+
"default": "'lean'",
|
|
8896
|
+
"description": "What the server uses when neither it nor the command says. Its readers are models that can `read` a view."
|
|
6940
8897
|
}
|
|
6941
8898
|
],
|
|
6942
8899
|
"exports": [
|
|
6943
8900
|
{
|
|
6944
8901
|
"kind": "js",
|
|
6945
|
-
"name": "
|
|
8902
|
+
"name": "DECISION_TEXTS",
|
|
6946
8903
|
"declaration": {
|
|
6947
|
-
"name": "
|
|
6948
|
-
"module": "src/
|
|
8904
|
+
"name": "DECISION_TEXTS",
|
|
8905
|
+
"module": "src/headless-server/types.ts"
|
|
6949
8906
|
}
|
|
6950
|
-
}
|
|
6951
|
-
]
|
|
6952
|
-
},
|
|
6953
|
-
{
|
|
6954
|
-
"kind": "javascript-module",
|
|
6955
|
-
"path": "src/genesis/write-tools.ts",
|
|
6956
|
-
"declarations": [
|
|
6957
|
-
{
|
|
6958
|
-
"kind": "function",
|
|
6959
|
-
"name": "createGenesisWriteTools",
|
|
6960
|
-
"return": {
|
|
6961
|
-
"type": {
|
|
6962
|
-
"text": "{\n toolDefinitions: () => Promise<ChatToolDefinition[]>;\n toolHandlers: ChatToolHandlers;\n /**\n * The events that can get a write tool, as far as the config can tell: an event refused for its\n * op, its rowSources entry or a malformed references, or a modify or delete with no row source,\n * is not among them. Their metadata, read when the tools are first listed, can still withhold one.\n */\n writableEvents: readonly string[];\n}"
|
|
6963
|
-
}
|
|
6964
|
-
},
|
|
6965
|
-
"parameters": [
|
|
6966
|
-
{
|
|
6967
|
-
"name": "resources",
|
|
6968
|
-
"type": {
|
|
6969
|
-
"text": "readonly GenesisAiResource[]"
|
|
6970
|
-
}
|
|
6971
|
-
},
|
|
6972
|
-
{
|
|
6973
|
-
"name": "options",
|
|
6974
|
-
"default": "{}",
|
|
6975
|
-
"type": {
|
|
6976
|
-
"text": "GenesisWriteToolsOptions"
|
|
6977
|
-
}
|
|
6978
|
-
}
|
|
6979
|
-
],
|
|
6980
|
-
"description": "Builds the assistant's write tools from an app's event resources."
|
|
6981
|
-
}
|
|
6982
|
-
],
|
|
6983
|
-
"exports": [
|
|
8907
|
+
},
|
|
6984
8908
|
{
|
|
6985
8909
|
"kind": "js",
|
|
6986
|
-
"name": "
|
|
8910
|
+
"name": "DEFAULT_DECISION_TEXT",
|
|
6987
8911
|
"declaration": {
|
|
6988
|
-
"name": "
|
|
6989
|
-
"module": "src/
|
|
8912
|
+
"name": "DEFAULT_DECISION_TEXT",
|
|
8913
|
+
"module": "src/headless-server/types.ts"
|
|
6990
8914
|
}
|
|
6991
8915
|
}
|
|
6992
8916
|
]
|
|
6993
8917
|
},
|
|
6994
|
-
{
|
|
6995
|
-
"kind": "javascript-module",
|
|
6996
|
-
"path": "src/genesis/write-turn.ts",
|
|
6997
|
-
"declarations": [],
|
|
6998
|
-
"exports": []
|
|
6999
|
-
},
|
|
7000
8918
|
{
|
|
7001
8919
|
"kind": "javascript-module",
|
|
7002
8920
|
"path": "src/main/attachment-controller.ts",
|
|
@@ -11786,7 +13704,7 @@
|
|
|
11786
13704
|
"type": {
|
|
11787
13705
|
"text": "Record<MetaEventType, MetaEventImportance>"
|
|
11788
13706
|
},
|
|
11789
|
-
"default": "{\n 'turn.error': 'high',\n 'tool.failed': 'high',\n 'subagent.failed': 'high',\n 'file.read-failed': 'high',\n 'suggestions.failed': 'high',\n 'context.threshold-crossed': 'high',\n 'context.compacted': 'high',\n 'persistence.restore-orphan': 'high',\n // A save that did not land is silent data loss in progress: the transcript on screen\n // is no longer backed by the store, and every later turn widens the gap. GENC-1511.\n 'persistence.save-failed': 'high',\n\n 'assistant.connected': 'normal',\n 'assistant.disconnected': 'normal',\n 'assistant.popout': 'normal',\n 'assistant.popin': 'normal',\n 'driver.created': 'normal',\n 'state.changed': 'normal',\n 'turn.start': 'normal',\n 'turn.end': 'normal',\n 'turn.retry': 'normal',\n 'tool.unresolved': 'normal',\n 'subagent.started': 'normal',\n 'subagent.completed': 'normal',\n // One per routing decision, with what the classifier answered and what the call cost. Same\n // level as the handoff it produces: you read them together to follow how a turn was routed.\n 'routing.decided': 'normal',\n 'agent.handoff': 'normal',\n 'agent.pinned': 'normal',\n 'agent.unpinned': 'normal',\n 'provider.selected': 'normal',\n 'interaction.requested': 'normal',\n 'interaction.resolved': 'normal',\n // Bookkeeping about an already-finished turn; interesting when reconciling a session total.\n 'interaction.external-cost': 'normal',\n // Spend that was billed but could NOT be recorded (the message was trimmed/condensed away, or\n // the value was not real spend). 'high': it is the one way the session total goes quietly\n // wrong, so it must stand out when reconciling.\n 'interaction.external-cost-dropped': 'high',\n // What came of an answer, recorded by the tool that asked (see recordInteractionOutcome).\n 'interaction.outcome': 'normal',\n // An outcome that could not be recorded: the widget goes on showing only the answer.\n 'interaction.outcome-dropped': 'high',\n // A long action's step starting, finishing, or skipped on resume because it was already done.\n 'interaction.step': 'low',\n // A cut checkpoint taken over after a reload, refused (by sameWork, and kept for a later request;\n // or as malformed), or dropped at flow end, as is the live one.\n 'interaction.checkpoint': 'normal',\n // A claimant handing a pending interaction to the person, or taking it back.\n 'interaction.held': 'normal',\n // A claim on a `userOnly` interaction, refused. Expected when an interceptor claims broadly.\n 'interaction.claim-refused': 'low',\n // A claimant ran one of the surface's actions: what it did, and whether that settled it.\n 'interaction.invoked': 'normal',\n 'autopilot.claimed': 'normal',\n // One per interaction the autopilot does not take, so frequent and mostly expected.\n 'autopilot.declined': 'low',\n 'autopilot.decision-sent': 'low',\n 'autopilot.acted': 'normal',\n 'autopilot.handed-back': 'normal',\n 'autopilot.paused': 'normal',\n 'autopilot.resumed': 'normal',\n // The mode went with the task across a hand-off or its hand-back, rather than ending with the flow.\n 'autopilot.carried': 'normal',\n // The wrapper itself failed: the journey stops being automatic without anyone choosing that.\n 'autopilot.error': 'high',\n // A written answer counted against the step's limit; reaching it withdraws `reply`.\n 'autopilot.refinement': 'normal',\n // The autopilot showed its own widget because a working turn ended needing the person.\n 'autopilot.handback-presented': 'normal',\n // The autopilot was given the whole visible transcript: its first decision, a rebuild, or after\n // a compaction removed the last message it saw.\n 'autopilot.catch-up': 'normal',\n // Autopilot spend that reached no message, so it is missing from the session total.\n 'autopilot.cost-dropped': 'high',\n 'external-diagnostics.folded': 'normal',\n 'session.cleared': 'normal',\n 'session.switched': 'low',\n 'session.switch-deferred': 'low',\n 'persistence.restored': 'normal',\n // Whether a restored flow will be re-activated and resumed (GENC-1662), and how much the trim cut.\n 'persistence.resume-planned': 'normal',\n // A planned resume that did not run, and why (GENC-1662) — the divider was put back to plain.\n 'persistence.resume-withdrawn': 'normal',\n 'persistence.suppressed': 'normal',\n 'persistence.not-resumable': 'normal',\n\n 'driver.wired': 'low',\n 'driver.unwired': 'low',\n 'context.updated': 'low',\n 'context.condensed': 'low',\n 'panel.toggled': 'low',\n 'persistence.toggled': 'low',\n 'persistence.saved': 'low',\n 'attachment.added': 'low',\n}",
|
|
13707
|
+
"default": "{\n 'turn.error': 'high',\n 'tool.failed': 'high',\n 'subagent.failed': 'high',\n 'file.read-failed': 'high',\n 'suggestions.failed': 'high',\n 'context.threshold-crossed': 'high',\n 'context.compacted': 'high',\n 'persistence.restore-orphan': 'high',\n // A save that did not land is silent data loss in progress: the transcript on screen\n // is no longer backed by the store, and every later turn widens the gap. GENC-1511.\n 'persistence.save-failed': 'high',\n\n 'assistant.connected': 'normal',\n 'assistant.disconnected': 'normal',\n 'assistant.popout': 'normal',\n 'assistant.popin': 'normal',\n 'driver.created': 'normal',\n 'state.changed': 'normal',\n 'turn.start': 'normal',\n 'turn.end': 'normal',\n 'turn.retry': 'normal',\n 'tool.unresolved': 'normal',\n 'subagent.started': 'normal',\n 'subagent.completed': 'normal',\n // One per routing decision, with what the classifier answered and what the call cost. Same\n // level as the handoff it produces: you read them together to follow how a turn was routed.\n 'routing.decided': 'normal',\n 'agent.handoff': 'normal',\n 'agent.pinned': 'normal',\n 'agent.unpinned': 'normal',\n 'provider.selected': 'normal',\n 'interaction.requested': 'normal',\n 'interaction.resolved': 'normal',\n // Bookkeeping about an already-finished turn; interesting when reconciling a session total.\n 'interaction.external-cost': 'normal',\n // Spend that was billed but could NOT be recorded (the message was trimmed/condensed away, or\n // the value was not real spend). 'high': it is the one way the session total goes quietly\n // wrong, so it must stand out when reconciling.\n 'interaction.external-cost-dropped': 'high',\n // What came of an answer, recorded by the tool that asked (see recordInteractionOutcome).\n 'interaction.outcome': 'normal',\n // An outcome that could not be recorded: the widget goes on showing only the answer.\n 'interaction.outcome-dropped': 'high',\n // A long action's step starting, finishing, or skipped on resume because it was already done.\n 'interaction.step': 'low',\n // A cut checkpoint taken over after a reload, refused (by sameWork, and kept for a later request;\n // or as malformed), or dropped at flow end, as is the live one.\n 'interaction.checkpoint': 'normal',\n // A claimant handing a pending interaction to the person, or taking it back.\n 'interaction.held': 'normal',\n // A claim on a `userOnly` interaction, refused. Expected when an interceptor claims broadly.\n 'interaction.claim-refused': 'low',\n // A claimant ran one of the surface's actions: what it did, and whether that settled it.\n 'interaction.invoked': 'normal',\n 'autopilot.claimed': 'normal',\n // One per interaction the autopilot does not take, so frequent and mostly expected.\n 'autopilot.declined': 'low',\n 'autopilot.decision-sent': 'low',\n 'autopilot.acted': 'normal',\n 'autopilot.handed-back': 'normal',\n 'autopilot.paused': 'normal',\n 'autopilot.resumed': 'normal',\n // The mode went with the task across a hand-off or its hand-back, rather than ending with the flow.\n 'autopilot.carried': 'normal',\n // The wrapper itself failed: the journey stops being automatic without anyone choosing that.\n 'autopilot.error': 'high',\n // A written answer counted against the step's limit; reaching it withdraws `reply`.\n 'autopilot.refinement': 'normal',\n // The autopilot showed its own widget because a working turn ended needing the person.\n 'autopilot.handback-presented': 'normal',\n // The autopilot was given the whole visible transcript: its first decision, a rebuild, or after\n // a compaction removed the last message it saw.\n 'autopilot.catch-up': 'normal',\n // Autopilot spend that reached no message, so it is missing from the session total.\n 'autopilot.cost-dropped': 'high',\n // A headless session attached to the driver: from here a host with no screen is the person.\n 'headless.attached': 'normal',\n // The host settled an interaction raw, without the widget's own actions: its result went to the\n // tool as given, unchecked by anything the widget would have enforced.\n 'headless.raw-resolved': 'normal',\n 'external-diagnostics.folded': 'normal',\n 'session.cleared': 'normal',\n 'session.switched': 'low',\n 'session.switch-deferred': 'low',\n 'persistence.restored': 'normal',\n // Whether a restored flow will be re-activated and resumed (GENC-1662), and how much the trim cut.\n 'persistence.resume-planned': 'normal',\n // A planned resume that did not run, and why (GENC-1662) — the divider was put back to plain.\n 'persistence.resume-withdrawn': 'normal',\n 'persistence.suppressed': 'normal',\n 'persistence.not-resumable': 'normal',\n\n 'driver.wired': 'low',\n 'driver.unwired': 'low',\n 'context.updated': 'low',\n 'context.condensed': 'low',\n 'panel.toggled': 'low',\n 'persistence.toggled': 'low',\n 'persistence.saved': 'low',\n 'attachment.added': 'low',\n}",
|
|
11790
13708
|
"description": "Importance is intrinsic to the event *type*, not the instance, so it's\ndefined once here and stamped automatically by recordMetaEvent — call\nsites never pass it. The `Record` is exhaustive: adding a `MetaEventType`\nwithout a level here is a compile error.\n\n- `high` — failures and hard limits you almost always want to see.\n- `normal` — meaningful session flow you read to follow what happened.\n- `low` — frequent UI / bookkeeping noise, usually safe to skip."
|
|
11791
13709
|
},
|
|
11792
13710
|
{
|
|
@@ -11948,7 +13866,7 @@
|
|
|
11948
13866
|
"type": {
|
|
11949
13867
|
"text": "readonly string[]"
|
|
11950
13868
|
},
|
|
11951
|
-
"default": "[\n 'This is an exported debug log for the Genesis AI assistant. Read it top-to-bottom.',\n \"`sessionUsage` is what this session spent: `costUsd` (USD, provider-reported per request and summed, cache discounts already applied) plus the four TOKEN BUCKETS — `uncachedInputTokens`, `cacheReadTokens`, `cacheWriteTokens`, `outputTokens`. Those four are disjoint and safe to add up for a total-tokens figure; the per-message fields further down are NOT (see kind:'message'). Each bucket bills at a different rate — cache reads a fraction of uncached input, cache writes a premium, output highest — so a big token count against a small cost means the prompt was mostly cache hits, not a missing charge. It covers sub-agent turns and spend a compaction banked, so for the CONVERSATION it is the authoritative total: prefer it over re-summing the timeline, which can be short by whatever the ring buffers evicted. The same figures appear under `meta.context`. It is as current as the snapshot it came from: the assistant's own download stamps a fresh one, but a log stitched by another tool can carry an older one — compare `meta.timestamp` with the last timeline entry, and if it is well behind, read these totals as historical and fall back to summing the timeline. One scope caveat: it is derived from the transcript, so it excludes billed calls that produced no message (a blank or refused attempt that was retried — see kind:'turn'.`usage`). Summing the turns can therefore come out HIGHER than this, and the difference is exactly that discarded spend, not a double-count.\",\n \"What 'session' means for those figures: the CURRENT conversation under this session key (a host-supplied per-project id, or the element id + header title when the host supplies none) — which is not necessarily everything in `timeline`. It is re-derived from the live transcript, so it spans page loads only when the chat is being remembered, and a Clear resets it to zero. `timeline` is append-only regardless: it keeps every page load and the pre-Clear conversation, with the session.cleared event as the boundary. So on a long-lived log, read these totals as the latest conversation's and the earlier sections as history — not as a total of the whole file.\",\n '`timeline` is the entire session as one array, already sorted chronologically by `timestamp` (ISO 8601). Every entry has a `kind`.',\n 'Timestamps are millisecond-resolution; entries that share the same millisecond are ordered by a fixed kind rank (event, then turn, then message), which is a heuristic and may not reflect exact causal order within that millisecond — e.g. a user message and the turn it triggered, or a final assistant message and its turn.end event, can appear in either order depending on whether they landed in the same millisecond. Read the logical structure of a turn rather than over-interpreting the micro-ordering of co-timestamped entries of different kinds.',\n \"kind:'message' — the conversation. `role` is user/assistant/tool/system-event/synthetic-user; `agentName` says which agent produced it; `toolCalls`/`toolResult`/`interaction` carry tool and widget activity; `inputTokens`/`outputTokens`/`cost` are per-message LLM usage, where `inputTokens` is the WHOLE prompt for that request and `cacheReadTokens`/`cacheWriteTokens` BREAK IT DOWN rather than add to it — uncached input is `inputTokens` minus those two, and adding the cache fields to `inputTokens` counts the prompt twice. The cache fields are absent on providers that report no cache split (Gemini reports reads only, since implicit caching bills no write) and on messages persisted before they existed, so read them as 0 when missing. Each bucket bills at a different rate — cache reads a fraction of uncached input, cache writes a premium, output highest — so a large token count at a small cost means the prompt was mostly cache hits. `externalCostUsd` is any non-LLM cost a widget reported for its own external service calls (folded into the session cost total alongside `cost`). On model-produced assistant messages, `model` is the concrete model id that generated it (e.g. 'gemini-2.5-flash-lite') and `providerName` is the registry slot it resolved under (e.g. a tier name like 'high'/'low', or the default); together they attribute the message — and any tool calls it carries — to an exact model even across a mid-session vendor/tier switch, where one slot name can map to different models before and after the switch. Both are undefined on any entry that is NOT an LLM response: non-assistant roles (user/tool/system-event) and 'synthetic-user' echoes; assistant interaction/widget entries (empty content carrying an `interaction` — a rendered widget, not a model turn); driver-authored assistant fallbacks (the timeout, repeated-malformed-call, and empty-response apology messages); and messages restored from a session persisted before these fields existed. One partial case: on a genuine model turn whose provider exposes no `getStatus` (or reports no model), `providerName` is still set but `model` alone is undefined. A 'synthetic-user' message is a display-only echo of an interaction outcome (e.g. the answer a widget reported): it renders on the user's side of the chat and `agentName` is the agent that created it, but it is never sent to the LLM — so it has no matching 'turn' and the model learns the outcome only from the corresponding tool result. An echo of an answer an interceptor (such as an autopilot) gave is NOT synthetic-user: see the delegated-messages paragraph.\",\n 'The autopilot (GENC-1660) runs on a driver of its own, and everything it did is harvested into this log: entries with delegate: autopilot and an agentName ending in › Autopilot are its turns (the decision message it was sent is the user message of its turn, so what it was shown is there verbatim; its systemPrompt is its grounding, such as the brief), its tool calls (widget_read, widget_act, hand_back, any read-only tools of its own, and its widget tools — reads with parameters that a widget type declares, routed to the interaction of that type being decided and refused with a reason when none is, offered on every decision so its tool list never changes; while one is open its tail starts with a line naming them) and their results (a read, view or widget tool, is capped at about 20,000 characters, cut with a note asking for less, and leaves its history at the end of the decision as a one-line note), and its own events. Its cost is already in the session total: it is booked as externalCostUsd on the interaction each decision answered, or, for a written question it answered, on the user message it sent on the user behalf (delegate: autopilot), so do not add its turns to that total. Spend that reached no message is recorded as autopilot.cost-dropped instead.',\n \"Delegated messages (GENC-1660): a message with a `delegate` field was written or sent ON THE USER'S BEHALF by a driver decorator, and `delegate` names it (e.g. autopilot). The platform stamps it; nothing else can. It renders as the assistant whatever its role. A delegated `user` message was NOT typed by the user: it is an answer given on their behalf, and the model read it with `delegateFraming` in brackets in front of the content (the stored `content` is the bare text). A delegated `assistant` message is display-only (`excludeFromProvider`): the decorator's narration note, or, when its answer carried no note, the widget's own echo of the answer (its `userMessage`), shown as the assistant and never as the person. A widget answer a decorator gave with a note is not echoed at all: the note already says what was chosen. To tell what the person decided from what was decided for them, read `interaction.answeredBy` and these fields, never the role alone.\",\n \"Sub-agent messages appear inline. When a tool delegates to a sub-agent (via `requestSubAgent`), the sub-agent's whole conversation — its own assistant/tool messages, each with their own `content`/`thinking`/`toolCalls`/`toolResult` and per-message `model`/`providerName`/`inputTokens`/`outputTokens`/`cacheReadTokens`/`cacheWriteTokens`/`cost` — is hoisted into the timeline as ordinary kind:'message' entries, interleaved by timestamp right after the tool call that spawned them (so you read the delegation top-to-bottom). A hoisted entry is marked: `subAgentDepth` is its delegation depth (1 for a sub-agent, 2 for a sub-agent's sub-agent, …), `subAgentOf` is the id of the parent tool call that spawned it (correlates it back even when two sub-agents run in one parent turn), `subAgentName` is the sub-agent's own name, and `agentName` is rewritten to a `\\\"<parent> › <sub-agent>\\\"` breadcrumb (composing when nested, e.g. `\\\"UI Builder › Planner › Grounding\\\"`). The sub-agent's per-LLM-call snapshots also surface as kind:'turn' entries with an N-M `turnIndex`, and subagent.started/completed (or subagent.failed) events bracket the run. Per-message `cost` on hoisted entries is already part of the session total (it is summed from the un-flattened history), so summing the top-level timeline does NOT double-count.\",\n \"kind:'turn' — one LLM call. `turnIndex` is a string: a top-level turn is the bare counter ('0', '1', …); a sub-agent's turns are numbered under the parent turn that activated them ('3-1', '3-2', …, and a nested sub-agent contributes '3-2-1', …), and `agentName` names the agent that ran the turn. `systemPrompt` and `toolNames` are what the model saw. A systemPrompt of '<repeated — identical to turn N>' was byte-identical to turn N and de-duplicated; the full prompt is shown whenever it changes (often because a stateful agent advanced), so prompt evolution is visible.\",\n \"kind:'turn'.`model`/`providerName`/`provider` — which model ran that call: the concrete model id, the registry slot it resolved under (a tier name like 'high'/'low', or the default), and the vendor. Recorded per CALL, so an agent whose `provider` selector varies by state — a flow that plans on a high tier and executes on a low one — has every step attributed, including calls that produced no message. `model` is the SERVING model where the provider reports one, so a turn answered by a server-side fallback names the model that answered rather than the one requested; it always matches the `model` on the message that call produced. Absent when the provider exposes no `getStatus` and the transport stamped nothing.\",\n \"kind:'turn'.`usage` — what that ONE call cost, in the same four-bucket + `costUsd` shape as `sessionUsage`. Absent while a call is in flight and on providers that report no usage. This is the SAME money as the message the call produced, not extra money: never add turn usage to message usage, and read a turn plus its message as one charge. Its distinct value is the calls that produced NO message — a blank or refused response is billed and then discarded before the retry, so the turn entry is the only record of that spend, and a turn with `usage` but no message after it is exactly that. `costUsd: 0` alongside a nonzero token count means the provider reported no price, not that the call was free.\",\n \"kind:'turn'.`agentSnapshot` — the active agent's own view of its internal state, captured at that turn. An agent opts into this by exposing a `getDebugSnapshot()` that returns JSON-serializable per-state info; stateful/flow agents wire it automatically, so you can watch a flow advance turn-by-turn (e.g. current step, cursor, collected fields, pending changes). Absent for agents that don't expose one.\",\n \"kind:'event' — a meta/lifecycle event. `type` names it (see below); `detail` carries structured data. `detail.placement` is the emitting UI instance: 'bubble' (collapsed), 'panel' (popped-out), or 'standalone'.\",\n \"Each 'event' also has an `importance`: 'high' (failures/limits — turn.error, tool.failed, subagent.failed, file.read-failed, suggestions.failed, context.threshold-crossed), 'normal' (session flow — connects, turns, retries, handoffs, agent/provider changes, interactions, sub-agent start/complete), or 'low' (skippable UI/bookkeeping noise — panel.toggled, attachment.added, driver.wired/unwired, context.updated, context.condensed). To skim, ignore importance:'low'; to triage a failure, filter to importance:'high' then read the nearby messages and turns. A 'high' turn.error is often preceded by one or more 'normal' turn.retry events for the same reason — read them together to see how many attempts were made before bailing. 'message' and 'turn' entries carry no importance — they are the substance, always read them.\",\n 'Event types: assistant.connected/disconnected (mount + placement + whether the session was created or restored), assistant.popout/popin (window placement), driver.created/wired/unwired (which driver is live and why it stops/starts responding across a popout), state.changed (idle↔loading), turn.start/turn.end (turn boundary; turn.end carries durationMs), turn.retry (a recoverable in-turn retry — detail.reason plus attempt/maxAttempts; for malformed calls also finishMessage; for empty responses also the provider finishReason + thoughtsTokens + parts breakdown), turn.error (a turn failed or hit a guardrail — detail.reason is one of exception/malformed-function-call/empty-response/unknown-tool-limit/max-iterations/response-truncated/refusal/budget-exhausted/provider-refused/context-exhausted/ai-service-error, plus reason-specific diagnostics: attempts (for empty-response also finishReason + thoughtsTokens + a parts breakdown, distinguishing a thinking-only STOP from a truly empty turn), finishMessage, for response-truncated the model + maxTokens + outputTokens + tools, unknownTools (split into staleTools — real earlier this activation but retired by the current state or hidden behind an open exclusive fold — and hallucinatedTools — never advertised) + availableTools, iterations + limit, for budget-exhausted the budgetUsd + spentUsd figures reported by the proxy plus the resolved vendor, for provider-refused the kind (spend|auth) plus the upstream status and error type — the vendor refusing the ACCOUNT rather than us refusing to spend, so the remedy is a top-up or a key rotation rather than a raised cap, and the kind is the only place that distinction survives because the user-facing copy is deliberately cause-free, for context-exhausted the estimated contextTokens against the guard that stopped the turn plus the iterations reached — the driver ending a runaway tool loop at the edge of the context window rather than issuing a request the provider would reject, so the transcript survives intact and can still be compacted, for ai-service-error the code (one of AI_SERVICE_ERROR_CODES, e.g. NO_API_KEY) and the status the AI service answered with — its own text goes to the browser console only, or name + message for exceptions), tool.failed (a tool threw), tool.unresolved (the model called a tool that could not be dispatched — detail.kind is folded/fold-hidden/stale/unknown, plus tool + agent and, for the counted kinds, the consecutive streak; the recurring lead-up to an unknown-tool-limit turn.error), subagent.started/completed/failed (the lifecycle of a `requestSubAgent` delegation — detail.agent names the sub-agent; these bracket the sub-agent turns that appear as kind:turn entries with an N-M `turnIndex`; subagent.failed also carries detail.reason, one of max_iterations/malformed_tool_call/empty_response/unknown_tool_limit/timeout/response_truncated/refusal/budget_exhausted/provider_refused/context_exhausted/ai_service_error; budget_exhausted and provider_refused are terminal for the PARENT turn too, and so is ai_service_error when the refusal is about the service rather than the request and came from the vendor the parent calls — the parent stops rather than calling the model again into the same wall; after context_exhausted the parent goes on, but its own next call is likely to stop on the same guard), agent.handoff (routing; from=null is the initial activation), agent.pinned/unpinned (forced routing), routing.decided (ONE PER ROUTING DECISION — see its own paragraph below), provider.selected (the resolved provider for the upcoming turns — detail.provider is the registry SLOT/tier name, detail.model the concrete model behind it and detail.vendor its vendor; emitted only when the slot CHANGES, so read the per-turn `model` for the model of any given call rather than assuming the nearest event still applies), interaction.requested/resolved (blocking user widgets — explain quiet gaps; note that when a sub-agent opens a widget, detail.agent — and the agentName on the interaction message — is the HOST agent that owns the widget, NOT the sub-agent that asked, because widgets render and resolve on the host driver; detail.ownerPath names the agents that actually asked, outermost first, the last being the one whose tool requested it, and detail.heldBy says who held it when it opened: user, or the id of the interceptor that claimed it, such as autopilot; on interaction.resolved, detail.answeredBy is who answered — the claimant id when it settled through its own hold, user for any other answer (a click counts as the person even on a widget a claimant held) — absent when it closed unanswered (a timeout or a stop), and absent too when it settled by itself other than through the hold of a claimant — a widget registered resolvesItself (one that does its work and settles on its own, asking the person nothing, such as a generation run), or one outcome its controller said settled itself (ctx.resolve with resolvedItself, such as a generation phase that failed outright before its review gate ever asked anything) — which then carries detail.resolvedItself: true instead, as the interaction message does — nobody answered it, and the platform cannot tell it finishing from the person interrupting it (a Skip), so only the result of the widget itself can say which; the same value is stamped on the interaction message as answeredBy and on the result the asking tool handler receives (absent there in the same cases), and when it is not user the tool result that interaction returned carries a decidedOnUsersBehalf record, so the model was told the choice was not made by the person; detail.edits, present only when non-zero, counts the editing actions a claimant ran on the widget before it was settled, whoever settled it, and those edits are stamped on the interaction message as edits, each with by, action, choice and args when it had some, in the order they ran, while a decidedOnUsersBehalf record carries their choice texts as edits, and when the person settled it after such edits the tool result carries an editedOnUsersBehalf record instead — the framing and those choice texts — so the model knows the widget was changed on the user behalf before the user answered, and that the user then confirmed it by finishing it), interaction.held (a claimant moved a pending interaction to the person or back to itself — detail.heldBy is the new holder, detail.claimant the interceptor; detail.late: true is an interceptor that declined it when it opened claiming it afterwards, such as the autopilot resumed while it was open; a widget held by anything but user was not answered by the person), interaction.claim-refused (a claim on a userOnly interaction, which stays with the person — detail.claimant + reason), autopilot.* (the autopilot, a decorator that answers interactions on behalf of the user — autopilot.claimed / autopilot.declined say whether it took each interaction and, for a decline, detail.reason: paused, other-flow, no-autopilot, unavailable, userOnly, policy or no-controller; one declined as paused that is still open when the person resumes the autopilot is looked at again, and the autopilot.claimed or autopilot.declined recorded for it then carries detail.onResume: true (a decline then can also be claimed-elsewhere, another interceptor having claimed it first); a restored mode looks at nothing; autopilot.decision-sent is what it was sent (detail.chars; detail.nothingEnabled: true when every action on the widget was unavailable — a gate whose controller said it was asking, such as a failed build the autopilot may not cancel — so it could only hand it back, which it may then do even after the person asked it to decide it itself; a widget whose controller says it is working (ctx.setWorking) is never sent a decision until it says it is asking, even when an action is enabled or the person resumes the autopilot); autopilot.acted is what it did (detail.action, detail.note, detail.finished); autopilot.handed-back is a decision it gave to the person (detail.reason and detail.trigger: model, no-decision or error); autopilot.paused / autopilot.resumed are mode changes (detail.scope, detail.trigger, detail.decideYourself when the person resumed during a hand-back; detail.trigger is restored when the mode came back with the session after a reload, applied once its flow re-activated, which starts nothing by itself); autopilot.carried is the mode, running or paused, going with the task to the agent that took it over, rather than ending with the flow as on any other change of flow owner: to the target of a hand-off, or back to its caller on the hand-back (detail.from, detail.to, detail.mode); a pause the person chose goes with it, and Stop and Clear still end it; a mode restored for the target of a hand-off applies to its caller when the reload hands back; autopilot.error is the wrapper itself failing; autopilot.refinement counts a refining action against its step — a written answer (reply) or a widget action declared refines, such as a regenerate with instructions, counted together (detail.action, detail.stepKey, detail.count, detail.limitReached, after which every refining action is withdrawn for that step: not listed, and refused; the decision and every relisting of its actions say how many are left at the step, as a line Refinements left at this step: N, wherever the widget has a refining action); autopilot.handback-presented is the turn-level hand-back, shown when a working turn ended needing the person with no widget to hand over (detail.why: max-iterations, context-exhausted, failure or question; detail.options; detail.choice once answered); autopilot.catch-up is the autopilot being given the whole visible transcript at once (detail.why: first, for its first decision in a flow or after a reload; size, when its own history passed its budget and was rebuilt short — detail.ownChars; or compacted, when a compaction removed the last message it had seen, so it reads the summary and everything since, short; in each, what it had sent on the user behalf is included and labelled as its own, since its own history does not hold it); autopilot.cost-dropped is autopilot spend that no message carries, so it is NOT in the session total (detail.costUsd and detail.why: handed-back, aborted or stale for a written question it answered that no reply was sent for — stale when a pause, a resume, a new turn or the end of its flow came before the answer landed, which then went nowhere — or no-recorder when the driver had no way to book a decision to its interaction); a hand-back trigger can also be budget (the decision passed its spend cap), watchdog (its work went quiet: no ready surface and no heartbeat, or its own decision stalled with no model call landing, which stops that decision) or detached (the autopilot was removed while it held the interaction, which went to the person with no reason shown). To debug one autopilot decision, follow its interactionId: interaction.requested (heldBy), autopilot.claimed, autopilot.decision-sent, autopilot.acted or autopilot.handed-back, interaction.invoked, interaction.resolved (answeredBy), then the next turn of the working agent), interaction.invoked (a claimant ran one of the actions the widget itself exposes, through its hold, the same code the button runs — detail.claimant, detail.action (an option id, select or reply) and detail.finished, whether that settled the interaction, and when it did not, the run is recorded as an edit; the choice and narration it recorded reach the result of the tool that asked as decidedOnUsersBehalf), interaction.step (a long action run as named steps through runSteps, which survive a reload — detail.step and detail.outcome: started, done, skipped when the step was already done before a reload, or resumed when it started before a reload and runs again with what it saved part-way, such as a job id it re-attaches to), interaction.checkpoint (the checkpoints a conversation keeps for its long actions: the one in flight, and each one a reload cut, held apart until a request of its own widget type takes it over, so a resumed flow that opens other long widgets first, which save their own, loses nothing — detail.action: resumed when a reload cut the work and a request of the same widget type that the registration sameWork agrees is the same work took it over, refused when sameWork said a new request is different work (detail.saved is the identity it kept; detail.kept: true, since it stays for a later request of that type, and is offered to every one until one agrees) or when runSteps found the handed-over checkpoint malformed and started fresh (detail.reason, detail.saved), or cleared when its flow ended, once per checkpoint, with detail.cut: true for one a reload cut that nothing took over), context.updated/threshold-crossed (token + cost), context.condensed (a stale tool payload was collapsed out of the model-bound history by a `condenseWhen` declaration on the tool — detail.tool + toolCallId, target args|response, trigger (superseded:<key> or age:<n>), stubLen, and an estimated tokensSaved; stored history and this log keep the FULL payload, so the model-visible slice at any point is the full history minus the condensations recorded up to then), panel.toggled, attachment.added, file.read-failed, suggestions.failed.',\n 'Sub-agent meta events: a sub-agent\\'s own turn.retry/turn.error/tool.failed/tool.unresolved events are merged into this same timeline, tagged with `detail.subAgent` — a `\"<parent> › <sub-agent>\"` breadcrumb that composes when nested (e.g. `\"UI Builder › Planner › Grounding\"`) — and interleaved by their original timestamps within the subagent.started→completed/failed bracket. These are the per-attempt/per-failure signals that do NOT appear among the sub-agent\\'s (hoisted) messages: a malformed/empty attempt that gets retried produces no message, and the stale-vs-hallucinated split and streak counts live only on the event. A sub-agent\\'s high-volume, message-derivable events (turn.start/turn.end, provider.selected, context.updated) are intentionally NOT merged — read its hoisted messages for model/tokens/cost and turn-by-turn activity, and the bracketing subagent.* events for the run\\'s span.',\n \"`meta` holds context captured at export time: agentSummary (full agent configs), context (active model, contextTokens/contextLimit/contextUsagePercent for the last call, and the session totals — sessionCostUsd, sessionTokensConsumed, and the four-bucket sessionUsage lifted to the top of this log), activeDebugSnapshot (the active agent's `getDebugSnapshot()` taken fresh at export — reflects state NOW, which may have advanced beyond the last turn's agentSnapshot), debug (optional host-supplied debug state), host, and the export timestamp.\",\n 'Note the two different scopes in `meta.context`: `contextTokens` is the prompt size of the LAST call (against `contextLimit`, the model context window), while `sessionUsage`/`sessionTokensConsumed` are cumulative BILLED throughput. Every turn resends the conversation, so the cumulative figure counts each turn’s prompt again in the next turn’s and is expected to dwarf the context size — that is not double-counting.',\n \"kind:'event' type 'routing.decided' — how ONE user turn was routed, emitted by the orchestrating driver before the agent runs. Only a user turn is routed: a hand-off names its target, so the agents a hand-off runs show up as agent.handoff events, not as more routing.decided. `decision` is why that agent was chosen: 'classified' (the classifier ran and picked one), 'no-match' (it ran and answered -1 — nothing listed covers the request), 'pinned' (a user pin, an agent named for that one message by the send's `agent` option, or an active stateful flow owned the turn, so no call was made), 'single-candidate'/'no-specialists' (configuration left nothing to decide), 'provider-unavailable' (the registry default exposes no chat()), 'classifier-failed' (every attempt threw — `error` carries the last one). `to` names the agent and `fallback` says whether that agent is the fallback. `candidates` is what was ON THE BALLOT — every classifier-eligible specialist — in ballot order, so `index` — the classifier's own answer — indexes it directly. `candidates` is absent on the three decisions that put nothing to a vote — 'pinned', 'single-candidate', 'no-specialists'. It IS present on 'provider-unavailable', which is not an exception worth removing: the ballot was built there, it simply never got sent. `attempts` covers the retry ladder. `durationMs` is on EVERY routing.decided, and is the field to read when a decision looks wrong: the decisions that can reach the fallback ('no-match', 'no-specialists', 'provider-unavailable', 'classifier-failed') are told apart by the clock as much as by their name, because a fallback routing that resolved in tens of milliseconds made no network call at all whatever its `decision` says.\",\n \"kind:'event' type 'routing.decided'.`usage` — what that classifier call cost, in the same four-bucket + costUsd shape as `sessionUsage`, plus `model`. Absent on the decisions that make no call (see 'pinned' and the configuration ones). THIS SPEND IS NOT IN `sessionUsage`: a classifier call never enters the transcript and `sessionUsage` is derived from the transcript, so classifier cost is missing from the session total by construction, not by accident. Sum these events to close that gap — it is the one component of a session's real spend that the totals cannot see.\",\n 'To debug a failure: find the last turn.error or tool.failed, then read upward for the user message, the turn(s), and the agent/provider/state events that led into it. For a turn that went to the wrong agent, read its routing.decided first — `decision` says whether anything was actually asked.',\n]",
|
|
13869
|
+
"default": "[\n 'This is an exported debug log for the Genesis AI assistant. Read it top-to-bottom.',\n \"`sessionUsage` is what this session spent: `costUsd` (USD, provider-reported per request and summed, cache discounts already applied) plus the four TOKEN BUCKETS — `uncachedInputTokens`, `cacheReadTokens`, `cacheWriteTokens`, `outputTokens`. Those four are disjoint and safe to add up for a total-tokens figure; the per-message fields further down are NOT (see kind:'message'). Each bucket bills at a different rate — cache reads a fraction of uncached input, cache writes a premium, output highest — so a big token count against a small cost means the prompt was mostly cache hits, not a missing charge. It covers sub-agent turns and spend a compaction banked, so for the CONVERSATION it is the authoritative total: prefer it over re-summing the timeline, which can be short by whatever the ring buffers evicted. The same figures appear under `meta.context`. It is as current as the snapshot it came from: the assistant's own download stamps a fresh one, but a log stitched by another tool can carry an older one — compare `meta.timestamp` with the last timeline entry, and if it is well behind, read these totals as historical and fall back to summing the timeline. One scope caveat: it is derived from the transcript, so it excludes billed calls that produced no message (a blank or refused attempt that was retried — see kind:'turn'.`usage`). Summing the turns can therefore come out HIGHER than this, and the difference is exactly that discarded spend, not a double-count.\",\n \"What 'session' means for those figures: the CURRENT conversation under this session key (a host-supplied per-project id, or the element id + header title when the host supplies none) — which is not necessarily everything in `timeline`. It is re-derived from the live transcript, so it spans page loads only when the chat is being remembered, and a Clear resets it to zero. `timeline` is append-only regardless: it keeps every page load and the pre-Clear conversation, with the session.cleared event as the boundary. So on a long-lived log, read these totals as the latest conversation's and the earlier sections as history — not as a total of the whole file.\",\n '`timeline` is the entire session as one array, already sorted chronologically by `timestamp` (ISO 8601). Every entry has a `kind`.',\n 'Timestamps are millisecond-resolution; entries that share the same millisecond are ordered by a fixed kind rank (event, then turn, then message), which is a heuristic and may not reflect exact causal order within that millisecond — e.g. a user message and the turn it triggered, or a final assistant message and its turn.end event, can appear in either order depending on whether they landed in the same millisecond. Read the logical structure of a turn rather than over-interpreting the micro-ordering of co-timestamped entries of different kinds.',\n \"kind:'message' — the conversation. `role` is user/assistant/tool/system-event/synthetic-user; `agentName` says which agent produced it; `toolCalls`/`toolResult`/`interaction` carry tool and widget activity; `inputTokens`/`outputTokens`/`cost` are per-message LLM usage, where `inputTokens` is the WHOLE prompt for that request and `cacheReadTokens`/`cacheWriteTokens` BREAK IT DOWN rather than add to it — uncached input is `inputTokens` minus those two, and adding the cache fields to `inputTokens` counts the prompt twice. The cache fields are absent on providers that report no cache split (Gemini reports reads only, since implicit caching bills no write) and on messages persisted before they existed, so read them as 0 when missing. Each bucket bills at a different rate — cache reads a fraction of uncached input, cache writes a premium, output highest — so a large token count at a small cost means the prompt was mostly cache hits. `externalCostUsd` is any non-LLM cost a widget reported for its own external service calls (folded into the session cost total alongside `cost`). On model-produced assistant messages, `model` is the concrete model id that generated it (e.g. 'gemini-2.5-flash-lite') and `providerName` is the registry slot it resolved under (e.g. a tier name like 'high'/'low', or the default); together they attribute the message — and any tool calls it carries — to an exact model even across a mid-session vendor/tier switch, where one slot name can map to different models before and after the switch. Both are undefined on any entry that is NOT an LLM response: non-assistant roles (user/tool/system-event) and 'synthetic-user' echoes; assistant interaction/widget entries (empty content carrying an `interaction` — a rendered widget, not a model turn); driver-authored assistant fallbacks (the timeout, repeated-malformed-call, and empty-response apology messages); and messages restored from a session persisted before these fields existed. One partial case: on a genuine model turn whose provider exposes no `getStatus` (or reports no model), `providerName` is still set but `model` alone is undefined. A 'synthetic-user' message is a display-only echo of an interaction outcome (e.g. the answer a widget reported): it renders on the user's side of the chat and `agentName` is the agent that created it, but it is never sent to the LLM — so it has no matching 'turn' and the model learns the outcome only from the corresponding tool result. An echo of an answer an interceptor (such as an autopilot) gave is NOT synthetic-user: see the delegated-messages paragraph.\",\n 'The autopilot (GENC-1660) runs on a driver of its own, and everything it did is harvested into this log: entries with delegate: autopilot and an agentName ending in › Autopilot are its turns (the decision message it was sent is the user message of its turn, so what it was shown is there verbatim; its systemPrompt is its grounding, such as the brief), its tool calls (widget_read, widget_act, hand_back, any read-only tools of its own, and its widget tools — reads with parameters that a widget type declares, routed to the interaction of that type being decided and refused with a reason when none is, offered on every decision so its tool list never changes; while one is open its tail starts with a line naming them) and their results (a read, view or widget tool, is capped at about 20,000 characters, cut with a note asking for less, and leaves its history at the end of the decision as a one-line note), and its own events. Its cost is already in the session total: it is booked as externalCostUsd on the interaction each decision answered, or, for a written question it answered, on the user message it sent on the user behalf (delegate: autopilot), so do not add its turns to that total. Spend that reached no message is recorded as autopilot.cost-dropped instead.',\n \"Delegated messages (GENC-1660): a message with a `delegate` field was written or sent ON THE USER'S BEHALF by a driver decorator, and `delegate` names it (e.g. autopilot). The platform stamps it; nothing else can. It renders as the assistant whatever its role. A delegated `user` message was NOT typed by the user: it is an answer given on their behalf, and the model read it with `delegateFraming` in brackets in front of the content (the stored `content` is the bare text). A delegated `assistant` message is display-only (`excludeFromProvider`): the decorator's narration note, or, when its answer carried no note, the widget's own echo of the answer (its `userMessage`), shown as the assistant and never as the person. A widget answer a decorator gave with a note is not echoed at all: the note already says what was chosen. To tell what the person decided from what was decided for them, read `interaction.answeredBy` and these fields, never the role alone.\",\n \"Sub-agent messages appear inline. When a tool delegates to a sub-agent (via `requestSubAgent`), the sub-agent's whole conversation — its own assistant/tool messages, each with their own `content`/`thinking`/`toolCalls`/`toolResult` and per-message `model`/`providerName`/`inputTokens`/`outputTokens`/`cacheReadTokens`/`cacheWriteTokens`/`cost` — is hoisted into the timeline as ordinary kind:'message' entries, interleaved by timestamp right after the tool call that spawned them (so you read the delegation top-to-bottom). A hoisted entry is marked: `subAgentDepth` is its delegation depth (1 for a sub-agent, 2 for a sub-agent's sub-agent, …), `subAgentOf` is the id of the parent tool call that spawned it (correlates it back even when two sub-agents run in one parent turn), `subAgentName` is the sub-agent's own name, and `agentName` is rewritten to a `\\\"<parent> › <sub-agent>\\\"` breadcrumb (composing when nested, e.g. `\\\"UI Builder › Planner › Grounding\\\"`). The sub-agent's per-LLM-call snapshots also surface as kind:'turn' entries with an N-M `turnIndex`, and subagent.started/completed (or subagent.failed) events bracket the run. Per-message `cost` on hoisted entries is already part of the session total (it is summed from the un-flattened history), so summing the top-level timeline does NOT double-count.\",\n \"kind:'turn' — one LLM call. `turnIndex` is a string: a top-level turn is the bare counter ('0', '1', …); a sub-agent's turns are numbered under the parent turn that activated them ('3-1', '3-2', …, and a nested sub-agent contributes '3-2-1', …), and `agentName` names the agent that ran the turn. `systemPrompt` and `toolNames` are what the model saw. A systemPrompt of '<repeated — identical to turn N>' was byte-identical to turn N and de-duplicated; the full prompt is shown whenever it changes (often because a stateful agent advanced), so prompt evolution is visible.\",\n \"kind:'turn'.`model`/`providerName`/`provider` — which model ran that call: the concrete model id, the registry slot it resolved under (a tier name like 'high'/'low', or the default), and the vendor. Recorded per CALL, so an agent whose `provider` selector varies by state — a flow that plans on a high tier and executes on a low one — has every step attributed, including calls that produced no message. `model` is the SERVING model where the provider reports one, so a turn answered by a server-side fallback names the model that answered rather than the one requested; it always matches the `model` on the message that call produced. Absent when the provider exposes no `getStatus` and the transport stamped nothing.\",\n \"kind:'turn'.`usage` — what that ONE call cost, in the same four-bucket + `costUsd` shape as `sessionUsage`. Absent while a call is in flight and on providers that report no usage. This is the SAME money as the message the call produced, not extra money: never add turn usage to message usage, and read a turn plus its message as one charge. Its distinct value is the calls that produced NO message — a blank or refused response is billed and then discarded before the retry, so the turn entry is the only record of that spend, and a turn with `usage` but no message after it is exactly that. `costUsd: 0` alongside a nonzero token count means the provider reported no price, not that the call was free.\",\n \"kind:'turn'.`agentSnapshot` — the active agent's own view of its internal state, captured at that turn. An agent opts into this by exposing a `getDebugSnapshot()` that returns JSON-serializable per-state info; stateful/flow agents wire it automatically, so you can watch a flow advance turn-by-turn (e.g. current step, cursor, collected fields, pending changes). Absent for agents that don't expose one.\",\n \"kind:'event' — a meta/lifecycle event. `type` names it (see below); `detail` carries structured data. `detail.placement` is the emitting UI instance: 'bubble' (collapsed), 'panel' (popped-out), or 'standalone'.\",\n \"Each 'event' also has an `importance`: 'high' (failures/limits — turn.error, tool.failed, subagent.failed, file.read-failed, suggestions.failed, context.threshold-crossed), 'normal' (session flow — connects, turns, retries, handoffs, agent/provider changes, interactions, sub-agent start/complete), or 'low' (skippable UI/bookkeeping noise — panel.toggled, attachment.added, driver.wired/unwired, context.updated, context.condensed). To skim, ignore importance:'low'; to triage a failure, filter to importance:'high' then read the nearby messages and turns. A 'high' turn.error is often preceded by one or more 'normal' turn.retry events for the same reason — read them together to see how many attempts were made before bailing. 'message' and 'turn' entries carry no importance — they are the substance, always read them.\",\n \"Event types: assistant.connected/disconnected (mount + placement + whether the session was created or restored), assistant.popout/popin (window placement), driver.created/wired/unwired (which driver is live and why it stops/starts responding across a popout), state.changed (idle↔loading), turn.start/turn.end (turn boundary; turn.end carries durationMs), turn.retry (a recoverable in-turn retry — detail.reason plus attempt/maxAttempts; for malformed calls also finishMessage; for empty responses also the provider finishReason + thoughtsTokens + parts breakdown), turn.error (a turn failed or hit a guardrail — detail.reason is one of exception/malformed-function-call/empty-response/unknown-tool-limit/max-iterations/response-truncated/refusal/budget-exhausted/provider-refused/context-exhausted/ai-service-error, plus reason-specific diagnostics: attempts (for empty-response also finishReason + thoughtsTokens + a parts breakdown, distinguishing a thinking-only STOP from a truly empty turn), finishMessage, for response-truncated the model + maxTokens + outputTokens + tools, unknownTools (split into staleTools — real earlier this activation but retired by the current state or hidden behind an open exclusive fold — and hallucinatedTools — never advertised) + availableTools, iterations + limit, for budget-exhausted the budgetUsd + spentUsd figures reported by the proxy plus the resolved vendor, for provider-refused the kind (spend|auth) plus the upstream status and error type — the vendor refusing the ACCOUNT rather than us refusing to spend, so the remedy is a top-up or a key rotation rather than a raised cap, and the kind is the only place that distinction survives because the user-facing copy is deliberately cause-free, for context-exhausted the estimated contextTokens against the guard that stopped the turn plus the iterations reached — the driver ending a runaway tool loop at the edge of the context window rather than issuing a request the provider would reject, so the transcript survives intact and can still be compacted, for ai-service-error the code (one of AI_SERVICE_ERROR_CODES, e.g. NO_API_KEY) and the status the AI service answered with — its own text goes to the browser console only, or name + message for exceptions), tool.failed (a tool threw), tool.unresolved (the model called a tool that could not be dispatched — detail.kind is folded/fold-hidden/stale/unknown, plus tool + agent and, for the counted kinds, the consecutive streak; the recurring lead-up to an unknown-tool-limit turn.error), subagent.started/completed/failed (the lifecycle of a `requestSubAgent` delegation — detail.agent names the sub-agent; these bracket the sub-agent turns that appear as kind:turn entries with an N-M `turnIndex`; subagent.failed also carries detail.reason, one of max_iterations/malformed_tool_call/empty_response/unknown_tool_limit/timeout/response_truncated/refusal/budget_exhausted/provider_refused/context_exhausted/ai_service_error; budget_exhausted and provider_refused are terminal for the PARENT turn too, and so is ai_service_error when the refusal is about the service rather than the request and came from the vendor the parent calls — the parent stops rather than calling the model again into the same wall; after context_exhausted the parent goes on, but its own next call is likely to stop on the same guard), agent.handoff (routing; from=null is the initial activation), agent.pinned/unpinned (forced routing), routing.decided (ONE PER ROUTING DECISION — see its own paragraph below), provider.selected (the resolved provider for the upcoming turns — detail.provider is the registry SLOT/tier name, detail.model the concrete model behind it and detail.vendor its vendor; emitted only when the slot CHANGES, so read the per-turn `model` for the model of any given call rather than assuming the nearest event still applies), interaction.requested/resolved (blocking user widgets — explain quiet gaps; note that when a sub-agent opens a widget, detail.agent — and the agentName on the interaction message — is the HOST agent that owns the widget, NOT the sub-agent that asked, because widgets render and resolve on the host driver; detail.ownerPath names the agents that actually asked, outermost first, the last being the one whose tool requested it, and detail.heldBy says who held it when it opened: user, or the id of the interceptor that claimed it, such as autopilot; on interaction.resolved, detail.answeredBy is who answered — the claimant id when it settled through its own hold, user for any other answer (a click counts as the person even on a widget a claimant held) — absent when it closed unanswered (a timeout or a stop), and absent too when it settled by itself other than through the hold of a claimant — a widget registered resolvesItself (one that does its work and settles on its own, asking the person nothing, such as a generation run), or one outcome its controller said settled itself (ctx.resolve with resolvedItself, such as a generation phase that failed outright before its review gate ever asked anything) — which then carries detail.resolvedItself: true instead, as the interaction message does — nobody answered it, and the platform cannot tell it finishing from the person interrupting it (a Skip), so only the result of the widget itself can say which; the same value is stamped on the interaction message as answeredBy and on the result the asking tool handler receives (absent there in the same cases), and when it is not user the tool result that interaction returned carries a decidedOnUsersBehalf record, so the model was told the choice was not made by the person; detail.edits, present only when non-zero, counts the editing actions a claimant ran on the widget before it was settled, whoever settled it, and those edits are stamped on the interaction message as edits, each with by, action, choice and args when it had some, in the order they ran, while a decidedOnUsersBehalf record carries their choice texts as edits, and when the person settled it after such edits the tool result carries an editedOnUsersBehalf record instead — the framing and those choice texts — so the model knows the widget was changed on the user behalf before the user answered, and that the user then confirmed it by finishing it), interaction.held (a claimant moved a pending interaction to the person or back to itself — detail.heldBy is the new holder, detail.claimant the interceptor; detail.late: true is an interceptor that declined it when it opened claiming it afterwards, such as the autopilot resumed while it was open; a widget held by anything but user was not answered by the person), interaction.claim-refused (a claim on a userOnly interaction, which stays with the person — detail.claimant + reason), autopilot.* (the autopilot, a decorator that answers interactions on behalf of the user — autopilot.claimed / autopilot.declined say whether it took each interaction and, for a decline, detail.reason: paused, other-flow, no-autopilot, unavailable, userOnly, policy or no-controller; one declined as paused that is still open when the person resumes the autopilot is looked at again, and the autopilot.claimed or autopilot.declined recorded for it then carries detail.onResume: true (a decline then can also be claimed-elsewhere, another interceptor having claimed it first); a restored mode looks at nothing; autopilot.decision-sent is what it was sent (detail.chars; detail.nothingEnabled: true when every action on the widget was unavailable — a gate whose controller said it was asking, such as a failed build the autopilot may not cancel — so it could only hand it back, which it may then do even after the person asked it to decide it itself; a widget whose controller says it is working (ctx.setWorking) is never sent a decision until it says it is asking, even when an action is enabled or the person resumes the autopilot); autopilot.acted is what it did (detail.action, detail.note, detail.finished); autopilot.handed-back is a decision it gave to the person (detail.reason and detail.trigger: model, no-decision or error); autopilot.paused / autopilot.resumed are mode changes (detail.scope, detail.trigger, detail.decideYourself when the person resumed during a hand-back; detail.trigger is restored when the mode came back with the session after a reload, applied once its flow re-activated, which starts nothing by itself); autopilot.carried is the mode, running or paused, going with the task to the agent that took it over, rather than ending with the flow as on any other change of flow owner: to the target of a hand-off, or back to its caller on the hand-back (detail.from, detail.to, detail.mode); a pause the person chose goes with it, and Stop and Clear still end it; a mode restored for the target of a hand-off applies to its caller when the reload hands back; autopilot.error is the wrapper itself failing; autopilot.refinement counts a refining action against its step — a written answer (reply) or a widget action declared refines, such as a regenerate with instructions, counted together (detail.action, detail.stepKey, detail.count, detail.limitReached, after which every refining action is withdrawn for that step: not listed, and refused; the decision and every relisting of its actions say how many are left at the step, as a line Refinements left at this step: N, wherever the widget has a refining action); autopilot.handback-presented is the turn-level hand-back, shown when a working turn ended needing the person with no widget to hand over (detail.why: max-iterations, context-exhausted, failure or question; detail.options; detail.choice once answered); autopilot.catch-up is the autopilot being given the whole visible transcript at once (detail.why: first, for its first decision in a flow or after a reload; size, when its own history passed its budget and was rebuilt short — detail.ownChars; or compacted, when a compaction removed the last message it had seen, so it reads the summary and everything since, short; in each, what it had sent on the user behalf is included and labelled as its own, since its own history does not hold it); autopilot.cost-dropped is autopilot spend that no message carries, so it is NOT in the session total (detail.costUsd and detail.why: handed-back, aborted or stale for a written question it answered that no reply was sent for — stale when a pause, a resume, a new turn or the end of its flow came before the answer landed, which then went nowhere — or no-recorder when the driver had no way to book a decision to its interaction); a hand-back trigger can also be budget (the decision passed its spend cap), watchdog (its work went quiet: no ready surface and no heartbeat, or its own decision stalled with no model call landing, which stops that decision) or detached (the autopilot was removed while it held the interaction, which went to the person with no reason shown). To debug one autopilot decision, follow its interactionId: interaction.requested (heldBy), autopilot.claimed, autopilot.decision-sent, autopilot.acted or autopilot.handed-back, interaction.invoked, interaction.resolved (answeredBy), then the next turn of the working agent), interaction.invoked (a claimant ran one of the actions the widget itself exposes, through its hold, the same code the button runs — detail.claimant, detail.action (an option id, select or reply) and detail.finished, whether that settled the interaction, and when it did not, the run is recorded as an edit; the choice and narration it recorded reach the result of the tool that asked as decidedOnUsersBehalf; the person's own programmatic action, from a host with no DOM to click, carries detail.by: user in place of detail.claimant, and is not recorded as an edit nor as a decision on their behalf, so what it settles is answered by user), interaction.step (a long action run as named steps through runSteps, which survive a reload — detail.step and detail.outcome: started, done, skipped when the step was already done before a reload, or resumed when it started before a reload and runs again with what it saved part-way, such as a job id it re-attaches to), interaction.checkpoint (the checkpoints a conversation keeps for its long actions: the one in flight, and each one a reload cut, held apart until a request of its own widget type takes it over, so a resumed flow that opens other long widgets first, which save their own, loses nothing — detail.action: resumed when a reload cut the work and a request of the same widget type that the registration sameWork agrees is the same work took it over, refused when sameWork said a new request is different work (detail.saved is the identity it kept; detail.kept: true, since it stays for a later request of that type, and is offered to every one until one agrees) or when runSteps found the handed-over checkpoint malformed and started fresh (detail.reason, detail.saved), or cleared when its flow ended, once per checkpoint, with detail.cut: true for one a reload cut that nothing took over), context.updated/threshold-crossed (token + cost), headless.attached (a HeadlessSession attached, for a host that drives the assistant with no screen — detail.label, what the host called itself, when it gave one) and headless.raw-resolved (that host settled an interaction raw, bypassing the widget's own actions: detail.interactionId and detail.component; the result went to the tool as given, so check what the widget would have enforced), context.condensed (a stale tool payload was collapsed out of the model-bound history by a `condenseWhen` declaration on the tool — detail.tool + toolCallId, target args|response, trigger (superseded:<key> or age:<n>), stubLen, and an estimated tokensSaved; stored history and this log keep the FULL payload, so the model-visible slice at any point is the full history minus the condensations recorded up to then), panel.toggled, attachment.added, file.read-failed, suggestions.failed.\",\n 'Sub-agent meta events: a sub-agent\\'s own turn.retry/turn.error/tool.failed/tool.unresolved events are merged into this same timeline, tagged with `detail.subAgent` — a `\"<parent> › <sub-agent>\"` breadcrumb that composes when nested (e.g. `\"UI Builder › Planner › Grounding\"`) — and interleaved by their original timestamps within the subagent.started→completed/failed bracket. These are the per-attempt/per-failure signals that do NOT appear among the sub-agent\\'s (hoisted) messages: a malformed/empty attempt that gets retried produces no message, and the stale-vs-hallucinated split and streak counts live only on the event. A sub-agent\\'s high-volume, message-derivable events (turn.start/turn.end, provider.selected, context.updated) are intentionally NOT merged — read its hoisted messages for model/tokens/cost and turn-by-turn activity, and the bracketing subagent.* events for the run\\'s span.',\n \"`meta` holds context captured at export time: agentSummary (full agent configs), context (active model, contextTokens/contextLimit/contextUsagePercent for the last call, and the session totals — sessionCostUsd, sessionTokensConsumed, and the four-bucket sessionUsage lifted to the top of this log), activeDebugSnapshot (the active agent's `getDebugSnapshot()` taken fresh at export — reflects state NOW, which may have advanced beyond the last turn's agentSnapshot), debug (optional host-supplied debug state), host, and the export timestamp.\",\n 'Note the two different scopes in `meta.context`: `contextTokens` is the prompt size of the LAST call (against `contextLimit`, the model context window), while `sessionUsage`/`sessionTokensConsumed` are cumulative BILLED throughput. Every turn resends the conversation, so the cumulative figure counts each turn’s prompt again in the next turn’s and is expected to dwarf the context size — that is not double-counting.',\n \"kind:'event' type 'routing.decided' — how ONE user turn was routed, emitted by the orchestrating driver before the agent runs. Only a user turn is routed: a hand-off names its target, so the agents a hand-off runs show up as agent.handoff events, not as more routing.decided. `decision` is why that agent was chosen: 'classified' (the classifier ran and picked one), 'no-match' (it ran and answered -1 — nothing listed covers the request), 'pinned' (a user pin, an agent named for that one message by the send's `agent` option, or an active stateful flow owned the turn, so no call was made), 'single-candidate'/'no-specialists' (configuration left nothing to decide), 'provider-unavailable' (the registry default exposes no chat()), 'classifier-failed' (every attempt threw — `error` carries the last one). `to` names the agent and `fallback` says whether that agent is the fallback. `candidates` is what was ON THE BALLOT — every classifier-eligible specialist — in ballot order, so `index` — the classifier's own answer — indexes it directly. `candidates` is absent on the three decisions that put nothing to a vote — 'pinned', 'single-candidate', 'no-specialists'. It IS present on 'provider-unavailable', which is not an exception worth removing: the ballot was built there, it simply never got sent. `attempts` covers the retry ladder. `durationMs` is on EVERY routing.decided, and is the field to read when a decision looks wrong: the decisions that can reach the fallback ('no-match', 'no-specialists', 'provider-unavailable', 'classifier-failed') are told apart by the clock as much as by their name, because a fallback routing that resolved in tens of milliseconds made no network call at all whatever its `decision` says.\",\n \"kind:'event' type 'routing.decided'.`usage` — what that classifier call cost, in the same four-bucket + costUsd shape as `sessionUsage`, plus `model`. Absent on the decisions that make no call (see 'pinned' and the configuration ones). THIS SPEND IS NOT IN `sessionUsage`: a classifier call never enters the transcript and `sessionUsage` is derived from the transcript, so classifier cost is missing from the session total by construction, not by accident. Sum these events to close that gap — it is the one component of a session's real spend that the totals cannot see.\",\n 'To debug a failure: find the last turn.error or tool.failed, then read upward for the user message, the turn(s), and the agent/provider/state events that led into it. For a turn that went to the wrong agent, read its routing.decided first — `decision` says whether anything was actually asked.',\n]",
|
|
11952
13870
|
"description": "Human/agent-facing guide emitted as the first key of the exported debug log,\nso whoever opens the JSON (often an AI agent) knows how to read it without\nreverse-engineering the shape. Kept here next to the event catalogue it\ndescribes — but proximity alone demonstrably did NOT keep the two in sync\n(`refusal` was missing from both reason lists for a whole release), so\n`debug-event-log.test.ts` now asserts that every `TurnFailureReason` and every\n`SubAgentFailureReason` is named here, and fails the build when one is added\nwithout a matching sentence. Enumerations below read as exhaustive and WILL be\ntrusted by an agent reading the JSON — keep them so."
|
|
11953
13871
|
}
|
|
11954
13872
|
],
|
|
@@ -12098,7 +14016,7 @@
|
|
|
12098
14016
|
}
|
|
12099
14017
|
}
|
|
12100
14018
|
],
|
|
12101
|
-
"description": "Build the surface for a short-form decision (GENC-1660). Its actions are its options (by id),\nplus `select` for a multi-select and `reply` for a written answer; all of them finish. Its views
|
|
14019
|
+
"description": "Build the surface for a short-form decision (GENC-1660). Its actions are its options (by id),\nplus `select` for a multi-select and `reply` for a written answer; all of them finish. A spec's\nown `actions` follow them, run as a full-form surface's are (and editing unless they say\notherwise); they do not count towards readiness. Its views, if it has any, are read by name. Every read — facts, views, actions, enabled-ness — is taken\nfresh, so the surface always describes the widget as it is now.\n\nThrows if an option's id collides with another or with a platform-owned name, or an extra action\ndoes, which is a bug in the widget rather than something to recover from."
|
|
12102
14020
|
},
|
|
12103
14021
|
{
|
|
12104
14022
|
"kind": "function",
|
|
@@ -17239,6 +19157,37 @@
|
|
|
17239
19157
|
],
|
|
17240
19158
|
"description": "Forwarded, so an interceptor installed on any layer lands on the driver that opens the\ninteractions. A decorator that answers interactions installs its own on `this.inner`."
|
|
17241
19159
|
},
|
|
19160
|
+
{
|
|
19161
|
+
"kind": "method",
|
|
19162
|
+
"name": "invokeAsUser",
|
|
19163
|
+
"return": {
|
|
19164
|
+
"type": {
|
|
19165
|
+
"text": "Promise<InvokeResult>"
|
|
19166
|
+
}
|
|
19167
|
+
},
|
|
19168
|
+
"parameters": [
|
|
19169
|
+
{
|
|
19170
|
+
"name": "interactionId",
|
|
19171
|
+
"type": {
|
|
19172
|
+
"text": "string"
|
|
19173
|
+
}
|
|
19174
|
+
},
|
|
19175
|
+
{
|
|
19176
|
+
"name": "action",
|
|
19177
|
+
"type": {
|
|
19178
|
+
"text": "string"
|
|
19179
|
+
}
|
|
19180
|
+
},
|
|
19181
|
+
{
|
|
19182
|
+
"name": "args",
|
|
19183
|
+
"optional": true,
|
|
19184
|
+
"type": {
|
|
19185
|
+
"text": "unknown"
|
|
19186
|
+
}
|
|
19187
|
+
}
|
|
19188
|
+
],
|
|
19189
|
+
"description": "Forwarded: the interaction belongs to the driver that opened it. An inner driver that cannot\nrun actions answers as if the interaction had ended."
|
|
19190
|
+
},
|
|
17242
19191
|
{
|
|
17243
19192
|
"kind": "method",
|
|
17244
19193
|
"name": "presentInteraction",
|
|
@@ -20245,6 +22194,37 @@
|
|
|
20245
22194
|
],
|
|
20246
22195
|
"description": "{@inheritDoc AiDriver.addInteractionInterceptor}\n\nConsulted only on the root driver, where every interaction opens: a sub-agent's request\ntravels up to its root, carrying its owner path, and is offered there once."
|
|
20247
22196
|
},
|
|
22197
|
+
{
|
|
22198
|
+
"kind": "method",
|
|
22199
|
+
"name": "invokeAsUser",
|
|
22200
|
+
"return": {
|
|
22201
|
+
"type": {
|
|
22202
|
+
"text": "Promise<InvokeResult>"
|
|
22203
|
+
}
|
|
22204
|
+
},
|
|
22205
|
+
"parameters": [
|
|
22206
|
+
{
|
|
22207
|
+
"name": "interactionId",
|
|
22208
|
+
"type": {
|
|
22209
|
+
"text": "string"
|
|
22210
|
+
}
|
|
22211
|
+
},
|
|
22212
|
+
{
|
|
22213
|
+
"name": "action",
|
|
22214
|
+
"type": {
|
|
22215
|
+
"text": "string"
|
|
22216
|
+
}
|
|
22217
|
+
},
|
|
22218
|
+
{
|
|
22219
|
+
"name": "args",
|
|
22220
|
+
"optional": true,
|
|
22221
|
+
"type": {
|
|
22222
|
+
"text": "unknown"
|
|
22223
|
+
}
|
|
22224
|
+
}
|
|
22225
|
+
],
|
|
22226
|
+
"description": "{@inheritDoc AiDriver.invokeAsUser}"
|
|
22227
|
+
},
|
|
20248
22228
|
{
|
|
20249
22229
|
"kind": "method",
|
|
20250
22230
|
"name": "presentInteraction",
|
|
@@ -21501,6 +23481,37 @@
|
|
|
21501
23481
|
],
|
|
21502
23482
|
"description": "See `ChatDriver.resolveInteraction`. Warns and returns when the id is unknown — a widget can\nreport twice, and the second report has nothing left to settle. `how` is what a controller's\n`ctx.resolve` said about the settle (`resolvedItself`); every other route passes none."
|
|
21503
23483
|
},
|
|
23484
|
+
{
|
|
23485
|
+
"kind": "method",
|
|
23486
|
+
"name": "invokeAsUser",
|
|
23487
|
+
"return": {
|
|
23488
|
+
"type": {
|
|
23489
|
+
"text": "Promise<InvokeResult>"
|
|
23490
|
+
}
|
|
23491
|
+
},
|
|
23492
|
+
"parameters": [
|
|
23493
|
+
{
|
|
23494
|
+
"name": "interactionId",
|
|
23495
|
+
"type": {
|
|
23496
|
+
"text": "string"
|
|
23497
|
+
}
|
|
23498
|
+
},
|
|
23499
|
+
{
|
|
23500
|
+
"name": "action",
|
|
23501
|
+
"type": {
|
|
23502
|
+
"text": "string"
|
|
23503
|
+
}
|
|
23504
|
+
},
|
|
23505
|
+
{
|
|
23506
|
+
"name": "args",
|
|
23507
|
+
"optional": true,
|
|
23508
|
+
"type": {
|
|
23509
|
+
"text": "unknown"
|
|
23510
|
+
}
|
|
23511
|
+
}
|
|
23512
|
+
],
|
|
23513
|
+
"description": "See `ChatDriver.invokeAsUser`: `hold.invoke`'s sibling for the person (GENC-1660).\n\nRuns the action the way the widget's own button does, and records nothing against a claimant:\nno `settledBy`, no `decision`. So `whoAnswered` credits a settle to the person\n(`answeredBy: 'user'`), exactly as a click would be. Refused unless the person holds the\ninteraction: a claimant that does is not pushed aside, the person takes it back first. An\nediting action leaves no edit record either — those mark what a claimant changed on the\nperson's behalf, and this is the person's own change."
|
|
23514
|
+
},
|
|
21504
23515
|
{
|
|
21505
23516
|
"kind": "method",
|
|
21506
23517
|
"name": "recordExternalCost",
|
|
@@ -24454,6 +26465,41 @@
|
|
|
24454
26465
|
"module": "src/components/ai-driver/base-driver-decorator.ts"
|
|
24455
26466
|
}
|
|
24456
26467
|
},
|
|
26468
|
+
{
|
|
26469
|
+
"kind": "method",
|
|
26470
|
+
"name": "invokeAsUser",
|
|
26471
|
+
"return": {
|
|
26472
|
+
"type": {
|
|
26473
|
+
"text": "Promise<InvokeResult>"
|
|
26474
|
+
}
|
|
26475
|
+
},
|
|
26476
|
+
"parameters": [
|
|
26477
|
+
{
|
|
26478
|
+
"name": "interactionId",
|
|
26479
|
+
"type": {
|
|
26480
|
+
"text": "string"
|
|
26481
|
+
}
|
|
26482
|
+
},
|
|
26483
|
+
{
|
|
26484
|
+
"name": "action",
|
|
26485
|
+
"type": {
|
|
26486
|
+
"text": "string"
|
|
26487
|
+
}
|
|
26488
|
+
},
|
|
26489
|
+
{
|
|
26490
|
+
"name": "args",
|
|
26491
|
+
"optional": true,
|
|
26492
|
+
"type": {
|
|
26493
|
+
"text": "unknown"
|
|
26494
|
+
}
|
|
26495
|
+
}
|
|
26496
|
+
],
|
|
26497
|
+
"description": "Forwarded: the interaction belongs to the driver that opened it. An inner driver that cannot\nrun actions answers as if the interaction had ended.",
|
|
26498
|
+
"inheritedFrom": {
|
|
26499
|
+
"name": "BaseDriverDecorator",
|
|
26500
|
+
"module": "src/components/ai-driver/base-driver-decorator.ts"
|
|
26501
|
+
}
|
|
26502
|
+
},
|
|
24457
26503
|
{
|
|
24458
26504
|
"kind": "method",
|
|
24459
26505
|
"name": "presentInteraction",
|
|
@@ -25785,6 +27831,66 @@
|
|
|
25785
27831
|
}
|
|
25786
27832
|
]
|
|
25787
27833
|
},
|
|
27834
|
+
{
|
|
27835
|
+
"kind": "javascript-module",
|
|
27836
|
+
"path": "src/state/persistence/debug-log-assembly.ts",
|
|
27837
|
+
"declarations": [
|
|
27838
|
+
{
|
|
27839
|
+
"kind": "function",
|
|
27840
|
+
"name": "buildDiagnosticEntries",
|
|
27841
|
+
"return": {
|
|
27842
|
+
"type": {
|
|
27843
|
+
"text": "DiagnosticEntry[]"
|
|
27844
|
+
}
|
|
27845
|
+
},
|
|
27846
|
+
"parameters": [
|
|
27847
|
+
{
|
|
27848
|
+
"name": "input",
|
|
27849
|
+
"type": {
|
|
27850
|
+
"text": "{\n driver: AiDriver | undefined;\n /** The debug-log key the meta events are kept under; none, no events. */\n stateKey: string | undefined;\n /** The `meta-snapshot` entry for right now (see `buildMetaSnapshot`). */\n metaSnapshot: () => DiagnosticEntry;\n /** The transcript to use when the driver has no raw history: the host's own copy. */\n messages?: readonly ChatMessage[];\n}"
|
|
27851
|
+
}
|
|
27852
|
+
}
|
|
27853
|
+
],
|
|
27854
|
+
"description": "The current page's diagnostic entries (GENC-1351 §5.8): the debug-log timeline entries\n(`message`/`turn`/`event`), the driver's external diagnostics, and one `meta-snapshot` carrying\nthe export-time `meta` block. The assistant element reassembles these into the live log, and the\npersister's forward-capture path diffs them against what has already been appended to the stored\nstream. Extracted from the element so a host with no element (the headless session) derives its\nlog from the same code, not a second copy that could drift.\n\nDOM-free and framework-free."
|
|
27855
|
+
},
|
|
27856
|
+
{
|
|
27857
|
+
"kind": "function",
|
|
27858
|
+
"name": "lifetimeDebugLog",
|
|
27859
|
+
"return": {
|
|
27860
|
+
"type": {
|
|
27861
|
+
"text": "Promise<DebugLog>"
|
|
27862
|
+
}
|
|
27863
|
+
},
|
|
27864
|
+
"parameters": [
|
|
27865
|
+
{
|
|
27866
|
+
"name": "input",
|
|
27867
|
+
"type": {
|
|
27868
|
+
"text": "{\n provider: SessionPersistenceProvider | undefined;\n stateKey: string | undefined;\n /** Land the current page's unflushed diagnostics delta, so the log includes it. */\n flush: () => Promise<void> | void;\n /** The `meta-snapshot` entry for right now. */\n metaSnapshot: () => DiagnosticEntry;\n /** The current-page log, for when there is no stored stream to stitch. */\n fallback: () => DebugLog;\n}"
|
|
27869
|
+
}
|
|
27870
|
+
}
|
|
27871
|
+
],
|
|
27872
|
+
"description": "The debug log for the WHOLE session (GENC-1351 §5.8 / §5.10), not just this page's activity:\nthe persisted diagnostics stream with its stored `meta-snapshot`s replaced by a fresh one\n(`withFreshMetaSnapshot`), so its context and cost figures are current. When the provider\nstores no diagnostics, there is no key, the stream is empty or loading it fails, it is\n`fallback()` — the current-page log. Never throws.\n\nThe one derivation of the lifetime log: the assistant element's `getLifetimeDebugLog` and the\nheadless session both call it, because a second one drifts, and for this log that means silently\nunderstating spend."
|
|
27873
|
+
}
|
|
27874
|
+
],
|
|
27875
|
+
"exports": [
|
|
27876
|
+
{
|
|
27877
|
+
"kind": "js",
|
|
27878
|
+
"name": "buildDiagnosticEntries",
|
|
27879
|
+
"declaration": {
|
|
27880
|
+
"name": "buildDiagnosticEntries",
|
|
27881
|
+
"module": "src/state/persistence/debug-log-assembly.ts"
|
|
27882
|
+
}
|
|
27883
|
+
},
|
|
27884
|
+
{
|
|
27885
|
+
"kind": "js",
|
|
27886
|
+
"name": "lifetimeDebugLog",
|
|
27887
|
+
"declaration": {
|
|
27888
|
+
"name": "lifetimeDebugLog",
|
|
27889
|
+
"module": "src/state/persistence/debug-log-assembly.ts"
|
|
27890
|
+
}
|
|
27891
|
+
}
|
|
27892
|
+
]
|
|
27893
|
+
},
|
|
25788
27894
|
{
|
|
25789
27895
|
"kind": "javascript-module",
|
|
25790
27896
|
"path": "src/state/persistence/diagnostics-cursors.ts",
|
|
@@ -26001,6 +28107,22 @@
|
|
|
26001
28107
|
"name": "DebugLog",
|
|
26002
28108
|
"module": "./diagnostics"
|
|
26003
28109
|
}
|
|
28110
|
+
},
|
|
28111
|
+
{
|
|
28112
|
+
"kind": "js",
|
|
28113
|
+
"name": "buildDiagnosticEntries",
|
|
28114
|
+
"declaration": {
|
|
28115
|
+
"name": "buildDiagnosticEntries",
|
|
28116
|
+
"module": "./debug-log-assembly"
|
|
28117
|
+
}
|
|
28118
|
+
},
|
|
28119
|
+
{
|
|
28120
|
+
"kind": "js",
|
|
28121
|
+
"name": "lifetimeDebugLog",
|
|
28122
|
+
"declaration": {
|
|
28123
|
+
"name": "lifetimeDebugLog",
|
|
28124
|
+
"module": "./debug-log-assembly"
|
|
28125
|
+
}
|
|
26004
28126
|
}
|
|
26005
28127
|
]
|
|
26006
28128
|
},
|