agl 23.0.0 → 24.0.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 (35) hide show
  1. package/changelog.md +11 -0
  2. package/dist_serve/bundle.js +811 -808
  3. package/dist_serve/bundle.js.map +1 -0
  4. package/dist_ts/00_commitinfo_data.js +1 -1
  5. package/dist_ts/classes.authstore.js +2 -2
  6. package/dist_ts/classes.browserresourcehost.d.ts +1 -0
  7. package/dist_ts/classes.browserresourcehost.js +7 -1
  8. package/dist_ts/classes.controller.d.ts +35 -5
  9. package/dist_ts/classes.controller.js +994 -229
  10. package/dist_ts/classes.validation.d.ts +9 -1
  11. package/dist_ts/classes.validation.js +62 -7
  12. package/dist_ts_interfaces/browsertransport.d.ts +72 -0
  13. package/dist_ts_interfaces/browsertransport.js +47 -0
  14. package/dist_ts_interfaces/index.d.ts +1 -0
  15. package/dist_ts_interfaces/index.js +2 -1
  16. package/dist_ts_interfaces/interfaces.d.ts +10 -6
  17. package/dist_ts_interfaces/interfaces.js +2 -3
  18. package/dist_ts_interfaces/requests.d.ts +20 -21
  19. package/package.json +5 -5
  20. package/readme.md +7 -3
  21. package/ts/00_commitinfo_data.ts +1 -1
  22. package/ts/classes.authstore.ts +1 -1
  23. package/ts/classes.browserresourcehost.ts +7 -0
  24. package/ts/classes.controller.ts +1367 -279
  25. package/ts/classes.validation.ts +77 -6
  26. package/ts_interfaces/browsertransport.ts +126 -0
  27. package/ts_interfaces/index.ts +1 -0
  28. package/ts_interfaces/interfaces.ts +11 -11
  29. package/ts_interfaces/requests.ts +23 -30
  30. package/ts_web/00_commitinfo_data.ts +1 -1
  31. package/ts_web/classes.browserviewtransport.ts +532 -0
  32. package/ts_web/classes.controllersocketclient.ts +6 -17
  33. package/ts_web/elements.harnesscontrollerapp.ts +450 -115
  34. package/ts_web/index.ts +1 -0
  35. package/ts_web/plugins.ts +2 -0
@@ -1,5 +1,4 @@
1
- import * as plugins from './plugins.js';
2
- export const controllerProtocolVersion = 23;
1
+ export const controllerProtocolVersion = 24;
3
2
  export const controllerUpgradeManagementVersion = 2;
4
3
  export const controllerPackageName = 'agl';
5
4
  export const controllerMaxToolEventBytes = 48 * 1024;
@@ -47,4 +46,4 @@ export const controllerEventTypes = [
47
46
  'terminals.changed',
48
47
  'upgrade.changed',
49
48
  ];
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2ludGVyZmFjZXMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxFQUFXLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FBVSxDQUFDO0FBQzdELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQWMsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxFQUFFLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsR0FBRyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQzFDLDhEQUF1RSxDQUFDO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFbEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBVSxDQUFDO0FBbUJ6RSw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxZQUFrQyxFQUFVLEVBQUUsQ0FDbkYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFVbEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVUsQ0FBQztBQWd2QnRGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2Qix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLDJCQUEyQjtJQUMzQix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsaUJBQWlCO0NBQ1QsQ0FBQyJ9
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2ludGVyZmFjZXMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxFQUFXLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FBVSxDQUFDO0FBQzdELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQWMsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxFQUFFLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsR0FBRyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQzFDLDhEQUF1RSxDQUFDO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFbEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBVSxDQUFDO0FBbUJ6RSw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxZQUFrQyxFQUFVLEVBQUUsQ0FDbkYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFVbEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVUsQ0FBQztBQWt2QnRGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2Qix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLDJCQUEyQjtJQUMzQix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsaUJBQWlCO0NBQ1QsQ0FBQyJ9
@@ -1,5 +1,5 @@
1
1
  import * as plugins from './plugins.js';
