agl 40.6.0 → 41.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 (82) hide show
  1. package/changelog.md +33 -0
  2. package/dist_serve/bundle.js +3514 -3357
  3. package/dist_serve/bundle.js.map +2 -2
  4. package/dist_serve/bundle.js.third-party-notices.json +58 -32
  5. package/dist_serve/bundle.js.third-party-notices.txt +108 -33
  6. package/dist_ts/00_commitinfo_data.js +1 -1
  7. package/dist_ts/aglapi/aglapisurface.document.js +64 -37
  8. package/dist_ts/classes.controller.d.ts +8 -0
  9. package/dist_ts/classes.controller.js +109 -21
  10. package/dist_ts/classes.controllereventdelivery.d.ts +72 -0
  11. package/dist_ts/classes.controllereventdelivery.js +233 -0
  12. package/dist_ts/classes.flexmodels.public.js +4 -1
  13. package/dist_ts/classes.flexprojectionreader.d.ts +6 -0
  14. package/dist_ts/classes.flexprojectionreader.js +29 -5
  15. package/dist_ts/classes.flexservice.d.ts +2 -1
  16. package/dist_ts/classes.flexservice.js +34 -6
  17. package/dist_ts/classes.flexstore.d.ts +41 -4
  18. package/dist_ts/classes.flexstore.js +266 -203
  19. package/dist_ts/classes.ticketnotifier.js +4 -2
  20. package/dist_ts/classes.ticketstore.d.ts +50 -2
  21. package/dist_ts/classes.ticketstore.js +195 -78
  22. package/dist_ts/driver/classes.drivereventrelay.d.ts +13 -1
  23. package/dist_ts/driver/classes.drivereventrelay.js +99 -6
  24. package/dist_ts/driver/functions.driverinstructions.d.ts +1 -1
  25. package/dist_ts/driver/functions.driverinstructions.js +1 -1
  26. package/dist_ts/driver/functions.drivertools.d.ts +11 -2
  27. package/dist_ts/driver/functions.drivertools.js +19 -9
  28. package/dist_ts/fleet/classes.boardpump.d.ts +8 -2
  29. package/dist_ts/fleet/classes.boardpump.js +38 -20
  30. package/dist_ts/fleet/classes.ticketeffects.d.ts +17 -2
  31. package/dist_ts/fleet/classes.ticketeffects.js +16 -10
  32. package/dist_ts/fleet/classes.workers.d.ts +4 -0
  33. package/dist_ts/fleet/classes.workers.js +37 -17
  34. package/dist_ts/fleet/functions.workervalidation.js +2 -2
  35. package/dist_ts/functions.flexprivatesnapshot.d.ts +102 -0
  36. package/dist_ts/functions.flexprivatesnapshot.js +461 -0
  37. package/dist_ts/functions.mcptickettools.d.ts +3 -0
  38. package/dist_ts/functions.mcptickettools.js +2 -2
  39. package/dist_ts/functions.ticketcli.d.ts +1 -1
  40. package/dist_ts/functions.ticketcli.js +8 -4
  41. package/dist_ts/functions.ticketvalidation.d.ts +3 -0
  42. package/dist_ts/functions.ticketvalidation.js +7 -4
  43. package/dist_ts/interfaces.flexipc.d.ts +21 -2
  44. package/dist_ts/interfaces.flexipc.js +33 -16
  45. package/dist_ts_interfaces/fleetworkers.d.ts +6 -0
  46. package/dist_ts_interfaces/interfaces.d.ts +1 -1
  47. package/dist_ts_interfaces/interfaces.js +1 -1
  48. package/dist_ts_interfaces/requests.tickets.d.ts +8 -12
  49. package/dist_ts_interfaces/tickets.d.ts +37 -9
  50. package/dist_ts_interfaces/tickets.js +7 -1
  51. package/package.json +7 -7
  52. package/readme.md +54 -10
  53. package/ts/00_commitinfo_data.ts +1 -1
  54. package/ts/aglapi/aglapisurface.document.ts +63 -36
  55. package/ts/classes.controller.ts +131 -31
  56. package/ts/classes.controllereventdelivery.ts +289 -0
  57. package/ts/classes.flexmodels.public.ts +10 -0
  58. package/ts/classes.flexprojectionreader.ts +30 -3
  59. package/ts/classes.flexservice.ts +33 -5
  60. package/ts/classes.flexstore.ts +381 -246
  61. package/ts/classes.ticketnotifier.ts +3 -1
  62. package/ts/classes.ticketstore.ts +201 -75
  63. package/ts/driver/classes.drivereventrelay.ts +89 -4
  64. package/ts/driver/functions.driverinstructions.ts +1 -1
  65. package/ts/driver/functions.drivertools.ts +22 -8
  66. package/ts/fleet/classes.boardpump.ts +51 -19
  67. package/ts/fleet/classes.ticketeffects.ts +25 -11
  68. package/ts/fleet/classes.workers.ts +28 -16
  69. package/ts/fleet/functions.workervalidation.ts +1 -1
  70. package/ts/functions.flexprivatesnapshot.ts +601 -0
  71. package/ts/functions.mcptickettools.ts +1 -1
  72. package/ts/functions.ticketcli.ts +7 -3
  73. package/ts/functions.ticketvalidation.ts +7 -3
  74. package/ts/interfaces.flexipc.ts +50 -21
  75. package/ts_interfaces/fleetworkers.ts +6 -0
  76. package/ts_interfaces/interfaces.ts +1 -1
  77. package/ts_interfaces/requests.tickets.ts +9 -6
  78. package/ts_interfaces/tickets.ts +32 -1
  79. package/ts_web/00_commitinfo_data.ts +1 -1
  80. package/ts_web/elements.harnesscontrollerapp.ts +19 -8
  81. package/ts_web/elements.ticketboard.ts +16 -4
  82. package/ts_web/settings.general.ts +10 -4
