@genesislcap/ai-assistant 14.434.0 → 14.436.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.
Files changed (33) hide show
  1. package/dist/ai-assistant.api.json +1513 -70
  2. package/dist/ai-assistant.d.ts +367 -7
  3. package/dist/dts/components/ai-driver/ai-driver.d.ts +8 -0
  4. package/dist/dts/components/ai-driver/ai-driver.d.ts.map +1 -1
  5. package/dist/dts/components/chat-driver/chat-driver.d.ts +79 -3
  6. package/dist/dts/components/chat-driver/chat-driver.d.ts.map +1 -1
  7. package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts +23 -0
  8. package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts.map +1 -1
  9. package/dist/dts/config/config.d.ts +106 -2
  10. package/dist/dts/config/config.d.ts.map +1 -1
  11. package/dist/dts/config/define-stateful-agent.d.ts +115 -0
  12. package/dist/dts/config/define-stateful-agent.d.ts.map +1 -0
  13. package/dist/dts/index.d.ts +1 -0
  14. package/dist/dts/index.d.ts.map +1 -1
  15. package/dist/dts/main/main.d.ts +36 -4
  16. package/dist/dts/main/main.d.ts.map +1 -1
  17. package/dist/dts/main/main.template.d.ts.map +1 -1
  18. package/dist/esm/components/chat-driver/chat-driver.js +126 -11
  19. package/dist/esm/components/orchestrating-driver/orchestrating-driver.js +192 -33
  20. package/dist/esm/config/define-stateful-agent.js +174 -0
  21. package/dist/esm/index.js +1 -0
  22. package/dist/esm/main/main.js +164 -21
  23. package/dist/esm/main/main.template.js +2 -11
  24. package/dist/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +16 -16
  26. package/src/components/ai-driver/ai-driver.ts +9 -0
  27. package/src/components/chat-driver/chat-driver.ts +178 -8
  28. package/src/components/orchestrating-driver/orchestrating-driver.ts +191 -17
  29. package/src/config/config.ts +112 -2
  30. package/src/config/define-stateful-agent.ts +293 -0
  31. package/src/index.ts +1 -0
  32. package/src/main/main.template.ts +2 -9
  33. package/src/main/main.ts +167 -14
@@ -796,6 +796,133 @@
796
796
  ],
797
797
  "extendsTokenRanges": []
798
798
  },
799
+ {
800
+ "kind": "Interface",
801
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext:interface",
802
+ "docComment": "/**\n * Context passed to `onActivate` / `onDeactivate` lifecycle hooks on an agent.\n *\n * @beta\n */\n",
803
+ "excerptTokens": [
804
+ {
805
+ "kind": "Content",
806
+ "text": "export interface AgentLifecycleContext "
807
+ }
808
+ ],
809
+ "fileUrlPath": "src/config/config.ts",
810
+ "releaseTag": "Beta",
811
+ "name": "AgentLifecycleContext",
812
+ "preserveMemberOrder": false,
813
+ "members": [
814
+ {
815
+ "kind": "PropertySignature",
816
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext#agentName:member",
817
+ "docComment": "/**\n * The agent the hook is firing for.\n */\n",
818
+ "excerptTokens": [
819
+ {
820
+ "kind": "Content",
821
+ "text": "agentName: "
822
+ },
823
+ {
824
+ "kind": "Content",
825
+ "text": "string"
826
+ },
827
+ {
828
+ "kind": "Content",
829
+ "text": ";"
830
+ }
831
+ ],
832
+ "isReadonly": false,
833
+ "isOptional": false,
834
+ "releaseTag": "Beta",
835
+ "name": "agentName",
836
+ "propertyTypeTokenRange": {
837
+ "startIndex": 1,
838
+ "endIndex": 2
839
+ }
840
+ },
841
+ {
842
+ "kind": "PropertySignature",
843
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext#previousAgentName:member",
844
+ "docComment": "/**\n * The agent that was active immediately before this one, if any. Only set on `onActivate`.\n */\n",
845
+ "excerptTokens": [
846
+ {
847
+ "kind": "Content",
848
+ "text": "previousAgentName?: "
849
+ },
850
+ {
851
+ "kind": "Content",
852
+ "text": "string"
853
+ },
854
+ {
855
+ "kind": "Content",
856
+ "text": ";"
857
+ }
858
+ ],
859
+ "isReadonly": false,
860
+ "isOptional": true,
861
+ "releaseTag": "Beta",
862
+ "name": "previousAgentName",
863
+ "propertyTypeTokenRange": {
864
+ "startIndex": 1,
865
+ "endIndex": 2
866
+ }
867
+ },
868
+ {
869
+ "kind": "PropertySignature",
870
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext#sessionKey:member",
871
+ "docComment": "/**\n * The assistant session key — stable across reloads, unique per assistant instance.\n */\n",
872
+ "excerptTokens": [
873
+ {
874
+ "kind": "Content",
875
+ "text": "sessionKey: "
876
+ },
877
+ {
878
+ "kind": "Content",
879
+ "text": "string"
880
+ },
881
+ {
882
+ "kind": "Content",
883
+ "text": ";"
884
+ }
885
+ ],
886
+ "isReadonly": false,
887
+ "isOptional": false,
888
+ "releaseTag": "Beta",
889
+ "name": "sessionKey",
890
+ "propertyTypeTokenRange": {
891
+ "startIndex": 1,
892
+ "endIndex": 2
893
+ }
894
+ },
895
+ {
896
+ "kind": "PropertySignature",
897
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext#signal:member",
898
+ "docComment": "/**\n * Aborted if the session disconnects mid-activation.\n */\n",
899
+ "excerptTokens": [
900
+ {
901
+ "kind": "Content",
902
+ "text": "signal: "
903
+ },
904
+ {
905
+ "kind": "Reference",
906
+ "text": "AbortSignal",
907
+ "canonicalReference": "!AbortSignal:interface"
908
+ },
909
+ {
910
+ "kind": "Content",
911
+ "text": ";"
912
+ }
913
+ ],
914
+ "isReadonly": false,
915
+ "isOptional": false,
916
+ "releaseTag": "Beta",
917
+ "name": "signal",
918
+ "propertyTypeTokenRange": {
919
+ "startIndex": 1,
920
+ "endIndex": 2
921
+ }
922
+ }
923
+ ],
924
+ "extendsTokenRanges": []
925
+ },
799
926
  {
800
927
  "kind": "Class",
801
928
  "canonicalReference": "@genesislcap/ai-assistant!AgentPicker:class",
@@ -1957,6 +2084,48 @@
1957
2084
  ],
1958
2085
  "name": "getSuggestions"
1959
2086
  },
2087
+ {
2088
+ "kind": "MethodSignature",
2089
+ "canonicalReference": "@genesislcap/ai-assistant!AiDriver#getTurnSnapshots:member(1)",
2090
+ "docComment": "/**\n * Per-LLM-call snapshots — what the model saw each turn (prompt, tools, agent state). Used by the host's debug-log exporter. Optional because the interface is implemented by both leaf and orchestrating drivers; the orchestrator just delegates to its inner `ChatDriver`.\n */\n",
2091
+ "excerptTokens": [
2092
+ {
2093
+ "kind": "Content",
2094
+ "text": "getTurnSnapshots?(): "
2095
+ },
2096
+ {
2097
+ "kind": "Reference",
2098
+ "text": "ReadonlyArray",
2099
+ "canonicalReference": "!ReadonlyArray:interface"
2100
+ },
2101
+ {
2102
+ "kind": "Content",
2103
+ "text": "<"
2104
+ },
2105
+ {
2106
+ "kind": "Reference",
2107
+ "text": "TurnSnapshot",
2108
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot:interface"
2109
+ },
2110
+ {
2111
+ "kind": "Content",
2112
+ "text": ">"
2113
+ },
2114
+ {
2115
+ "kind": "Content",
2116
+ "text": ";"
2117
+ }
2118
+ ],
2119
+ "isOptional": true,
2120
+ "returnTypeTokenRange": {
2121
+ "startIndex": 1,
2122
+ "endIndex": 5
2123
+ },
2124
+ "releaseTag": "Beta",
2125
+ "overloadIndex": 1,
2126
+ "parameters": [],
2127
+ "name": "getTurnSnapshots"
2128
+ },
1960
2129
  {
1961
2130
  "kind": "MethodSignature",
1962
2131
  "canonicalReference": "@genesislcap/ai-assistant!AiDriver#isBusy:member(1)",
@@ -2270,20 +2439,17 @@
2270
2439
  },
2271
2440
  {
2272
2441
  "kind": "Reference",
2273
- "text": "ChatToolDefinition",
2274
- "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
2275
- },
2276
- {
2277
- "kind": "Content",
2278
- "text": "[]"
2442
+ "text": "ToolDefinitionsInput",
2443
+ "canonicalReference": "@genesislcap/ai-assistant!ToolDefinitionsInput:type"
2279
2444
  },
2280
2445
  {
2281
2446
  "kind": "Content",
2282
2447
  "text": ", systemPrompt?: "
2283
2448
  },