2
- import type { IControllerEvent, IControllerMessageBundle, IControllerMessagePage, TControllerModelChoice, TControllerModelOption, IControllerPathSuggestion, IControllerProject, TControllerResource, TControllerResourceKind, IControllerBrowserViewState, TControllerBrowserViewEvent, TControllerBrowserViewOperation, IControllerProvider, IControllerProviderAccountRateLimits, IControllerProviderConnection, IControllerProviderLogin, IControllerModelRefreshJob, IControllerRuntimeId, IControllerSession, IControllerSessionDraft, IControllerDraftAttachment, IControllerSessionGroup, IControllerSessionLayout, IControllerTerminal, TControllerTerminalId, IControllerSlashListResult, TControllerSlashExecuteResult, IControllerSessionDetail, IControllerSessionAuxiliary, IControllerSessionScratchpad, IControllerIntelligenceExchange, IControllerSettings, IControllerStatus, IControllerSystemMetrics, TControllerAuthState, TControllerPermissionReply, TControllerSessionHarnessId, TControllerSessionId } from './interfaces.js';
2
+ import type { IControllerEvent, IControllerMessageBundle, IControllerMessagePage, TControllerModelChoice, TControllerModelOption, IControllerPathSuggestion, IControllerProject, TControllerResource, TControllerResourceKind, IControllerBrowserViewState, IControllerProvider, IControllerProviderAccountRateLimits, IControllerProviderConnection, IControllerProviderLogin, IControllerModelRefreshJob, IControllerRuntimeId, IControllerSession, IControllerSessionDraft, IControllerDraftAttachment, IControllerSessionGroup, IControllerSessionLayout, IControllerTerminal, TControllerTerminalId, IControllerSlashListResult, TControllerSlashExecuteResult, IControllerSessionDetail, IControllerSessionAuxiliary, IControllerSessionScratchpad, IControllerIntelligenceExchange, IControllerSettings, IControllerStatus, IControllerSystemMetrics, TControllerAuthState, TControllerPermissionReply, TControllerSessionHarnessId, TControllerSessionId } from './interfaces.js';
3
3
  export interface IReq_ControllerStatus extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerStatus> {
4
4
  method: 'controller.status';
5
5
  request: Record<string, never>;
@@ -663,6 +663,9 @@ export interface IReq_ControllerBrowserViewOpen extends plugins.typedrequestInte
663
663
  viewId: string;
664
664
  resourceId: string;
665
665
  attachmentRevision: number;
666
+ streamGeneration: number;
667
+ events: plugins.typedrequestInterfaces.TVirtualStream<'receive'>;
668
+ operations: plugins.typedrequestInterfaces.TVirtualStream<'send'>;
666
669
  state: IControllerBrowserViewState;
667
670
  };
668
671
  }
@@ -670,41 +673,37 @@ export interface IReq_ControllerBrowserViewActivate extends plugins.typedrequest
670
673
  method: 'controller.browser.view.activate';
671
674
  request: {
672
675
  viewId: string;
676
+ streamGeneration: number;
673
677
  };
674
678
  response: {
675
679
  activated: true;
676
680
  };
677
681
  }