@@ -73,7 +73,7 @@ import {
73
73
  readOnlyFlexRequestMethods,
74
74
  type IFlexDriverResolution,
75
75
  } from './interfaces.flexipc.js';
76
- import { composeDriverSystem, driverToolDefinitions } from './driver/functions.drivertools.js';
76
+ import { driverNotesContext, driverToolDefinitions } from './driver/functions.drivertools.js';
77
77
  import { flexClaudePoolConnectionId, parseFlexAuthorityConnectionId } from '../ts_interfaces/functions.authorityscope.js';
78
78
  import { createFailureReference, describeFailure } from './functions.failuredescription.js';
79
79
  import { resolveConfiguredFlexMcpServers } from './configuration/functions.flexmcp.js';
@@ -92,6 +92,13 @@ type TFlexAuthorityAccessTarget = { scopeId: string } | { purpose: TFlexInstalla
92
92
  type TFlexDelegatedRunAdmissionProviderContext =
93
93
  plugins.flexharness.IFlexDelegatedRunAdmissionContext<IFlexProjectScope>;
94
94
 
95
+ /**
96
+ * The driver's cache setting on Anthropic: one-hour breakpoints. The controller keeps the driver's cache warm for an
97
+ * hour after its board last changed (`fleet.driver.keepCacheWarm`), and FlexHarness times its warm turns by the TTL a
98
+ * call wrote, so an idle hour costs one warm turn instead of one every four minutes. Other providers keep their
99
+ * default: the ChatGPT backend caches in memory and takes no retention.
100
+ */
101
+ const flexDriverAnthropicCache: plugins.flexharness.TFlexAgentCacheSetting = { retention: '1h' };
95
102
  const flexFailureStatusTimeoutMs = 1_000;
96
103
 
97
104
  export const flexHarnessTimeoutPolicy = Object.freeze({
@@ -359,6 +366,7 @@ const projectSerializedMethods: ReadonlySet<TFlexRequestMethod> = new Set([
359
366
  'session.reversion.info',
360
367
  'slash.list',
361
368
  'message.page',
369
+ 'message.metadata.page',
362
370
  'message.get',
363
371
  'prompt.start',
364
372
  'prompt.continue',
@@ -403,6 +411,7 @@ const projectScopedMethods: ReadonlySet<TFlexRequestMethod> = new Set([
403
411
  'slash.list',
404
412
  'slash.execute',
405
413
  'message.page',
414
+ 'message.metadata.page',
406
415
  'message.get',
407
416
  'prompt.start',
408
417
  'prompt.continue',
@@ -1403,6 +1412,16 @@ export class FlexService {
1403
1412
  }),
1404
1413
  };
1405
1414
  }
1415
+ case 'message.metadata.page': {
1416
+ const payload = payloadArg as IFlexRequestMap['message.metadata.page']['request'];
1417
+ return {
1418
+ result: await harness.listMessageMetadataPage(payload.scopeId, payload.sessionId, {
1419
+ ...(payload.limit !== undefined ? { limit: payload.limit } : {}),
1420
+ ...(payload.before !== undefined ? { before: payload.before } : {}),
1421
+ ...(payload.includeUndone === undefined ? {} : { includeUndone: payload.includeUndone }),
1422
+ }),
1423
+ };
1424
+ }
1406
1425
  case 'message.get': {
1407
1426
  const payload = payloadArg as IFlexRequestMap['message.get']['request'];
1408
1427
  return {
@@ -2340,11 +2359,18 @@ export class FlexService {
2340
2359
  private async resolveConfiguredRunModel(
2341
2360
  contextArg: Readonly<plugins.flexharness.IFlexModelResolverContext<IFlexProjectScope>>,
2342
2361
  ): Promise<TFlexResolvedModel> {
2343
- const resolved = await this.resolveModel(
2362
+ const model = await this.resolveModel(
2344
2363
  contextArg.scopeId, contextArg.signal, contextArg.modelHint, contextArg, contextArg.sessionId,
2345
2364
  );
2346
2365
  const driver = await this.resolveDriver(contextArg);
2347
- const driverSystem = driver ? composeDriverSystem(driver.instructions, driver.notes) : undefined;
2366
+ // The driver's system prompt holds its stable instructions only; its notes are a pinned
2367
+ // context, so a notes update never rewrites the cached prefix.
2368
+ const resolved: TFlexResolvedModel = driver ? {
2369
+ ...model,
2370
+ ...(model.identity.provider === 'anthropic' ? { cache: flexDriverAnthropicCache } : {}),
2371
+ pinnedContext: driverNotesContext(driver.notes, driver.notesRevision),
2372
+ } : model;
2373
+ const driverSystem = driver?.instructions.trim();
2348
2374
  const key = this.configurationSessionKey(contextArg);
2349
2375
  const projection = this.configuredSessions.get(key);
2350
2376
  if (!projection) {
@@ -2363,7 +2389,8 @@ export class FlexService {
2363
2389
 
2364
2390
  /**
2365
2391
  * The controller says whether a root run belongs to the host's driver session, with the driver's
2366
- * instructions and notes. A run reads them once, so its system prompt stays stable while it runs.
2392
+ * instructions and its notes with their scratchpad revision. A run reads them once, so its system
2393
+ * prompt and pinned notes stay stable while it runs.
2367
2394
  */
2368
2395
  private resolveDriver(contextArg: Readonly<{
2369
2396
  scopeId: string;
@@ -4114,7 +4141,8 @@ export class FlexService {
4114
4141
  baseTextUtf8Bytes: eventArg.baseTextUtf8Bytes,
4115
4142
  textUtf8Bytes: eventArg.textUtf8Bytes,
4116
4143
  });
4117
- this.queueSessionChange(eventArg.scopeId, eventArg.sessionId, eventArg);
4144
+ // Content progress travels only as the delta: the part's start and completion, and the
4145
+ // run's lifecycle, carry the session change (updated time, preview, status).
4118
4146
  return;
4119
4147
  }
4120
4148
  if (