2284
2449
  {
2285
- "kind": "Content",
2286
- "text": "string"
2450
+ "kind": "Reference",
2451
+ "text": "SystemPromptInput",
2452
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptInput:type"
2287
2453
  },
2288
2454
  {
2289
2455
  "kind": "Content",
@@ -2314,6 +2480,14 @@
2314
2480
  "kind": "Content",
2315
2481
  "text": "number"
2316
2482
  },
2483
+ {
2484
+ "kind": "Content",
2485
+ "text": ", maxTurnSnapshots?: "
2486
+ },
2487
+ {
2488
+ "kind": "Content",
2489
+ "text": "number"
2490
+ },
2317
2491
  {
2318
2492
  "kind": "Content",
2319
2493
  "text": ");"
@@ -2343,39 +2517,47 @@
2343
2517
  "parameterName": "toolDefinitions",
2344
2518
  "parameterTypeTokenRange": {
2345
2519
  "startIndex": 5,
2346
- "endIndex": 7
2520
+ "endIndex": 6
2347
2521
  },
2348
2522
  "isOptional": true
2349
2523
  },
2350
2524
  {
2351
2525
  "parameterName": "systemPrompt",
2352
2526
  "parameterTypeTokenRange": {
2353
- "startIndex": 8,
2354
- "endIndex": 9
2527
+ "startIndex": 7,
2528
+ "endIndex": 8
2355
2529
  },
2356
2530
  "isOptional": true
2357
2531
  },
2358
2532
  {
2359
2533
  "parameterName": "primerHistory",
2360
2534
  "parameterTypeTokenRange": {
2361
- "startIndex": 10,
2362
- "endIndex": 12
2535
+ "startIndex": 9,
2536
+ "endIndex": 11
2363
2537
  },
2364
2538
  "isOptional": true
2365
2539
  },
2366
2540
  {
2367
2541
  "parameterName": "maxToolIterations",
2368
2542
  "parameterTypeTokenRange": {
2369
- "startIndex": 13,
2370
- "endIndex": 14
2543
+ "startIndex": 12,
2544
+ "endIndex": 13
2371
2545
  },
2372
2546
  "isOptional": true
2373
2547
  },
2374
2548
  {
2375
2549
  "parameterName": "maxFoldOperations",
2376
2550
  "parameterTypeTokenRange": {
2377
- "startIndex": 15,
2378
- "endIndex": 16
2551
+ "startIndex": 14,
2552
+ "endIndex": 15
2553
+ },
2554
+ "isOptional": true
2555
+ },
2556
+ {
2557
+ "parameterName": "maxTurnSnapshots",
2558
+ "parameterTypeTokenRange": {
2559
+ "startIndex": 16,
2560
+ "endIndex": 17
2379
2561
  },
2380
2562
  "isOptional": true
2381
2563
  }
@@ -2528,6 +2710,37 @@
2528
2710
  "isAbstract": false,
2529
2711
  "name": "getActiveFoldNames"
2530
2712
  },
2713
+ {
2714
+ "kind": "Method",
2715
+ "canonicalReference": "@genesislcap/ai-assistant!ChatDriver#getAgentReleaseRequested:member(1)",
2716
+ "docComment": "/**\n * Returns true if `releaseAgent` was called during the most recent turn. Consumed by the orchestrator to trigger the auto-pin release path.\n */\n",
2717
+ "excerptTokens": [
2718
+ {
2719
+ "kind": "Content",
2720
+ "text": "getAgentReleaseRequested(): "
2721
+ },
2722
+ {
2723
+ "kind": "Content",
2724
+ "text": "boolean"
2725
+ },
2726
+ {
2727
+ "kind": "Content",
2728
+ "text": ";"
2729
+ }
2730
+ ],
2731
+ "isStatic": false,
2732
+ "returnTypeTokenRange": {
2733
+ "startIndex": 1,
2734
+ "endIndex": 2
2735
+ },
2736
+ "releaseTag": "Beta",
2737
+ "isProtected": false,
2738
+ "overloadIndex": 1,
2739
+ "parameters": [],
2740
+ "isOptional": false,
2741
+ "isAbstract": false,
2742
+ "name": "getAgentReleaseRequested"
2743
+ },
2531
2744
  {
2532
2745
  "kind": "Method",
2533
2746
  "canonicalReference": "@genesislcap/ai-assistant!ChatDriver#getHistory:member(1)",
@@ -2755,6 +2968,51 @@
2755
2968
  "isAbstract": false,
2756
2969
  "name": "getSuggestions"
2757
2970
  },
2971
+ {
2972
+ "kind": "Method",
2973
+ "canonicalReference": "@genesislcap/ai-assistant!ChatDriver#getTurnSnapshots:member(1)",
2974
+ "docComment": "/**\n * Return the per-turn snapshots captured so far. Used by the host's debug log exporter to show what the LLM saw on each turn — system prompt, tool surface, and agent-supplied state (e.g. a machine snapshot).\n *\n * Ring-buffered at `MAX_TURN_SNAPSHOTS`; older entries are dropped.\n */\n",
2975
+ "excerptTokens": [
2976
+ {
2977
+ "kind": "Content",
2978
+ "text": "getTurnSnapshots(): "
2979
+ },
2980
+ {
2981
+ "kind": "Reference",
2982
+ "text": "ReadonlyArray",
2983
+ "canonicalReference": "!ReadonlyArray:interface"
2984
+ },
2985
+ {
2986
+ "kind": "Content",
2987
+ "text": "<"
2988
+ },
2989
+ {
2990
+ "kind": "Reference",
2991
+ "text": "TurnSnapshot",
2992
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot:interface"
2993
+ },
2994
+ {
2995
+ "kind": "Content",
2996
+ "text": ">"
2997
+ },
2998
+ {
2999
+ "kind": "Content",
3000
+ "text": ";"
3001
+ }
3002
+ ],
3003
+ "isStatic": false,
3004
+ "returnTypeTokenRange": {
3005
+ "startIndex": 1,
3006
+ "endIndex": 5
3007
+ },
3008
+ "releaseTag": "Beta",
3009
+ "isProtected": false,
3010
+ "overloadIndex": 1,
3011
+ "parameters": [],
3012
+ "isOptional": false,
3013
+ "isAbstract": false,
3014
+ "name": "getTurnSnapshots"
3015
+ },
2758
3016
  {
2759
3017
  "kind": "Method",
2760
3018
  "canonicalReference": "@genesislcap/ai-assistant!ChatDriver#isBusy:member(1)",
@@ -3385,30 +3643,21 @@
3385
3643
  },