678
- export interface IReq_ControllerBrowserViewClose extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerBrowserViewClose> {
679
- method: 'controller.browser.view.close';
682
+ export interface IReq_ControllerBrowserViewRecover extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerBrowserViewRecover> {
683
+ method: 'controller.browser.view.recover';
680
684
  request: {
681
685
  viewId: string;
686
+ expectedStreamGeneration: number;
682
687
  };
683
688
  response: {
684
- closed: true;
685
- };
686
- }
687
- export interface IReq_ControllerBrowserViewOperate extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerBrowserViewOperate> {
688
- method: 'controller.browser.view.operate';
689
- request: {
690
689
  viewId: string;
691
- operation: TControllerBrowserViewOperation;
692
- };
693
- response: {
694
- accepted: boolean;
690
+ resourceId: string;
691
+ attachmentRevision: number;
692
+ streamGeneration: number;
693
+ events: plugins.typedrequestInterfaces.TVirtualStream<'receive'>;
694
+ operations: plugins.typedrequestInterfaces.TVirtualStream<'send'>;
695
695
  state: IControllerBrowserViewState;
696
696
  };
697
697
  }
698
- /** Server to client push for one exact human browser view. */
699
- export interface IReq_ControllerBrowserViewEvent extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerBrowserViewEvent> {
700
- method: 'controller.browser.view.event';
698
+ export interface IReq_ControllerBrowserViewClose extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerBrowserViewClose> {
699
+ method: 'controller.browser.view.close';
701
700
  request: {
702
701
  viewId: string;
703
- resourceId: string;
704
- attachmentRevision: number;
705
- event: TControllerBrowserViewEvent<'send'>;
702
+ expectedStreamGeneration: number;
703
+ };
704
+ response: {
705
+ closed: boolean;
706
706
  };
707
- response: Record<string, never>;
708
707
  }
709
708
  export interface IReq_ControllerTerminalCreate extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ControllerTerminalCreate> {
710
709
  method: 'controller.terminal.create';
@@ -803,4 +802,4 @@ export interface IReq_ControllerEvent extends plugins.typedrequestInterfaces.imp
803
802
  received: true;
804
803
  };
805
804
  }
806
- export type TControllerRequest = IReq_ControllerStatus | IReq_ControllerUpgradeLaunch | IReq_ControllerUpgradePrepare | IReq_ControllerUpgradePrepareBegin | IReq_ControllerUpgradeFinalize | IReq_ControllerSystemMetrics | IReq_ControllerAuthState | IReq_ControllerSetupBegin | IReq_ControllerSetupFinish | IReq_ControllerAuthenticationBegin | IReq_ControllerAuthenticationFinish | IReq_ControllerTempPasswordLogin | IReq_ControllerAuthResume | IReq_ControllerProjectList | IReq_ControllerProjectCreate | IReq_ControllerProjectRemove | IReq_ControllerProjectSuggest | IReq_ControllerProviderList | IReq_ControllerProviderConnectionList | IReq_ControllerProviderConnectionActivateOpenCode | IReq_ControllerProviderLoginBegin | IReq_ControllerProviderLoginGet | IReq_ControllerProviderLoginCancel | IReq_ControllerProviderConnectionLogout | IReq_ControllerProviderConnectionRateLimitsGet | IReq_ControllerProviderModelRefreshBegin | IReq_ControllerProviderModelRefreshGet | IReq_ControllerSlashList | IReq_ControllerSlashExecute | IReq_ControllerModelList | IReq_ControllerSettingsGet | IReq_ControllerSettingsUpdate | IReq_ControllerSessionList | IReq_ControllerSessionGet | IReq_ControllerSessionAuxiliaryGet | IReq_ControllerSessionModelUpdate | IReq_ControllerSessionScratchpadSave | IReq_ControllerSessionIntelligenceAsk | IReq_ControllerSessionMessagesPage | IReq_ControllerSessionMessageGet | IReq_ControllerSessionCreate | IReq_ControllerSessionDelete | IReq_ControllerSessionDiscardEmpty | IReq_ControllerSessionDraftGet | IReq_ControllerSessionDraftUpdate | IReq_ControllerSessionSend | IReq_ControllerSessionAbort | IReq_ControllerPermissionReply | IReq_ControllerQuestionReply | IReq_ControllerSessionRename | IReq_ControllerSessionArchive | IReq_ControllerSessionGroupsGet | IReq_ControllerSessionGroupsUpdate | IReq_ControllerSessionYolo | IReq_ControllerResourceList | IReq_ControllerResourceCreate | IReq_ControllerResourceRename | IReq_ControllerResourceAttach | IReq_ControllerResourceDetach | IReq_ControllerResourceRetire | IReq_ControllerResourceStart | IReq_ControllerResourceStop | IReq_ControllerBrowserViewOpen | IReq_ControllerBrowserViewActivate | IReq_ControllerBrowserViewClose | IReq_ControllerBrowserViewOperate | IReq_ControllerTerminalList | IReq_ControllerTerminalCreate | IReq_ControllerTerminalRename | IReq_ControllerTerminalRemove | IReq_ControllerTerminalAttach | IReq_ControllerTerminalDetach | IReq_ControllerTerminalInput | IReq_ControllerTerminalResize | IReq_ControllerTerminalOutput | IReq_ControllerBrowserViewEvent | IReq_ControllerEvent;
805
+ export type TControllerRequest = IReq_ControllerStatus | IReq_ControllerUpgradeLaunch | IReq_ControllerUpgradePrepare | IReq_ControllerUpgradePrepareBegin | IReq_ControllerUpgradeFinalize | IReq_ControllerSystemMetrics | IReq_ControllerAuthState | IReq_ControllerSetupBegin | IReq_ControllerSetupFinish | IReq_ControllerAuthenticationBegin | IReq_ControllerAuthenticationFinish | IReq_ControllerTempPasswordLogin | IReq_ControllerAuthResume | IReq_ControllerProjectList | IReq_ControllerProjectCreate | IReq_ControllerProjectRemove | IReq_ControllerProjectSuggest | IReq_ControllerProviderList | IReq_ControllerProviderConnectionList | IReq_ControllerProviderConnectionActivateOpenCode | IReq_ControllerProviderLoginBegin | IReq_ControllerProviderLoginGet | IReq_ControllerProviderLoginCancel | IReq_ControllerProviderConnectionLogout | IReq_ControllerProviderConnectionRateLimitsGet | IReq_ControllerProviderModelRefreshBegin | IReq_ControllerProviderModelRefreshGet | IReq_ControllerSlashList | IReq_ControllerSlashExecute | IReq_ControllerModelList | IReq_ControllerSettingsGet | IReq_ControllerSettingsUpdate | IReq_ControllerSessionList | IReq_ControllerSessionGet | IReq_ControllerSessionAuxiliaryGet | IReq_ControllerSessionModelUpdate | IReq_ControllerSessionScratchpadSave | IReq_ControllerSessionIntelligenceAsk | IReq_ControllerSessionMessagesPage | IReq_ControllerSessionMessageGet | IReq_ControllerSessionCreate | IReq_ControllerSessionDelete | IReq_ControllerSessionDiscardEmpty | IReq_ControllerSessionDraftGet | IReq_ControllerSessionDraftUpdate | IReq_ControllerSessionSend | IReq_ControllerSessionAbort | IReq_ControllerPermissionReply | IReq_ControllerQuestionReply | IReq_ControllerSessionRename | IReq_ControllerSessionArchive | IReq_ControllerSessionGroupsGet | IReq_ControllerSessionGroupsUpdate | IReq_ControllerSessionYolo | IReq_ControllerResourceList | IReq_ControllerResourceCreate | IReq_ControllerResourceRename | IReq_ControllerResourceAttach | IReq_ControllerResourceDetach | IReq_ControllerResourceRetire | IReq_ControllerResourceStart | IReq_ControllerResourceStop | IReq_ControllerBrowserViewOpen | IReq_ControllerBrowserViewActivate | IReq_ControllerBrowserViewRecover | IReq_ControllerBrowserViewClose | IReq_ControllerTerminalList | IReq_ControllerTerminalCreate | IReq_ControllerTerminalRename | IReq_ControllerTerminalRemove | IReq_ControllerTerminalAttach | IReq_ControllerTerminalDetach | IReq_ControllerTerminalInput | IReq_ControllerTerminalResize | IReq_ControllerTerminalOutput | IReq_ControllerEvent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agl",
3
- "version": "23.0.0",
3
+ "version": "24.0.0",
4
4
  "controllerUpgradeManagementVersion": 2,
5
5
  "private": false,
6
6
  "description": "Agent Gateway Layer for OpenCode and FlexHarness sessions",
@@ -19,16 +19,16 @@
19
19
  "@api.global/typedrequest": "8.0.2",
20
20
  "@api.global/typedrequest-interfaces": "7.1.0",
21
21
  "@api.global/typedserver": "11.1.0",
22
- "@api.global/typedsocket": "8.0.0",
22
+ "@api.global/typedsocket": "8.0.1",
23
23
  "@design.estate/dees-catalog": "6.12.1",
24
24
  "@design.estate/dees-element": "2.4.0",
25
- "@modelprofile.com/browser-runtime": "3.0.1",
25
+ "@modelprofile.com/browser-runtime": "3.1.1",
26
26
  "@modelprofile.com/crossharness-mcp": "4.1.1",
27
27
  "@modelprofile.com/flexharness": "5.0.0",
28
28
  "@opencode-ai/sdk": "1.18.15",
29
29
  "@push.rocks/smartagent": "5.0.1",
30
30
  "@push.rocks/smartai": "6.0.0",
31
- "@push.rocks/smartbrowser": "4.0.0",
31
+ "@push.rocks/smartbrowser": "4.0.1",
32
32
  "@push.rocks/smartcli": "4.3.0",
33
33
  "@push.rocks/smartdata": "11.6.1",
34
34
  "@push.rocks/smartdb": "5.2.1",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  "devDependencies": {
63
63
  "@git.zone/tsbuild": "4.4.2",
64
- "@git.zone/tsbundle": "2.11.4",
64
+ "@git.zone/tsbundle": "2.13.0",
65
65
  "@git.zone/tsrun": "2.0.6",
66
66
  "@git.zone/tstest": "4.0.0",
67
67
  "@types/node": "26.2.0"
package/readme.md CHANGED
@@ -45,7 +45,7 @@ The browser receives normalized AGL data. It never receives the OpenCode server
45
45
 
46
46
  ### Live Transcript Delivery
47
47
 
48
- Controller protocol v23 sends bounded live Assistant text and reasoning deltas when the browser already owns the exact preceding transcript revision. Every delta carries its stream epoch, revision, and UTF-8 coordinates; Flex deltas also carry the harness's authoritative transcript order. The browser applies only contiguous, correctly sized updates to the canonical transcript; a gap, stale owner, invalid coordinate, or queue overflow blocks further deltas from that epoch and requests authoritative session-detail hydration instead. Only adjacent compatible pending deltas may be coalesced, so interleaved updates retain their original order.
48
+ Controller protocol v24 sends bounded live Assistant text and reasoning deltas when the browser already owns the exact preceding transcript revision. Every delta carries its stream epoch, revision, and UTF-8 coordinates; Flex deltas also carry the harness's authoritative transcript order. The browser applies only contiguous, correctly sized updates to the canonical transcript; a gap, stale owner, invalid coordinate, or queue overflow blocks further deltas from that epoch and requests authoritative session-detail hydration instead. Only adjacent compatible pending deltas may be coalesced, so interleaved updates retain their original order.
49
49
 
50
50
  Streaming text is rendered without Markdown parsing. AGL refreshes the affected messages and enables normal Markdown rendering after the harness reports terminal state or authoritative hydration settles the transcript. This keeps long responses responsive without creating a second browser-side message graph.
51
51
 
@@ -207,7 +207,11 @@ AGL allows at most eight running terminals per project and 32 controller-wide.
207
207
 
208
208
  ### Browsers
209
209
 
210
- A browser resource provides tabs, navigation, viewport control, mouse, keyboard, and text input through a human canvas. Frames use finite authenticated binary streams rather than public URLs or base64 JSON payloads.
210
+ A browser resource provides tabs, navigation, viewport control, mouse, keyboard, and text input through a human canvas. Protocol v24 opens one authenticated persistent event stream and one paired operation stream for each human view. Every pair is bound to the exact peer, credential, resource authority, attachment revision, view, and stream generation.
211
+
212
+ State and operation results use bounded JSON packets. A frame is sent as one validated metadata packet immediately followed by its raw image bytes, rather than through a public URL or base64 JSON payload. Operation IDs, pending bytes, acknowledgements, event delivery, input rates, and recovery attempts are all bounded. Only adjacent compatible pointer-move or viewport operations can be coalesced, while cancellation retains a separately fenced path to live work.
213
+
214
+ The browser installs its renderer before activating a view. A recoverable stream failure suspends input, retires the old pair, opens and starts the next stream generation, and resumes the renderer's listeners before activating the replacement. Activation refreshes the runtime frame boundary, and input resumes only after that boundary arrives. Stale activation, recovery, cancellation, and close messages cannot act on another generation.
211
215
 
212
216
  When attached to a Flex conversation, the resource can provide permission-gated `navigate`, `snapshot`, `screenshot`, `click`, `fill`, and `press` actions to that exact run. Every channel is bound to the project, resource revision, session, run, actor, and current Flex generation.
213
217
 
@@ -323,7 +327,7 @@ Do not move these directories or edit migration and upgrade journals by hand.
323
327
 
324
328
  SmartData stores runtime configuration, passkey metadata, projects, layouts, model choices, scratchpads, tasks, goals, resources, Flex public projections, provider metadata, and bounded audit events. Prompt text is not written to audit records.
325
329
 
326
- Terminal I/O, active browser views, frame streams, composer drafts and their pending attachment state, active capability leases, and running processes remain memory-only. Once a prompt is submitted, attachment files exist only in private operation directories for the lifetime of that exact harness operation.
330
+ Terminal I/O, active browser views and their paired transport streams, composer drafts and their pending attachment state, active capability leases, and running processes remain memory-only. Once a prompt is submitted, attachment files exist only in private operation directories for the lifetime of that exact harness operation.
327
331
 
328
332
  Library consumers can resolve the same home contract:
329
333
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: 'agl',
6
- version: '23.0.0',
6
+ version: '24.0.0',
7
7
  description: 'Agent Gateway Layer for OpenCode and FlexHarness sessions'
8
8
  }
@@ -1246,7 +1246,7 @@ export class SmartDataAuthStore implements IAuthStore {
1246
1246
  name: nameArg,
1247
1247
  directory: directoryArg,
1248
1248
  directoryIdentityState: 'bound',
1249
- directoryIdentity: structuredClone(identityArg),
1249
+ directoryIdentity: { ancestry: structuredClone(identityArg.ancestry) },
1250
1250
  createdAt: new Date(),
1251
1251
  };
1252
1252
  const result = await ControllerProjectModel.exact.insert(candidate);
@@ -84,6 +84,7 @@ export interface IControllerBrowserResourceHostOptions {
84
84
  export interface IControllerBrowserHumanView {
85
85
  lease: plugins.browserRuntime.BrowserRuntimeLease;
86
86
  activate(listenerArg: (eventArg: plugins.browserRuntime.TBrowserRuntimeEvent) => void): Promise<void>;
87
+ refreshFrameStream(signalArg: AbortSignal): Promise<void>;
87
88
  close(): Promise<void>;
88
89
  }
89
90
 
@@ -854,6 +855,12 @@ export class ControllerBrowserResourceHost implements IControllerResourceRuntime
854
855
  });
855
856
  return activationPromise;
856
857
  },
858
+ refreshFrameStream: async (signalArg) => {
859
+ if (closing || !subscription || subscriptionClosed) {
860
+ throw new Error('The active browser frame subscription is unavailable.');
861
+ }
862
+ await lease.refreshFrameStream({ signal: signalArg });
863
+ },
857
864
  close: async () => {
858
865
  closing = true;
859
866
  const deadlineAt = Date.now() + this.cleanupTimeoutMs;