3386
3644
  {
3387
3645
  "kind": "Function",
3388
- "canonicalReference": "@genesislcap/ai-assistant!expandToolTree:function(1)",
3389
- "docComment": "/**\n * Expands a flat list of tool definitions into a nested tree by resolving fold metadata from the corresponding handlers. Use this for debug output so the full tool hierarchy is visible rather than just the top-level facade names.\n *\n * @beta\n */\n",
3646
+ "canonicalReference": "@genesislcap/ai-assistant!defineStatefulAgent:function(1)",
3647
+ "docComment": "/**\n * Build an `AgentConfig` whose `systemPrompt`, `toolDefinitions`, and tool handlers all close over a long-lived state object created on activation.\n *\n * The framework wires the lifecycle: `init` on `onActivate`, `dispose` on `onDeactivate`. State is held inside the helper's closure never exposed on the resulting `AgentConfig` — so the redux serializer doesn't see it.\n *\n * @example\n * ```ts\n * const guidedBooking = defineStatefulAgent<{ machine: GuidedBookingMachine }>({\n * name: 'Guided Booking',\n * description: 'Books a trade via a guided wizard.',\n * excludeFromClassifier: true,\n * manualSelection: { enabled: true, hint: 'Step-by-step trade booking' },\n * init: () => ({ machine: new GuidedBookingMachine() }),\n * dispose: ({ state }) => state.machine.stop(),\n * systemPrompt: ({ state }) => composeFromMachine(state.machine),\n * toolDefinitions: ({ state }) => toolsForState(state.machine.state),\n * toolHandlers: ({ machine }) => ({ ... }),\n * });\n * ```\n *\n * @beta\n */\n",
3390
3648
  "excerptTokens": [
3391
3649
  {
3392
3650
  "kind": "Content",
3393
- "text": "export declare function expandToolTree(definitions: "
3651
+ "text": "export declare function defineStatefulAgent<S>(opts: "
3394
3652
  },
3395
3653
  {
3396
3654
  "kind": "Reference",
3397
- "text": "ChatToolDefinition",
3398
- "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
3399
- },
3400
- {
3401
- "kind": "Content",
3402
- "text": "[]"
3655
+ "text": "StatefulAgentInit",
3656
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit:interface"
3403
3657
  },
3404
3658
  {
3405
3659
  "kind": "Content",
3406
- "text": ", handlers: "
3407
- },
3408
- {
3409
- "kind": "Reference",
3410
- "text": "ChatToolHandlers",
3411
- "canonicalReference": "@genesislcap/foundation-ai!ChatToolHandlers:type"
3660
+ "text": "<S>"
3412
3661
  },
3413
3662
  {
3414
3663
  "kind": "Content",
@@ -3416,12 +3665,85 @@
3416
3665
  },
3417
3666
  {
3418
3667
  "kind": "Reference",
3419
- "text": "ToolTreeNode",
3420
- "canonicalReference": "@genesislcap/ai-assistant!ToolTreeNode:interface"
3421
- },
3422
- {
3423
- "kind": "Content",
3424
- "text": "[]"
3668
+ "text": "AgentConfig",
3669
+ "canonicalReference": "@genesislcap/ai-assistant!AgentConfig:type"
3670
+ },
3671
+ {
3672
+ "kind": "Content",
3673
+ "text": ";"
3674
+ }
3675
+ ],
3676
+ "fileUrlPath": "src/config/define-stateful-agent.ts",
3677
+ "returnTypeTokenRange": {
3678
+ "startIndex": 4,
3679
+ "endIndex": 5
3680
+ },
3681
+ "releaseTag": "Beta",
3682
+ "overloadIndex": 1,
3683
+ "parameters": [
3684
+ {
3685
+ "parameterName": "opts",
3686
+ "parameterTypeTokenRange": {
3687
+ "startIndex": 1,
3688
+ "endIndex": 3
3689
+ },
3690
+ "isOptional": false
3691
+ }
3692
+ ],
3693
+ "typeParameters": [
3694
+ {
3695
+ "typeParameterName": "S",
3696
+ "constraintTokenRange": {
3697
+ "startIndex": 0,
3698
+ "endIndex": 0
3699
+ },
3700
+ "defaultTypeTokenRange": {
3701
+ "startIndex": 0,
3702
+ "endIndex": 0
3703
+ }
3704
+ }
3705
+ ],
3706
+ "name": "defineStatefulAgent"
3707
+ },
3708
+ {
3709
+ "kind": "Function",
3710
+ "canonicalReference": "@genesislcap/ai-assistant!expandToolTree:function(1)",
3711
+ "docComment": "/**\n * Expands a flat list of tool definitions into a nested tree by resolving fold metadata from the corresponding handlers. Use this for debug output so the full tool hierarchy is visible rather than just the top-level facade names.\n *\n * @beta\n */\n",
3712
+ "excerptTokens": [
3713
+ {
3714
+ "kind": "Content",
3715
+ "text": "export declare function expandToolTree(definitions: "
3716
+ },
3717
+ {
3718
+ "kind": "Reference",
3719
+ "text": "ChatToolDefinition",
3720
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
3721
+ },
3722
+ {
3723
+ "kind": "Content",
3724
+ "text": "[]"
3725
+ },
3726
+ {
3727
+ "kind": "Content",
3728
+ "text": ", handlers: "
3729
+ },
3730
+ {
3731
+ "kind": "Reference",
3732
+ "text": "ChatToolHandlers",
3733
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolHandlers:type"
3734
+ },
3735
+ {
3736
+ "kind": "Content",
3737
+ "text": "): "
3738
+ },
3739
+ {
3740
+ "kind": "Reference",
3741
+ "text": "ToolTreeNode",
3742
+ "canonicalReference": "@genesislcap/ai-assistant!ToolTreeNode:interface"
3743
+ },
3744
+ {
3745
+ "kind": "Content",
3746
+ "text": "[]"
3425
3747
  },
3426
3748
  {
3427
3749
  "kind": "Content",
@@ -3776,6 +4098,36 @@
3776
4098
  "isAbstract": false,
3777
4099
  "name": "agentsChanged"
3778
4100
  },
4101
+ {
4102
+ "kind": "Property",
4103
+ "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#agentToggleTitle:member",
4104
+ "docComment": "/**\n * Tooltip shown on the picker toggle button.\n */\n",
4105
+ "excerptTokens": [
4106
+ {
4107
+ "kind": "Content",
4108
+ "text": "get agentToggleTitle(): "
4109
+ },
4110
+ {
4111
+ "kind": "Content",
4112
+ "text": "string"
4113
+ },
4114
+ {
4115
+ "kind": "Content",
4116
+ "text": ";"
4117
+ }
4118
+ ],
4119
+ "isReadonly": true,
4120
+ "isOptional": false,
4121
+ "releaseTag": "Beta",
4122
+ "name": "agentToggleTitle",
4123
+ "propertyTypeTokenRange": {
4124
+ "startIndex": 1,
4125
+ "endIndex": 2
4126
+ },
4127
+ "isStatic": false,
4128
+ "isProtected": false,
4129
+ "isAbstract": false
4130
+ },
3779
4131
  {
3780
4132
  "kind": "Property",
3781
4133
  "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#aiProvider:member",
@@ -4333,7 +4685,7 @@
4333
4685
  },
4334
4686
  {
4335
4687
  "kind": "Content",
4336
- "text": "[];\n meta: {\n timestamp: string;\n host: string;\n agentSummary: ({\n toolDefinitions: import(\"../utils/tool-fold\")."
4688
+ "text": "[];\n meta: {\n timestamp: string;\n host: string;\n agentSummary: ({\n toolDefinitions: string | import(\"../utils/tool-fold\")."
4337
4689
  },
4338
4690
  {
4339
4691
  "kind": "Reference",
@@ -4342,7 +4694,16 @@
4342
4694
  },
4343
4695
  {
4344
4696
  "kind": "Content",
4345
- "text": "[];\n toolHandlers: any;\n description: string;\n fallback?: never;\n name: string;\n systemPrompt?: string;\n primerHistory?: "
4697
+ "text": "[];\n toolHandlers: any;\n onActivate: any;\n onDeactivate: any;\n getDebugSnapshot: any;\n description: string;\n fallback?: never;\n excludeFromClassifier?: boolean;\n name: string;\n systemPrompt?: import(\"../config/config\")."
4698
+ },
4699
+ {
4700
+ "kind": "Reference",
4701
+ "text": "SystemPromptInput",
4702
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptInput:type"
4703
+ },
4704
+ {
4705
+ "kind": "Content",
4706
+ "text": ";\n primerHistory?: "
4346
4707
  },
4347
4708
  {
4348
4709
  "kind": "Reference",
@@ -4378,7 +4739,7 @@
4378
4739
  },
4379
4740
  {
4380
4741
  "kind": "Content",
4381
- "text": ";\n } | {\n toolDefinitions: import(\"../utils/tool-fold\")."
4742
+ "text": ";\n } | {\n toolDefinitions: string | import(\"../utils/tool-fold\")."
4382
4743
  },
4383
4744
  {
4384
4745
  "kind": "Reference",
@@ -4387,7 +4748,16 @@
4387
4748
  },
4388
4749
  {
4389
4750
  "kind": "Content",
4390
- "text": "[];\n toolHandlers: any;\n fallback: true;\n description?: never;\n name: string;\n systemPrompt?: string;\n primerHistory?: "
4751
+ "text": "[];\n toolHandlers: any;\n onActivate: any;\n onDeactivate: any;\n getDebugSnapshot: any;\n fallback: true;\n description?: never;\n name: string;\n systemPrompt?: import(\"../config/config\")."
4752
+ },
4753
+ {
4754
+ "kind": "Reference",
4755
+ "text": "SystemPromptInput",
4756
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptInput:type"
4757
+ },
4758
+ {
4759
+ "kind": "Content",
4760
+ "text": ";\n primerHistory?: "
4391
4761
  },
4392
4762
  {
4393
4763
  "kind": "Reference",
@@ -4432,7 +4802,16 @@
4432
4802
  },
4433
4803
  {
4434
4804
  "kind": "Content",
4435
- "text": "[];\n activeFoldStack: string[];\n debug: unknown;\n };\n }"
4805
+ "text": "[];\n activeFoldStack: string[];\n activeDebugSnapshot: unknown;\n turnSnapshots: readonly import(\"../components/chat-driver/chat-driver\")."
4806
+ },
4807
+ {
4808
+ "kind": "Reference",
4809
+ "text": "TurnSnapshot",
4810
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot:interface"
4811
+ },
4812
+ {
4813
+ "kind": "Content",
4814
+ "text": "[];\n debug: unknown;\n };\n }"
4436
4815
  },
4437
4816
  {
4438
4817
  "kind": "Content",
@@ -4442,7 +4821,7 @@
4442
4821
  "isStatic": false,
4443
4822
  "returnTypeTokenRange": {
4444
4823
  "startIndex": 1,
4445
- "endIndex": 26
4824
+ "endIndex": 32
4446
4825
  },
4447
4826
  "releaseTag": "Beta",
4448
4827
  "isProtected": false,
@@ -5008,6 +5387,36 @@
5008
5387
  "isAbstract": false,
5009
5388
  "name": "onChatHeaderMouseDown"
5010
5389
  },
5390
+ {
5391
+ "kind": "Property",
5392
+ "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#pinLocked:member",
5393
+ "docComment": "/**\n * The pin is locked when a stateful agent (one with lifecycle hooks) is *actively running* — i.e. its `onActivate` has fired and it owns live state. Until the user sends their first message, a freshly pinned stateful agent is not yet active and the picker should remain free; the user might change their mind and unpin without anything to clean up.\n *\n * We derive from `activeAgent` (set by the orchestrator after `onActivate` completes) rather than `pinnedAgentName` (set immediately on picker click). The serialized `activeAgent` strips lifecycle hooks, so we look up the live config from `this.agents` to check for them.\n */\n",
5394
+ "excerptTokens": [
5395
+ {
5396
+ "kind": "Content",
5397
+ "text": "get pinLocked(): "
5398
+ },
5399
+ {
5400
+ "kind": "Content",
5401
+ "text": "boolean"
5402
+ },
5403
+ {
5404
+ "kind": "Content",
5405
+ "text": ";"
5406
+ }
5407
+ ],
5408
+ "isReadonly": true,
5409
+ "isOptional": false,
5410
+ "releaseTag": "Beta",
5411
+ "name": "pinLocked",
5412
+ "propertyTypeTokenRange": {
5413
+ "startIndex": 1,
5414
+ "endIndex": 2
5415
+ },
5416
+ "isStatic": false,
5417
+ "isProtected": false,
5418
+ "isAbstract": false
5419
+ },
5011
5420
  {
5012
5421
  "kind": "Property",
5013
5422
  "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#pinnedAgentColour:member",
@@ -6490,7 +6899,7 @@
6490
6899
  },
6491
6900
  {
6492
6901
  "kind": "Content",
6493
- "text": "{\n maxHandoffs?: number;\n classifierHistoryLength?: number;\n classifierRetries?: number;\n maxToolIterations?: number;\n maxFoldOperations?: number;\n }"
6902
+ "text": "{\n sessionKey?: string;\n maxHandoffs?: number;\n classifierHistoryLength?: number;\n classifierRetries?: number;\n maxToolIterations?: number;\n maxFoldOperations?: number;\n maxTurnSnapshots?: number;\n }"
6494
6903
  },
6495
6904
  {
6496
6905
  "kind": "Content",
@@ -6625,6 +7034,42 @@
6625
7034
  "isAbstract": false,
6626
7035
  "name": "continueFromHistory"
6627
7036
  },
7037
+ {
7038
+ "kind": "Method",
7039
+ "canonicalReference": "@genesislcap/ai-assistant!OrchestratingDriver#dispose:member(1)",
7040
+ "docComment": "/**\n * Fire `onDeactivate` on the current active agent and abort any pending lifecycle work. Called by the host on session teardown so machines can release resources cleanly.\n */\n",
7041
+ "excerptTokens": [
7042
+ {
7043
+ "kind": "Content",
7044
+ "text": "dispose(): "
7045
+ },
7046
+ {
7047
+ "kind": "Reference",
7048
+ "text": "Promise",
7049
+ "canonicalReference": "!Promise:interface"
7050
+ },
7051
+ {
7052
+ "kind": "Content",
7053
+ "text": "<void>"
7054
+ },
7055
+ {
7056
+ "kind": "Content",
7057
+ "text": ";"
7058
+ }
7059
+ ],
7060
+ "isStatic": false,
7061
+ "returnTypeTokenRange": {
7062
+ "startIndex": 1,
7063
+ "endIndex": 3
7064
+ },
7065
+ "releaseTag": "Beta",
7066
+ "isProtected": false,
7067
+ "overloadIndex": 1,
7068
+ "parameters": [],
7069
+ "isOptional": false,
7070
+ "isAbstract": false,
7071
+ "name": "dispose"
7072
+ },
6628
7073
  {
6629
7074
  "kind": "Method",
6630
7075
  "canonicalReference": "@genesislcap/ai-assistant!OrchestratingDriver#getRawHistory:member(1)",
@@ -6776,6 +7221,51 @@
6776
7221
  "isAbstract": false,
6777
7222
  "name": "getSuggestions"
6778
7223
  },
7224
+ {
7225
+ "kind": "Method",
7226
+ "canonicalReference": "@genesislcap/ai-assistant!OrchestratingDriver#getTurnSnapshots:member(1)",
7227
+ "docComment": "/**\n * Delegates to the inner {@link ChatDriver} — turns are captured there.\n */\n",
7228
+ "excerptTokens": [
7229
+ {
7230
+ "kind": "Content",
7231
+ "text": "getTurnSnapshots(): "
7232
+ },
7233
+ {
7234
+ "kind": "Reference",
7235
+ "text": "ReadonlyArray",
7236
+ "canonicalReference": "!ReadonlyArray:interface"
7237
+ },
7238
+ {
7239
+ "kind": "Content",
7240
+ "text": "<"
7241
+ },
7242
+ {
7243
+ "kind": "Reference",
7244
+ "text": "TurnSnapshot",
7245
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot:interface"
7246
+ },
7247
+ {
7248
+ "kind": "Content",
7249
+ "text": ">"
7250
+ },
7251
+ {
7252
+ "kind": "Content",
7253
+ "text": ";"
7254
+ }
7255
+ ],
7256
+ "isStatic": false,
7257
+ "returnTypeTokenRange": {
7258
+ "startIndex": 1,
7259
+ "endIndex": 5
7260
+ },
7261
+ "releaseTag": "Beta",
7262
+ "isProtected": false,
7263
+ "overloadIndex": 1,
7264
+ "parameters": [],
7265
+ "isOptional": false,
7266
+ "isAbstract": false,
7267
+ "name": "getTurnSnapshots"
7268
+ },
6779
7269
  {
6780
7270
  "kind": "Method",
6781
7271
  "canonicalReference": "@genesislcap/ai-assistant!OrchestratingDriver#isBusy:member(1)",
@@ -7171,6 +7661,33 @@
7171
7661
  "endIndex": 2
7172
7662
  }
7173
7663
  },
7664
+ {
7665
+ "kind": "PropertySignature",
7666
+ "canonicalReference": "@genesislcap/ai-assistant!SpecialistAgentConfig#excludeFromClassifier:member",
7667
+ "docComment": "/**\n * When `true`, the classifier never auto-routes to this agent. The user can still select it manually via the picker, provided both prerequisites are met: this agent has `manualSelection.enabled` set to `true`, *and* the assistant has the picker enabled via `chatConfig.picker.mode`.\n *\n * Use this for agents that overlap heavily with a sibling (e.g. a guided wizard sitting next to a free-form agent in the same domain) and should only be reached intentionally rather than via classifier routing.\n *\n * @beta\n */\n",
7668
+ "excerptTokens": [
7669
+ {
7670
+ "kind": "Content",
7671
+ "text": "excludeFromClassifier?: "
7672
+ },
7673
+ {
7674
+ "kind": "Content",
7675
+ "text": "boolean"
7676
+ },
7677
+ {
7678
+ "kind": "Content",
7679
+ "text": ";"
7680
+ }
7681
+ ],
7682
+ "isReadonly": false,
7683
+ "isOptional": true,
7684
+ "releaseTag": "Beta",
7685
+ "name": "excludeFromClassifier",
7686
+ "propertyTypeTokenRange": {
7687
+ "startIndex": 1,
7688
+ "endIndex": 2
7689
+ }
7690
+ },
7174
7691
  {
7175
7692
  "kind": "PropertySignature",
7176
7693
  "canonicalReference": "@genesislcap/ai-assistant!SpecialistAgentConfig#fallback:member",
@@ -7207,53 +7724,799 @@
7207
7724
  ]
7208
7725
  },
7209
7726
  {
7210
- "kind": "Variable",
7211
- "canonicalReference": "@genesislcap/ai-assistant!strictFallbackAgent:var",
7212
- "docComment": "/**\n * A brief, professional fallback agent. States what is available without elaboration. The `{{agents}}` placeholder is replaced at runtime by `OrchestratingDriver` with the generated specialist list.\n *\n * @beta\n */\n",
7727
+ "kind": "Interface",
7728
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit:interface",
7729
+ "docComment": "/**\n * Init options for {@link defineStatefulAgent}. Generic over the state shape `S` the agent owns (a state machine, an observable controller, anything).\n *\n * The helper threads `state` through `systemPrompt`, `toolDefinitions`, and the `toolHandlers` factory so consumer code never has to reach for a closure or a module-level mutable.\n *\n * @beta\n */\n",
7213
7730
  "excerptTokens": [
7214
7731
  {
7215
7732
  "kind": "Content",
7216
- "text": "strictFallbackAgent: "
7217
- },
7218
- {
7219
- "kind": "Reference",
7220
- "text": "FallbackAgentConfig",
7221
- "canonicalReference": "@genesislcap/ai-assistant!FallbackAgentConfig:interface"
7733
+ "text": "export interface StatefulAgentInit<S> "
7222
7734
  }
7223
7735
  ],
7224
- "fileUrlPath": "src/config/fallback-agents.ts",
7225
- "isReadonly": true,
7736
+ "fileUrlPath": "src/config/define-stateful-agent.ts",
7226
7737
  "releaseTag": "Beta",
7227
- "name": "strictFallbackAgent",
7228
- "variableTypeTokenRange": {
7229
- "startIndex": 1,
7230
- "endIndex": 2
7231
- }
7232
- },
7233
- {
7234
- "kind": "TypeAlias",
7235
- "canonicalReference": "@genesislcap/ai-assistant!SuggestionsState:type",
7738
+ "typeParameters": [
7739
+ {
7740
+ "typeParameterName": "S",
7741
+ "constraintTokenRange": {
7742
+ "startIndex": 0,
7743
+ "endIndex": 0
7744
+ },
7745
+ "defaultTypeTokenRange": {
7746
+ "startIndex": 0,
7747
+ "endIndex": 0
7748
+ }
7749
+ }
7750
+ ],
7751
+ "name": "StatefulAgentInit",
7752
+ "preserveMemberOrder": false,
7753
+ "members": [
7754
+ {
7755
+ "kind": "PropertySignature",
7756
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#chatInputDuringExecution:member",
7757
+ "docComment": "/**\n * How the main chat input behaves while this agent is executing.\n */\n",
7758
+ "excerptTokens": [
7759
+ {
7760
+ "kind": "Content",
7761
+ "text": "chatInputDuringExecution?: "
7762
+ },
7763
+ {
7764
+ "kind": "Reference",
7765
+ "text": "ChatInputDuringExecutionMode",
7766
+ "canonicalReference": "@genesislcap/foundation-ai!ChatInputDuringExecutionMode:type"
7767
+ },
7768
+ {
7769
+ "kind": "Content",
7770
+ "text": ";"
7771
+ }
7772
+ ],
7773
+ "isReadonly": false,
7774
+ "isOptional": true,
7775
+ "releaseTag": "Beta",
7776
+ "name": "chatInputDuringExecution",
7777
+ "propertyTypeTokenRange": {
7778
+ "startIndex": 1,
7779
+ "endIndex": 2
7780
+ }
7781
+ },
7782
+ {
7783
+ "kind": "PropertySignature",
7784
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#description:member",
7785
+ "docComment": "/**\n * Plain-language description used by the classifier. Required: stateful agents are always specialists.\n */\n",
7786
+ "excerptTokens": [
7787
+ {
7788
+ "kind": "Content",
7789
+ "text": "description: "
7790
+ },
7791
+ {
7792
+ "kind": "Content",
7793
+ "text": "string"
7794
+ },
7795
+ {
7796
+ "kind": "Content",
7797
+ "text": ";"
7798
+ }
7799
+ ],
7800
+ "isReadonly": false,
7801
+ "isOptional": false,
7802
+ "releaseTag": "Beta",
7803
+ "name": "description",
7804
+ "propertyTypeTokenRange": {
7805
+ "startIndex": 1,
7806
+ "endIndex": 2
7807
+ }
7808
+ },
7809
+ {
7810
+ "kind": "PropertySignature",
7811
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#dispose:member",
7812
+ "docComment": "/**\n * Tear down the agent-scoped state. Called when the agent is being replaced. Awaited before the incoming agent's `init` runs.\n */\n",
7813
+ "excerptTokens": [
7814
+ {
7815
+ "kind": "Content",
7816
+ "text": "dispose?: "
7817
+ },
7818
+ {
7819
+ "kind": "Content",
7820
+ "text": "(ctx: "
7821
+ },
7822
+ {
7823
+ "kind": "Reference",
7824
+ "text": "AgentLifecycleContext",
7825
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext:interface"
7826
+ },
7827
+ {
7828
+ "kind": "Content",
7829
+ "text": " & {\n state: S;\n }) => void | "
7830
+ },
7831
+ {
7832
+ "kind": "Reference",
7833
+ "text": "Promise",
7834
+ "canonicalReference": "!Promise:interface"
7835
+ },
7836
+ {
7837
+ "kind": "Content",
7838
+ "text": "<void>"
7839
+ },
7840
+ {
7841
+ "kind": "Content",
7842
+ "text": ";"
7843
+ }
7844
+ ],
7845
+ "isReadonly": false,
7846
+ "isOptional": true,
7847
+ "releaseTag": "Beta",
7848
+ "name": "dispose",
7849
+ "propertyTypeTokenRange": {
7850
+ "startIndex": 1,
7851
+ "endIndex": 6
7852
+ }
7853
+ },
7854
+ {
7855
+ "kind": "PropertySignature",
7856
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#excludeFromClassifier:member",
7857
+ "docComment": "/**\n * Hide this agent from the classifier — only reachable via manual pinning. Stateful agents are always specialists; they cannot be the fallback (a fallback is a leaf invoked when no specialist matches, with no flow to own state for).\n */\n",
7858
+ "excerptTokens": [
7859
+ {
7860
+ "kind": "Content",
7861
+ "text": "excludeFromClassifier?: "
7862
+ },
7863
+ {
7864
+ "kind": "Content",
7865
+ "text": "boolean"
7866
+ },
7867
+ {
7868
+ "kind": "Content",
7869
+ "text": ";"
7870
+ }
7871
+ ],
7872
+ "isReadonly": false,
7873
+ "isOptional": true,
7874
+ "releaseTag": "Beta",
7875
+ "name": "excludeFromClassifier",
7876
+ "propertyTypeTokenRange": {
7877
+ "startIndex": 1,
7878
+ "endIndex": 2
7879
+ }
7880
+ },
7881
+ {
7882
+ "kind": "PropertySignature",
7883
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#getDebugSnapshot:member",
7884
+ "docComment": "/**\n * Optional getter for the debug-log snapshot. Defaults to auto-snapshotting any property on `state` that looks like a foundation-state-machine instance (has `state`, `context`, and `complete` fields). Override when the default doesn't capture what you need — e.g. multiple machines, or non-machine state worth recording.\n *\n * Return value must be JSON-serializable.\n */\n",
7885
+ "excerptTokens": [
7886
+ {
7887
+ "kind": "Content",
7888
+ "text": "getDebugSnapshot?: "
7889
+ },
7890
+ {
7891
+ "kind": "Content",
7892
+ "text": "(state: S) => unknown"
7893
+ },
7894
+ {
7895
+ "kind": "Content",
7896
+ "text": ";"
7897
+ }
7898
+ ],
7899
+ "isReadonly": false,
7900
+ "isOptional": true,
7901
+ "releaseTag": "Beta",
7902
+ "name": "getDebugSnapshot",
7903
+ "propertyTypeTokenRange": {
7904
+ "startIndex": 1,
7905
+ "endIndex": 2
7906
+ }
7907
+ },
7908
+ {
7909
+ "kind": "PropertySignature",
7910
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#init:member",
7911
+ "docComment": "/**\n * Construct the agent-scoped state. Called by the framework when this agent becomes active (`onActivate`). Awaited before the agent's first turn runs.\n */\n",
7912
+ "excerptTokens": [
7913
+ {
7914
+ "kind": "Content",
7915
+ "text": "init: "
7916
+ },
7917
+ {
7918
+ "kind": "Content",
7919
+ "text": "(ctx: "
7920
+ },
7921
+ {
7922
+ "kind": "Reference",
7923
+ "text": "AgentLifecycleContext",
7924
+ "canonicalReference": "@genesislcap/ai-assistant!AgentLifecycleContext:interface"
7925
+ },
7926
+ {
7927
+ "kind": "Content",
7928
+ "text": ") => S | "
7929
+ },
7930
+ {
7931
+ "kind": "Reference",
7932
+ "text": "Promise",
7933
+ "canonicalReference": "!Promise:interface"
7934
+ },
7935
+ {
7936
+ "kind": "Content",
7937
+ "text": "<S>"
7938
+ },
7939
+ {
7940
+ "kind": "Content",
7941
+ "text": ";"
7942
+ }
7943
+ ],
7944
+ "isReadonly": false,
7945
+ "isOptional": false,
7946
+ "releaseTag": "Beta",
7947
+ "name": "init",
7948
+ "propertyTypeTokenRange": {
7949
+ "startIndex": 1,
7950
+ "endIndex": 6
7951
+ }
7952
+ },
7953
+ {
7954
+ "kind": "PropertySignature",
7955
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#manualSelection:member",
7956
+ "docComment": "/**\n * Opt this agent in to manual picker selection.\n */\n",
7957
+ "excerptTokens": [
7958
+ {
7959
+ "kind": "Content",
7960
+ "text": "manualSelection?: "
7961
+ },
7962
+ {
7963
+ "kind": "Reference",
7964
+ "text": "ManualSelectionConfig",
7965
+ "canonicalReference": "@genesislcap/ai-assistant!ManualSelectionConfig:interface"
7966
+ },
7967
+ {
7968
+ "kind": "Content",
7969
+ "text": ";"
7970
+ }
7971
+ ],
7972
+ "isReadonly": false,
7973
+ "isOptional": true,
7974
+ "releaseTag": "Beta",
7975
+ "name": "manualSelection",
7976
+ "propertyTypeTokenRange": {
7977
+ "startIndex": 1,
7978
+ "endIndex": 2
7979
+ }
7980
+ },
7981
+ {
7982
+ "kind": "PropertySignature",
7983
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#name:member",
7984
+ "docComment": "/**\n * Display name — must be unique within the agents array.\n */\n",
7985
+ "excerptTokens": [
7986
+ {
7987
+ "kind": "Content",
7988
+ "text": "name: "
7989
+ },
7990
+ {
7991
+ "kind": "Content",
7992
+ "text": "string"
7993
+ },
7994
+ {
7995
+ "kind": "Content",
7996
+ "text": ";"
7997
+ }
7998
+ ],
7999
+ "isReadonly": false,
8000
+ "isOptional": false,
8001
+ "releaseTag": "Beta",
8002
+ "name": "name",
8003
+ "propertyTypeTokenRange": {
8004
+ "startIndex": 1,
8005
+ "endIndex": 2
8006
+ }
8007
+ },
8008
+ {
8009
+ "kind": "PropertySignature",
8010
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#primerHistory:member",
8011
+ "docComment": "/**\n * Static primer history prepended to every call (not visible to the user).\n */\n",
8012
+ "excerptTokens": [
8013
+ {
8014
+ "kind": "Content",
8015
+ "text": "primerHistory?: "
8016
+ },
8017
+ {
8018
+ "kind": "Reference",
8019
+ "text": "ChatMessage",
8020
+ "canonicalReference": "@genesislcap/foundation-ai!ChatMessage:interface"
8021
+ },
8022
+ {
8023
+ "kind": "Content",
8024
+ "text": "[]"
8025
+ },
8026
+ {
8027
+ "kind": "Content",
8028
+ "text": ";"
8029
+ }
8030
+ ],
8031
+ "isReadonly": false,
8032
+ "isOptional": true,
8033
+ "releaseTag": "Beta",
8034
+ "name": "primerHistory",
8035
+ "propertyTypeTokenRange": {
8036
+ "startIndex": 1,
8037
+ "endIndex": 3
8038
+ }
8039
+ },
8040
+ {
8041
+ "kind": "PropertySignature",
8042
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#subAgents:member",
8043
+ "docComment": "/**\n * Sub-agents available to this agent's tool handlers via `requestSubAgent`.\n */\n",
8044
+ "excerptTokens": [
8045
+ {
8046
+ "kind": "Content",
8047
+ "text": "subAgents?: "
8048
+ },
8049
+ {
8050
+ "kind": "Reference",
8051
+ "text": "AgentConfig",
8052
+ "canonicalReference": "@genesislcap/ai-assistant!AgentConfig:type"
8053
+ },
8054
+ {
8055
+ "kind": "Content",
8056
+ "text": "[]"
8057
+ },
8058
+ {
8059
+ "kind": "Content",
8060
+ "text": ";"
8061
+ }
8062
+ ],
8063
+ "isReadonly": false,
8064
+ "isOptional": true,
8065
+ "releaseTag": "Beta",
8066
+ "name": "subAgents",
8067
+ "propertyTypeTokenRange": {
8068
+ "startIndex": 1,
8069
+ "endIndex": 3
8070
+ }
8071
+ },
8072
+ {
8073
+ "kind": "PropertySignature",
8074
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#systemPrompt:member",
8075
+ "docComment": "/**\n * System prompt composed from current state. Resolved each tool-loop iteration. Use this to feed the LLM whatever the current state implies (e.g. a state machine's `meta.systemPrompt` plus captured context).\n */\n",
8076
+ "excerptTokens": [
8077
+ {
8078
+ "kind": "Content",
8079
+ "text": "systemPrompt?: "
8080
+ },
8081
+ {
8082
+ "kind": "Content",
8083
+ "text": "(ctx: "
8084
+ },
8085
+ {
8086
+ "kind": "Reference",
8087
+ "text": "SystemPromptContext",
8088
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext:interface"
8089
+ },
8090
+ {
8091
+ "kind": "Content",
8092
+ "text": " & {\n state: S;\n }) => string | "
8093
+ },
8094
+ {
8095
+ "kind": "Reference",
8096
+ "text": "Promise",
8097
+ "canonicalReference": "!Promise:interface"
8098
+ },
8099
+ {
8100
+ "kind": "Content",
8101
+ "text": "<string>"
8102
+ },
8103
+ {
8104
+ "kind": "Content",
8105
+ "text": ";"
8106
+ }
8107
+ ],
8108
+ "isReadonly": false,
8109
+ "isOptional": true,
8110
+ "releaseTag": "Beta",
8111
+ "name": "systemPrompt",
8112
+ "propertyTypeTokenRange": {
8113
+ "startIndex": 1,
8114
+ "endIndex": 6
8115
+ }
8116
+ },
8117
+ {
8118
+ "kind": "PropertySignature",
8119
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#toolDefinitions:member",
8120
+ "docComment": "/**\n * Tool definitions the LLM sees. Either a static array (resolved once) or a function resolved each tool-loop iteration. The function form is how a machine-driven agent narrows the surface per state.\n *\n * **Constraint:** the resolved handlers (returned from {@link StatefulAgentInit.toolHandlers}) must not include fold facades. Folds are an LLM-driven UX optimisation that competes with the machine for control of the tool view; one of them has to be in charge. Helper throws at init time if a fold-tagged handler is detected.\n */\n",
8121
+ "excerptTokens": [
8122
+ {
8123
+ "kind": "Content",
8124
+ "text": "toolDefinitions?: "
8125
+ },
8126
+ {
8127
+ "kind": "Reference",
8128
+ "text": "ChatToolDefinition",
8129
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
8130
+ },
8131
+ {
8132
+ "kind": "Content",
8133
+ "text": "[] | ((ctx: "
8134
+ },
8135
+ {
8136
+ "kind": "Reference",
8137
+ "text": "SystemPromptContext",
8138
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext:interface"
8139
+ },
8140
+ {
8141
+ "kind": "Content",
8142
+ "text": " & {\n state: S;\n }) => "
8143
+ },
8144
+ {
8145
+ "kind": "Reference",
8146
+ "text": "ChatToolDefinition",
8147
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
8148
+ },
8149
+ {
8150
+ "kind": "Content",
8151
+ "text": "[] | "
8152
+ },
8153
+ {
8154
+ "kind": "Reference",
8155
+ "text": "Promise",
8156
+ "canonicalReference": "!Promise:interface"
8157
+ },
8158
+ {
8159
+ "kind": "Content",
8160
+ "text": "<"
8161
+ },
8162
+ {
8163
+ "kind": "Reference",
8164
+ "text": "ChatToolDefinition",
8165
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
8166
+ },
8167
+ {
8168
+ "kind": "Content",
8169
+ "text": "[]>)"
8170
+ },
8171
+ {
8172
+ "kind": "Content",
8173
+ "text": ";"
8174
+ }
8175
+ ],
8176
+ "isReadonly": false,
8177
+ "isOptional": true,
8178
+ "releaseTag": "Beta",
8179
+ "name": "toolDefinitions",
8180
+ "propertyTypeTokenRange": {
8181
+ "startIndex": 1,
8182
+ "endIndex": 11
8183
+ }
8184
+ },
8185
+ {
8186
+ "kind": "PropertySignature",
8187
+ "canonicalReference": "@genesislcap/ai-assistant!StatefulAgentInit#toolHandlers:member",
8188
+ "docComment": "/**\n * Factory returning the tool handler map. Called with the live `state` at `onActivate` time; the handlers it returns are cached for the lifetime of this activation. Each handler closes over `state` and any other deps you captured.\n *\n * The handler set returned must be the **union** of every tool name your agent might advertise across all states — `toolDefinitions` filters which are visible to the LLM per turn, but every name still needs an entry here.\n */\n",
8189
+ "excerptTokens": [
8190
+ {
8191
+ "kind": "Content",
8192
+ "text": "toolHandlers?: "
8193
+ },
8194
+ {
8195
+ "kind": "Content",
8196
+ "text": "(state: S) => "
8197
+ },
8198
+ {
8199
+ "kind": "Reference",
8200
+ "text": "ChatToolHandlers",
8201
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolHandlers:type"
8202
+ },
8203
+ {
8204
+ "kind": "Content",
8205
+ "text": ";"
8206
+ }
8207
+ ],
8208
+ "isReadonly": false,
8209
+ "isOptional": true,
8210
+ "releaseTag": "Beta",
8211
+ "name": "toolHandlers",
8212
+ "propertyTypeTokenRange": {
8213
+ "startIndex": 1,
8214
+ "endIndex": 3
8215
+ }
8216
+ }
8217
+ ],
8218
+ "extendsTokenRanges": []
8219
+ },
8220
+ {
8221
+ "kind": "Variable",
8222
+ "canonicalReference": "@genesislcap/ai-assistant!strictFallbackAgent:var",
8223
+ "docComment": "/**\n * A brief, professional fallback agent. States what is available without elaboration. The `{{agents}}` placeholder is replaced at runtime by `OrchestratingDriver` with the generated specialist list.\n *\n * @beta\n */\n",
8224
+ "excerptTokens": [
8225
+ {
8226
+ "kind": "Content",
8227
+ "text": "strictFallbackAgent: "
8228
+ },
8229
+ {
8230
+ "kind": "Reference",
8231
+ "text": "FallbackAgentConfig",
8232
+ "canonicalReference": "@genesislcap/ai-assistant!FallbackAgentConfig:interface"
8233
+ }
8234
+ ],
8235
+ "fileUrlPath": "src/config/fallback-agents.ts",
8236
+ "isReadonly": true,
8237
+ "releaseTag": "Beta",
8238
+ "name": "strictFallbackAgent",
8239
+ "variableTypeTokenRange": {
8240
+ "startIndex": 1,
8241
+ "endIndex": 2
8242
+ }
8243
+ },
8244
+ {
8245
+ "kind": "TypeAlias",
8246
+ "canonicalReference": "@genesislcap/ai-assistant!SuggestionsState:type",
7236
8247
  "docComment": "/**\n * State of the chat suggestions feature.\n *\n * @beta\n */\n",
7237
8248
  "excerptTokens": [
7238
8249
  {
7239
8250
  "kind": "Content",
7240
- "text": "export type SuggestionsState = "
8251
+ "text": "export type SuggestionsState = "
8252
+ },
8253
+ {
8254
+ "kind": "Content",
8255
+ "text": "{\n status: 'idle';\n} | {\n status: 'loading';\n} | {\n status: 'loaded';\n suggestions: string[];\n} | {\n status: 'error';\n message: string;\n}"
8256
+ },
8257
+ {
8258
+ "kind": "Content",
8259
+ "text": ";"
8260
+ }
8261
+ ],
8262
+ "fileUrlPath": "src/main/main.types.ts",
8263
+ "releaseTag": "Beta",
8264
+ "name": "SuggestionsState",
8265
+ "typeTokenRange": {
8266
+ "startIndex": 1,
8267
+ "endIndex": 2
8268
+ }
8269
+ },
8270
+ {
8271
+ "kind": "Interface",
8272
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext:interface",
8273
+ "docComment": "/**\n * Context passed to the function form of `systemPrompt` / `toolDefinitions`. Resolved each tool-loop iteration so the agent can vary what the LLM sees per turn.\n *\n * @beta\n */\n",
8274
+ "excerptTokens": [
8275
+ {
8276
+ "kind": "Content",
8277
+ "text": "export interface SystemPromptContext "
8278
+ }
8279
+ ],
8280
+ "fileUrlPath": "src/config/config.ts",
8281
+ "releaseTag": "Beta",
8282
+ "name": "SystemPromptContext",
8283
+ "preserveMemberOrder": false,
8284
+ "members": [
8285
+ {
8286
+ "kind": "PropertySignature",
8287
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext#agentName:member",
8288
+ "docComment": "/**\n * The active agent's name.\n */\n",
8289
+ "excerptTokens": [
8290
+ {
8291
+ "kind": "Content",
8292
+ "text": "agentName: "
8293
+ },
8294
+ {
8295
+ "kind": "Content",
8296
+ "text": "string"
8297
+ },
8298
+ {
8299
+ "kind": "Content",
8300
+ "text": ";"
8301
+ }
8302
+ ],
8303
+ "isReadonly": false,
8304
+ "isOptional": false,
8305
+ "releaseTag": "Beta",
8306
+ "name": "agentName",
8307
+ "propertyTypeTokenRange": {
8308
+ "startIndex": 1,
8309
+ "endIndex": 2
8310
+ }
8311
+ },
8312
+ {
8313
+ "kind": "PropertySignature",
8314
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext#history:member",
8315
+ "docComment": "/**\n * Full conversation history up to (but not including) the message being processed.\n */\n",
8316
+ "excerptTokens": [
8317
+ {
8318
+ "kind": "Content",
8319
+ "text": "history: "
8320
+ },
8321
+ {
8322
+ "kind": "Reference",
8323
+ "text": "ReadonlyArray",
8324
+ "canonicalReference": "!ReadonlyArray:interface"
8325
+ },
8326
+ {
8327
+ "kind": "Content",
8328
+ "text": "<"
8329
+ },
8330
+ {
8331
+ "kind": "Reference",
8332
+ "text": "ChatMessage",
8333
+ "canonicalReference": "@genesislcap/foundation-ai!ChatMessage:interface"
8334
+ },
8335
+ {
8336
+ "kind": "Content",
8337
+ "text": ">"
8338
+ },
8339
+ {
8340
+ "kind": "Content",
8341
+ "text": ";"
8342
+ }
8343
+ ],
8344
+ "isReadonly": false,
8345
+ "isOptional": false,
8346
+ "releaseTag": "Beta",
8347
+ "name": "history",
8348
+ "propertyTypeTokenRange": {
8349
+ "startIndex": 1,
8350
+ "endIndex": 5
8351
+ }
8352
+ },
8353
+ {
8354
+ "kind": "PropertySignature",
8355
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext#signal:member",
8356
+ "docComment": "/**\n * Aborted if the turn is cancelled.\n */\n",
8357
+ "excerptTokens": [
8358
+ {
8359
+ "kind": "Content",
8360
+ "text": "signal: "
8361
+ },
8362
+ {
8363
+ "kind": "Reference",
8364
+ "text": "AbortSignal",
8365
+ "canonicalReference": "!AbortSignal:interface"
8366
+ },
8367
+ {
8368
+ "kind": "Content",
8369
+ "text": ";"
8370
+ }
8371
+ ],
8372
+ "isReadonly": false,
8373
+ "isOptional": false,
8374
+ "releaseTag": "Beta",
8375
+ "name": "signal",
8376
+ "propertyTypeTokenRange": {
8377
+ "startIndex": 1,
8378
+ "endIndex": 2
8379
+ }
8380
+ },
8381
+ {
8382
+ "kind": "PropertySignature",
8383
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext#turnIndex:member",
8384
+ "docComment": "/**\n * 0 = first LLM call this turn; > 0 = retry or subsequent tool-loop iteration.\n */\n",
8385
+ "excerptTokens": [
8386
+ {
8387
+ "kind": "Content",
8388
+ "text": "turnIndex: "
8389
+ },
8390
+ {
8391
+ "kind": "Content",
8392
+ "text": "number"
8393
+ },
8394
+ {
8395
+ "kind": "Content",
8396
+ "text": ";"
8397
+ }
8398
+ ],
8399
+ "isReadonly": false,
8400
+ "isOptional": false,
8401
+ "releaseTag": "Beta",
8402
+ "name": "turnIndex",
8403
+ "propertyTypeTokenRange": {
8404
+ "startIndex": 1,
8405
+ "endIndex": 2
8406
+ }
8407
+ }
8408
+ ],
8409
+ "extendsTokenRanges": []
8410
+ },
8411
+ {
8412
+ "kind": "TypeAlias",
8413
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptInput:type",
8414
+ "docComment": "/**\n * System prompt for an agent. Either a static string (resolved once) or a function resolved each tool-loop iteration. The function form lets the agent compute the prompt from external state — e.g. a state machine's current step.\n *\n * @beta\n */\n",
8415
+ "excerptTokens": [
8416
+ {
8417
+ "kind": "Content",
8418
+ "text": "export type SystemPromptInput = "
7241
8419
  },
7242
8420
  {
7243
8421
  "kind": "Content",
7244
- "text": "{\n status: 'idle';\n} | {\n status: 'loading';\n} | {\n status: 'loaded';\n suggestions: string[];\n} | {\n status: 'error';\n message: string;\n}"
8422
+ "text": "string | ((ctx: "
8423
+ },
8424
+ {
8425
+ "kind": "Reference",
8426
+ "text": "SystemPromptContext",
8427
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext:interface"
8428
+ },
8429
+ {
8430
+ "kind": "Content",
8431
+ "text": ") => string | "
8432
+ },
8433
+ {
8434
+ "kind": "Reference",
8435
+ "text": "Promise",
8436
+ "canonicalReference": "!Promise:interface"
8437
+ },
8438
+ {
8439
+ "kind": "Content",
8440
+ "text": "<string>)"
7245
8441
  },
7246
8442
  {
7247
8443
  "kind": "Content",
7248
8444
  "text": ";"
7249
8445
  }
7250
8446
  ],
7251
- "fileUrlPath": "src/main/main.types.ts",
8447
+ "fileUrlPath": "src/config/config.ts",
7252
8448
  "releaseTag": "Beta",
7253
- "name": "SuggestionsState",
8449
+ "name": "SystemPromptInput",
7254
8450
  "typeTokenRange": {
7255
8451
  "startIndex": 1,
7256
- "endIndex": 2
8452
+ "endIndex": 6
8453
+ }
8454
+ },
8455
+ {
8456
+ "kind": "TypeAlias",
8457
+ "canonicalReference": "@genesislcap/ai-assistant!ToolDefinitionsInput:type",
8458
+ "docComment": "/**\n * Tool definitions for an agent. Either a static array (the conventional shape) or a function resolved each tool-loop iteration. The function form lets the agent narrow the tool surface per turn — e.g. expose only the tools valid in the current state of a state machine.\n *\n * @beta\n */\n",
8459
+ "excerptTokens": [
8460
+ {
8461
+ "kind": "Content",
8462
+ "text": "export type ToolDefinitionsInput = "
8463
+ },
8464
+ {
8465
+ "kind": "Reference",
8466
+ "text": "ChatToolDefinition",
8467
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
8468
+ },
8469
+ {
8470
+ "kind": "Content",
8471
+ "text": "[] | ((ctx: "
8472
+ },
8473
+ {
8474
+ "kind": "Reference",
8475
+ "text": "SystemPromptContext",
8476
+ "canonicalReference": "@genesislcap/ai-assistant!SystemPromptContext:interface"
8477
+ },
8478
+ {
8479
+ "kind": "Content",
8480
+ "text": ") => "
8481
+ },
8482
+ {
8483
+ "kind": "Reference",
8484
+ "text": "ChatToolDefinition",
8485
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
8486
+ },
8487
+ {
8488
+ "kind": "Content",
8489
+ "text": "[] | "
8490
+ },
8491
+ {
8492
+ "kind": "Reference",
8493
+ "text": "Promise",
8494
+ "canonicalReference": "!Promise:interface"
8495
+ },
8496
+ {
8497
+ "kind": "Content",
8498
+ "text": "<"
8499
+ },
8500
+ {
8501
+ "kind": "Reference",
8502
+ "text": "ChatToolDefinition",
8503
+ "canonicalReference": "@genesislcap/foundation-ai!ChatToolDefinition:interface"
8504
+ },
8505
+ {
8506
+ "kind": "Content",
8507
+ "text": "[]>)"
8508
+ },
8509
+ {
8510
+ "kind": "Content",
8511
+ "text": ";"
8512
+ }
8513
+ ],
8514
+ "fileUrlPath": "src/config/config.ts",
8515
+ "releaseTag": "Beta",
8516
+ "name": "ToolDefinitionsInput",
8517
+ "typeTokenRange": {
8518
+ "startIndex": 1,
8519
+ "endIndex": 11
7257
8520
  }
7258
8521
  },
7259
8522
  {
@@ -7393,6 +8656,186 @@
7393
8656
  "endIndex": 2
7394
8657
  }
7395
8658
  ]
8659
+ },
8660
+ {
8661
+ "kind": "Interface",
8662
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot:interface",
8663
+ "docComment": "/**\n * One captured frame of what the LLM saw on a single tool-loop iteration. The driver records these as a ring buffer (cap: configurable via `chatConfig.agent.maxTurnSnapshots`, default 40) so the export log can show, per turn: which agent was active, the resolved system prompt, the tool names visible to the LLM, and any agent-supplied debug snapshot (e.g. machine state for stateful agents).\n *\n * @beta\n */\n",
8664
+ "excerptTokens": [
8665
+ {
8666
+ "kind": "Content",
8667
+ "text": "export interface TurnSnapshot "
8668
+ }
8669
+ ],
8670
+ "fileUrlPath": "src/components/chat-driver/chat-driver.ts",
8671
+ "releaseTag": "Beta",
8672
+ "name": "TurnSnapshot",
8673
+ "preserveMemberOrder": false,
8674
+ "members": [
8675
+ {
8676
+ "kind": "PropertySignature",
8677
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot#agentName:member",
8678
+ "docComment": "/**\n * Name of the agent active when this LLM call ran.\n */\n",
8679
+ "excerptTokens": [
8680
+ {
8681
+ "kind": "Content",
8682
+ "text": "agentName?: "
8683
+ },
8684
+ {
8685
+ "kind": "Content",
8686
+ "text": "string"
8687
+ },
8688
+ {
8689
+ "kind": "Content",
8690
+ "text": ";"
8691
+ }
8692
+ ],
8693
+ "isReadonly": false,
8694
+ "isOptional": true,
8695
+ "releaseTag": "Beta",
8696
+ "name": "agentName",
8697
+ "propertyTypeTokenRange": {
8698
+ "startIndex": 1,
8699
+ "endIndex": 2
8700
+ }
8701
+ },
8702
+ {
8703
+ "kind": "PropertySignature",
8704
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot#agentSnapshot:member",
8705
+ "docComment": "/**\n * Agent-supplied snapshot — machine state/context for stateful agents, undefined otherwise.\n */\n",
8706
+ "excerptTokens": [
8707
+ {
8708
+ "kind": "Content",
8709
+ "text": "agentSnapshot?: "
8710
+ },
8711
+ {
8712
+ "kind": "Content",
8713
+ "text": "unknown"
8714
+ },
8715
+ {
8716
+ "kind": "Content",
8717
+ "text": ";"
8718
+ }
8719
+ ],
8720
+ "isReadonly": false,
8721
+ "isOptional": true,
8722
+ "releaseTag": "Beta",
8723
+ "name": "agentSnapshot",
8724
+ "propertyTypeTokenRange": {
8725
+ "startIndex": 1,
8726
+ "endIndex": 2
8727
+ }
8728
+ },
8729
+ {
8730
+ "kind": "PropertySignature",
8731
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot#systemPrompt:member",
8732
+ "docComment": "/**\n * Final system prompt sent to the LLM (post-fold-suffix, post-retry hint).\n */\n",
8733
+ "excerptTokens": [
8734
+ {
8735
+ "kind": "Content",
8736
+ "text": "systemPrompt?: "
8737
+ },
8738
+ {
8739
+ "kind": "Content",
8740
+ "text": "string"
8741
+ },
8742
+ {
8743
+ "kind": "Content",
8744
+ "text": ";"
8745
+ }
8746
+ ],
8747
+ "isReadonly": false,
8748
+ "isOptional": true,
8749
+ "releaseTag": "Beta",
8750
+ "name": "systemPrompt",
8751
+ "propertyTypeTokenRange": {
8752
+ "startIndex": 1,
8753
+ "endIndex": 2
8754
+ }
8755
+ },
8756
+ {
8757
+ "kind": "PropertySignature",
8758
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot#timestamp:member",
8759
+ "docComment": "/**\n * ISO timestamp captured just before the LLM call.\n */\n",
8760
+ "excerptTokens": [
8761
+ {
8762
+ "kind": "Content",
8763
+ "text": "timestamp: "
8764
+ },
8765
+ {
8766
+ "kind": "Content",
8767
+ "text": "string"
8768
+ },
8769
+ {
8770
+ "kind": "Content",
8771
+ "text": ";"
8772
+ }
8773
+ ],
8774
+ "isReadonly": false,
8775
+ "isOptional": false,
8776
+ "releaseTag": "Beta",
8777
+ "name": "timestamp",
8778
+ "propertyTypeTokenRange": {
8779
+ "startIndex": 1,
8780
+ "endIndex": 2
8781
+ }
8782
+ },
8783
+ {
8784
+ "kind": "PropertySignature",
8785
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot#toolNames:member",
8786
+ "docComment": "/**\n * Tool names sent to the LLM, in order — definitions are static per name so names alone suffice.\n */\n",
8787
+ "excerptTokens": [
8788
+ {
8789
+ "kind": "Content",
8790
+ "text": "toolNames: "
8791
+ },
8792
+ {
8793
+ "kind": "Content",
8794
+ "text": "string[]"
8795
+ },
8796
+ {
8797
+ "kind": "Content",
8798
+ "text": ";"
8799
+ }
8800
+ ],
8801
+ "isReadonly": false,
8802
+ "isOptional": false,
8803
+ "releaseTag": "Beta",
8804
+ "name": "toolNames",
8805
+ "propertyTypeTokenRange": {
8806
+ "startIndex": 1,
8807
+ "endIndex": 2
8808
+ }
8809
+ },
8810
+ {
8811
+ "kind": "PropertySignature",
8812
+ "canonicalReference": "@genesislcap/ai-assistant!TurnSnapshot#turnIndex:member",
8813
+ "docComment": "/**\n * Monotonic counter across the driver's lifetime (does not reset on agent swap).\n */\n",
8814
+ "excerptTokens": [
8815
+ {
8816
+ "kind": "Content",
8817
+ "text": "turnIndex: "
8818
+ },
8819
+ {
8820
+ "kind": "Content",
8821
+ "text": "number"
8822
+ },
8823
+ {
8824
+ "kind": "Content",
8825
+ "text": ";"
8826
+ }
8827
+ ],
8828
+ "isReadonly": false,
8829
+ "isOptional": false,
8830
+ "releaseTag": "Beta",
8831
+ "name": "turnIndex",
8832
+ "propertyTypeTokenRange": {
8833
+ "startIndex": 1,
8834
+ "endIndex": 2
8835
+ }
8836
+ }
8837
+ ],
8838
+ "extendsTokenRanges": []
7396
8839
  }
7397
8840
  ]
7398
8841
  }