@aeolus-fleet/trierarch 0.20.2 → 0.20.4

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 (94) hide show
  1. package/README.md +5 -4
  2. package/dist/adapters/claude-code-detector.js +22 -4
  3. package/dist/adapters/claude-code-detector.js.map +1 -1
  4. package/dist/adapters/claude-code-screen.d.ts +5 -0
  5. package/dist/adapters/claude-code-screen.js +15 -0
  6. package/dist/adapters/claude-code-screen.js.map +1 -0
  7. package/dist/adapters/claude-code-setup.d.ts +2 -0
  8. package/dist/adapters/claude-code-setup.js +4 -0
  9. package/dist/adapters/claude-code-setup.js.map +1 -1
  10. package/dist/adapters/claude-code.d.ts +10 -4
  11. package/dist/adapters/claude-code.js +32 -5
  12. package/dist/adapters/claude-code.js.map +1 -1
  13. package/dist/adapters/codex-detector.d.ts +5 -0
  14. package/dist/adapters/codex-detector.js +47 -11
  15. package/dist/adapters/codex-detector.js.map +1 -1
  16. package/dist/adapters/codex-screen.d.ts +5 -0
  17. package/dist/adapters/codex-screen.js +16 -0
  18. package/dist/adapters/codex-screen.js.map +1 -0
  19. package/dist/adapters/codex-setup.d.ts +9 -0
  20. package/dist/adapters/codex-setup.js +36 -0
  21. package/dist/adapters/codex-setup.js.map +1 -1
  22. package/dist/adapters/codex.d.ts +4 -3
  23. package/dist/adapters/codex.js +16 -3
  24. package/dist/adapters/codex.js.map +1 -1
  25. package/dist/adapters/detected-file.js +8 -2
  26. package/dist/adapters/detected-file.js.map +1 -1
  27. package/dist/adapters/detectors.js +2 -0
  28. package/dist/adapters/detectors.js.map +1 -1
  29. package/dist/adapters/git-workspace.js +5 -0
  30. package/dist/adapters/git-workspace.js.map +1 -1
  31. package/dist/adapters/harnesses.d.ts +1 -1
  32. package/dist/adapters/harnesses.js +2 -1
  33. package/dist/adapters/harnesses.js.map +1 -1
  34. package/dist/adapters/json-state.js +2 -0
  35. package/dist/adapters/json-state.js.map +1 -1
  36. package/dist/adapters/launch-screen.d.ts +18 -0
  37. package/dist/adapters/launch-screen.js +15 -0
  38. package/dist/adapters/launch-screen.js.map +1 -0
  39. package/dist/adapters/log.d.ts +1 -1
  40. package/dist/adapters/rest-fleet.d.ts +3 -7
  41. package/dist/adapters/rest-fleet.js +18 -4
  42. package/dist/adapters/rest-fleet.js.map +1 -1
  43. package/dist/adapters/tmux.d.ts +2 -0
  44. package/dist/adapters/tmux.js +6 -0
  45. package/dist/adapters/tmux.js.map +1 -1
  46. package/dist/adapters/trust.d.ts +14 -0
  47. package/dist/adapters/trust.js +29 -0
  48. package/dist/adapters/trust.js.map +1 -0
  49. package/dist/cli/add.d.ts +41 -0
  50. package/dist/cli/add.js +52 -0
  51. package/dist/cli/add.js.map +1 -0
  52. package/dist/cli/config-check.js +9 -3
  53. package/dist/cli/config-check.js.map +1 -1
  54. package/dist/cli/detect.d.ts +1 -1
  55. package/dist/cli/detect.js +4 -3
  56. package/dist/cli/detect.js.map +1 -1
  57. package/dist/cli/init.d.ts +6 -1
  58. package/dist/cli/init.js +24 -20
  59. package/dist/cli/init.js.map +1 -1
  60. package/dist/cli/main.js +17 -5
  61. package/dist/cli/main.js.map +1 -1
  62. package/dist/cli/new-process.d.ts +23 -0
  63. package/dist/cli/new-process.js +25 -0
  64. package/dist/cli/new-process.js.map +1 -0
  65. package/dist/cli/places.d.ts +8 -0
  66. package/dist/cli/places.js +20 -0
  67. package/dist/cli/places.js.map +1 -0
  68. package/dist/cli/run.js +29 -7
  69. package/dist/cli/run.js.map +1 -1
  70. package/dist/core/check-settings.d.ts +14 -2
  71. package/dist/core/check-settings.js +19 -3
  72. package/dist/core/check-settings.js.map +1 -1
  73. package/dist/core/detect-harnesses.d.ts +9 -3
  74. package/dist/core/detect-harnesses.js +6 -5
  75. package/dist/core/detect-harnesses.js.map +1 -1
  76. package/dist/core/detected-options.d.ts +7 -1
  77. package/dist/core/detected-options.js +40 -2
  78. package/dist/core/detected-options.js.map +1 -1
  79. package/dist/core/entry.d.ts +4 -0
  80. package/dist/core/entry.js.map +1 -1
  81. package/dist/core/ports.d.ts +65 -0
  82. package/dist/core/reconciler.d.ts +31 -2
  83. package/dist/core/reconciler.js +193 -40
  84. package/dist/core/reconciler.js.map +1 -1
  85. package/dist/core/refuse-model.d.ts +22 -0
  86. package/dist/core/refuse-model.js +32 -0
  87. package/dist/core/refuse-model.js.map +1 -0
  88. package/dist/core/report-self.d.ts +2 -1
  89. package/dist/core/report-self.js +15 -6
  90. package/dist/core/report-self.js.map +1 -1
  91. package/dist/core/run-pass.d.ts +6 -1
  92. package/dist/core/run-pass.js +136 -28
  93. package/dist/core/run-pass.js.map +1 -1
  94. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAiL;IAClN,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,wGAAwG;IACxG,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,qBAAqB,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjK,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACtG,MAAM,6BAA6B,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAChF,MAAM,CAAC,IAAI,CAAC,6CAA6C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,qGAAqG,CAAC,CAAC;IAC/H,CAAC;IACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,yHAAyH;IACzH,IAAI,OAAO,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,eAAe,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5G,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,YAAY,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IACxC,MAAM,KAAK,GAAmB;QAC5B,IAAI,aAAa;YACf,OAAO,OAAO,CAAC,aAAa,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,cAAc,EAAE;QACzB,YAAY,EAAE,cAAc,CAAC,aAAa,CAAC;QAC3C,UAAU,EAAE,YAAY,CAAC,aAAa,CAAC;QACvC,OAAO,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACtE,IAAI,QAAQ;YACV,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC1B,CAAC;KACF,CAAC;IACF,MAAM,WAAW,GAAG,iBAAiB,CAAC;QACpC,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,eAAe;QACvB,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9G,OAAO,GAAG,EAAE,aAAa,EAAE,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACrF,CAAC;QACD,MAAM;KACP,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACjI,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,iGAAiG;IACjG,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjG,MAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,OAAO,aAAa,IAAI,CAAC,QAAQ,gCAAgC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IAC9I,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACrH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,EAO1B;IACC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAC1C,0EAA0E;IAC1E,MAAM,SAAS,GAAG,GAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnF,oIAAoI;IACpI,MAAM,MAAM,GAAG,KAAK,EAAE,IAAyB,EAAE,MAA4B,EAAiB,EAAE;QAC9F,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,SAAS,EAAE,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtG,MAAM,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CACJ,KAAK,IAAI,EAAE;YACT,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,EACD,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB;QACD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type CrewSettings, type ShipId, type TrierarchConfiguration } from '@aeolus-fleet/common';
2
2
  import type { TrierarchState } from './entry.js';
3
+ import type { TrustedPlaces } from './ports.js';
3
4
  import { type Result } from './shared/result.js';
4
5
  /** Why the trierarch cannot crew settings: the field at fault, when one is, and a reason argo can read. */
5
6
  export interface Refusal {
@@ -13,15 +14,26 @@ export interface CheckedSettings {
13
14
  readonly harness: string;
14
15
  readonly options: Readonly<Record<string, string>>;
15
16
  }
17
+ /**
18
+ * Why a harness may not start a session in a place: it does not trust it
19
+ * (#381). Adding a place through init is what trusts it, so the reason says
20
+ * to do that.
21
+ */
22
+ export declare function trustRefusal(at: {
23
+ harness: string;
24
+ workspace: CrewSettings['workspace'];
25
+ trusted: TrustedPlaces;
26
+ }): Refusal | undefined;
16
27
  /**
17
28
  * Checks a crew request's settings again before crewing (decision 0027):
18
29
  * the crew settings schema, then what this trierarch's configuration offers
19
- * (harness, repository or folder, each option and its value), and one folder
20
- * per ship. The trierarch plugin checked them already; this machine's
30
+ * (harness, repository or folder, each option and its value), that the
31
+ * harness trusts the repository or folder (#381), and one folder per ship. The trierarch plugin checked them already; this machine's
21
32
  * configuration may have changed since.
22
33
  */
23
34
  export declare function checkSettings(raw: unknown, context: {
24
35
  shipId: ShipId;
25
36
  configuration: TrierarchConfiguration;
26
37
  state: TrierarchState;
38
+ trusted: TrustedPlaces;
27
39
  }): Result<CheckedSettings, Refusal>;
@@ -1,5 +1,17 @@
1
1
  import { crewSettingsSchema } from '@aeolus-fleet/common';
2
2
  import { err, ok } from './shared/result.js';
3
+ /**
4
+ * Why a harness may not start a session in a place: it does not trust it
5
+ * (#381). Adding a place through init is what trusts it, so the reason says
6
+ * to do that.
7
+ */
8
+ export function trustRefusal(at) {
9
+ const { harness, workspace, trusted } = at;
10
+ const [field, kind, name, places] = workspace.kind === 'worktree'
11
+ ? ['workspace.repository', 'repository', workspace.repository, trusted[harness]?.repositories ?? []]
12
+ : ['workspace.name', 'folder', workspace.name, trusted[harness]?.folders ?? []];
13
+ return places.includes(name) ? undefined : { field, reason: `${harness} does not trust the ${kind} ${name}: add it with aeolus-trierarch init, which trusts it` };
14
+ }
3
15
  /** The field an issue names, as `options.model`, when it names one. */
4
16
  function fieldOf(path) {
5
17
  return path.length === 0 ? {} : { field: path.map(String).join('.') };
@@ -7,8 +19,8 @@ function fieldOf(path) {
7
19
  /**
8
20
  * Checks a crew request's settings again before crewing (decision 0027):
9
21
  * the crew settings schema, then what this trierarch's configuration offers
10
- * (harness, repository or folder, each option and its value), and one folder
11
- * per ship. The trierarch plugin checked them already; this machine's
22
+ * (harness, repository or folder, each option and its value), that the
23
+ * harness trusts the repository or folder (#381), and one folder per ship. The trierarch plugin checked them already; this machine's
12
24
  * configuration may have changed since.
13
25
  */
14
26
  export function checkSettings(raw, context) {
@@ -18,7 +30,7 @@ export function checkSettings(raw, context) {
18
30
  return err({ ...fieldOf(issue?.path ?? []), reason: issue?.message ?? 'The settings do not parse' });
19
31
  }
20
32
  const settings = parsed.data;
21
- const { configuration, state, shipId } = context;
33
+ const { configuration, state, shipId, trusted } = context;
22
34
  const harnessName = settings.harness ?? Object.keys(configuration.harnesses)[0];
23
35
  const harness = harnessName === undefined ? undefined : configuration.harnesses[harnessName];
24
36
  if (harnessName === undefined || harness === undefined) {
@@ -37,6 +49,10 @@ export function checkSettings(raw, context) {
37
49
  return err({ field: 'workspace.name', reason: `The folder ${workspace.name} crews ${crewing.shipId} already: one folder crews one ship` });
38
50
  }
39
51
  }
52
+ const untrusted = trustRefusal({ harness: harnessName, workspace, trusted });
53
+ if (untrusted !== undefined) {
54
+ return err(untrusted);
55
+ }
40
56
  const options = {};
41
57
  for (const [name, value] of Object.entries(settings.options)) {
42
58
  const option = harness.options[name];
@@ -1 +1 @@
1
- {"version":3,"file":"check-settings.js","sourceRoot":"","sources":["../../src/core/check-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-settings.js","sourceRoot":"","sources":["../../src/core/check-settings.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,20 @@
1
1
  import type { Detected, DetectedStore, HarnessDetector, Logger } from './ports.js';
2
2
  import type { Clock } from './shared/clock.js';
3
+ /**
4
+ * Why it detects: at start, only a harness whose version changed; by hand,
5
+ * every harness, clearing the ids sessions refused; after a refusal, the
6
+ * harness again, keeping them while its version is the same (#382).
7
+ */
8
+ export type DetectedBy = 'start' | 'hand' | 'refusal';
3
9
  export type DetectHarnesses = (at: {
4
10
  harnesses: readonly string[];
5
- isForced: boolean;
11
+ by: DetectedBy;
6
12
  }) => Promise<Detected>;
7
13
  /**
8
14
  * Use case: detect what the machine's harnesses offer (#365; docs/trierarch.md,
9
15
  * "Detected options"). A harness is detected when it has no detection yet,
10
- * when its version differs from the one detected, or by hand, never more
11
- * often: a probe costs a call. A harness whose CLI does not say its version,
16
+ * when its version differs from the one detected, by hand, or after a
17
+ * session refused a model, never more often: a probe costs a call. A harness whose CLI does not say its version,
12
18
  * or gives nothing to detect, keeps what was detected before, and the
13
19
  * operator is told. Only the harnesses given that have a detector are
14
20
  * detected; what was found is kept.
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Use case: detect what the machine's harnesses offer (#365; docs/trierarch.md,
3
3
  * "Detected options"). A harness is detected when it has no detection yet,
4
- * when its version differs from the one detected, or by hand, never more
5
- * often: a probe costs a call. A harness whose CLI does not say its version,
4
+ * when its version differs from the one detected, by hand, or after a
5
+ * session refused a model, never more often: a probe costs a call. A harness whose CLI does not say its version,
6
6
  * or gives nothing to detect, keeps what was detected before, and the
7
7
  * operator is told. Only the harnesses given that have a detector are
8
8
  * detected; what was found is kept.
9
9
  */
10
10
  export function createDetectHarnesses(deps) {
11
- return async ({ harnesses, isForced }) => {
11
+ return async ({ harnesses, by }) => {
12
12
  const before = await deps.store.load();
13
13
  const detected = { ...before };
14
14
  let isChanged = false;
@@ -23,7 +23,7 @@ export function createDetectHarnesses(deps) {
23
23
  deps.logger.warn(`${name} did not say its version, so its options stay as detected before`);
24
24
  continue;
25
25
  }
26
- if (!isForced && previous?.version === version) {
26
+ if (by === 'start' && previous?.version === version) {
27
27
  continue;
28
28
  }
29
29
  const found = await detector.detect({ version, previous, now: deps.clock.now() });
@@ -31,7 +31,8 @@ export function createDetectHarnesses(deps) {
31
31
  deps.logger.warn(`${name} ${version} gave nothing to detect, so its options stay as detected before`);
32
32
  continue;
33
33
  }
34
- detected[name] = found;
34
+ const refused = by === 'refusal' && previous?.version === version ? previous.refused : undefined;
35
+ detected[name] = refused === undefined ? found : { ...found, refused };
35
36
  isChanged = true;
36
37
  }
37
38
  if (isChanged) {
@@ -1 +1 @@
1
- {"version":3,"file":"detect-harnesses.js","sourceRoot":"","sources":["../../src/core/detect-harnesses.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAgI;IACpK,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAgD,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5E,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,kEAAkE,CAAC,CAAC;gBAC5F,SAAS;YACX,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,iEAAiE,CAAC,CAAC;gBACtG,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"detect-harnesses.js","sourceRoot":"","sources":["../../src/core/detect-harnesses.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAgI;IACpK,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAgD,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5E,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,kEAAkE,CAAC,CAAC;gBAC5F,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,OAAO,IAAI,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;gBACpD,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,iEAAiE,CAAC,CAAC;gBACtG,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,KAAK,SAAS,IAAI,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACjG,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;YACvE,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,15 @@
1
1
  import type { TrierarchConfiguration } from '@aeolus-fleet/common';
2
2
  import type { Detected } from './ports.js';
3
+ /** The option that names the model: its ids come from detection only (#382). */
4
+ export declare const MODEL_OPTION = "model";
3
5
  /**
4
6
  * The configuration with each configured harness's detected options added
5
7
  * (#365): an option the operator wrote replaces the detected one of its name
6
8
  * whole, values and default, so a hand edit is never overwritten and nothing
7
- * is merged. A detected harness the configuration does not offer is left out.
9
+ * is merged. The model is the exception (#382): its ids come from detection
10
+ * only, without the ids the machine refused, so a model the operator wrote is
11
+ * ignored. A detected harness the configuration does not offer is left out.
8
12
  */
9
13
  export declare function withDetectedOptions(configuration: TrierarchConfiguration, detected: Detected): TrierarchConfiguration;
14
+ /** The harnesses whose configuration writes a model option, which is ignored (#382): the operator is told. */
15
+ export declare function modelOptionsIgnored(configuration: TrierarchConfiguration): string[];
@@ -1,11 +1,49 @@
1
+ /** The option that names the model: its ids come from detection only (#382). */
2
+ export const MODEL_OPTION = 'model';
3
+ /** The detected model option without the ids the machine refused, its default moving to the first id left; none when none is left. */
4
+ function offeredModel(found) {
5
+ const model = found.options[MODEL_OPTION];
6
+ if (model === undefined) {
7
+ return undefined;
8
+ }
9
+ const refused = new Set((found.refused ?? []).map((each) => each.id));
10
+ const values = Object.fromEntries(Object.entries(model.values).filter(([id]) => !refused.has(id)));
11
+ const [first] = Object.keys(values);
12
+ if (first === undefined) {
13
+ return undefined;
14
+ }
15
+ const isDefaultLeft = model.default !== undefined && model.default in values;
16
+ return { values, ...(model.default !== undefined && { default: isDefaultLeft ? model.default : first }) };
17
+ }
18
+ /** The options without the model. */
19
+ function withoutModel(options) {
20
+ return Object.fromEntries(Object.entries(options).filter(([name]) => name !== MODEL_OPTION));
21
+ }
22
+ /** The detected options of a harness as offered: every one detected, the model without its refused ids. */
23
+ function offeredOptions(found) {
24
+ if (found === undefined) {
25
+ return {};
26
+ }
27
+ const rest = withoutModel(found.options);
28
+ const model = offeredModel(found);
29
+ return model === undefined ? rest : { [MODEL_OPTION]: model, ...rest };
30
+ }
1
31
  /**
2
32
  * The configuration with each configured harness's detected options added
3
33
  * (#365): an option the operator wrote replaces the detected one of its name
4
34
  * whole, values and default, so a hand edit is never overwritten and nothing
5
- * is merged. A detected harness the configuration does not offer is left out.
35
+ * is merged. The model is the exception (#382): its ids come from detection
36
+ * only, without the ids the machine refused, so a model the operator wrote is
37
+ * ignored. A detected harness the configuration does not offer is left out.
6
38
  */
7
39
  export function withDetectedOptions(configuration, detected) {
8
- const harnesses = Object.fromEntries(Object.entries(configuration.harnesses).map(([name, harness]) => [name, { ...harness, options: { ...detected[name]?.options, ...harness.options } }]));
40
+ const harnesses = Object.fromEntries(Object.entries(configuration.harnesses).map(([name, harness]) => [name, { ...harness, options: { ...offeredOptions(detected[name]), ...withoutModel(harness.options) } }]));
9
41
  return { ...configuration, harnesses };
10
42
  }
43
+ /** The harnesses whose configuration writes a model option, which is ignored (#382): the operator is told. */
44
+ export function modelOptionsIgnored(configuration) {
45
+ return Object.entries(configuration.harnesses)
46
+ .filter(([, harness]) => MODEL_OPTION in harness.options)
47
+ .map(([name]) => name);
48
+ }
11
49
  //# sourceMappingURL=detected-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detected-options.js","sourceRoot":"","sources":["../../src/core/detected-options.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAqC,EAAE,QAAkB;IAC3F,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CACtJ,CAAC;IACF,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"detected-options.js","sourceRoot":"","sources":["../../src/core/detected-options.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC;AAEpC,sIAAsI;AACtI,SAAS,YAAY,CAAC,KAAsB;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC;IAC7E,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5G,CAAC;AAED,qCAAqC;AACrC,SAAS,YAAY,CAAC,OAAmD;IACvE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,2GAA2G;AAC3G,SAAS,cAAc,CAAC,KAAkC;IACxD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAqC,EAAE,QAAkB;IAC3F,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAC3K,CAAC;IACF,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,mBAAmB,CAAC,aAAqC;IACvE,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;SAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -40,6 +40,10 @@ export interface Entry {
40
40
  /** Where its workspace is, once made. */
41
41
  readonly folder?: string;
42
42
  readonly hasStarted: boolean;
43
+ /** When the session crewing checks in its launch window started (#382), ISO 8601; none before its launch. */
44
+ readonly launchedAt?: string;
45
+ /** Set when its crew was final as it went back to crewing after a release elsewhere (row 11): a failed start then follows the restart rule (#469). */
46
+ readonly isFinal?: true;
43
47
  /** The inbox count last seen, and whether a wake waits for the session to turn idle. */
44
48
  readonly wake: {
45
49
  readonly waiting: number;
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/core/entry.ts"],"names":[],"mappings":"AAiBA,kGAAkG;AAClG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AA8ClG,MAAM,CAAC,MAAM,WAAW,GAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAE/F,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,MAAwC;IAC9E,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,QAAQ,CAAC,KAAqB,EAAE,KAAY;IAC1D,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,KAAqB,EAAE,MAAc;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC;IAClG,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/core/entry.ts"],"names":[],"mappings":"AAiBA,kGAAkG;AAClG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAkDlG,MAAM,CAAC,MAAM,WAAW,GAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAE/F,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,MAAwC;IAC9E,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,QAAQ,CAAC,KAAqB,EAAE,KAAY;IAC1D,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,KAAqB,EAAE,MAAc;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC;IAClG,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
@@ -63,6 +63,14 @@ export interface WrittenStatus {
63
63
  readonly attempt: number;
64
64
  readonly startedAt: Date | null;
65
65
  }
66
+ /** How the fleet answered a give-back (#382): it took the request back, or refused with its code and message. */
67
+ export type GiveBackAnswer = {
68
+ readonly kind: 'givenBack';
69
+ } | {
70
+ readonly kind: 'refused';
71
+ readonly code: string;
72
+ readonly message: string;
73
+ };
66
74
  export interface FleetPort {
67
75
  /** The fleet's URL, written into each session's identity. */
68
76
  readonly url: string;
@@ -70,6 +78,20 @@ export interface FleetPort {
70
78
  assignedRequests(): Promise<readonly AssignedRequest[]>;
71
79
  /** Says how its crew of an assigned ship stands, with the restart attempt and when the session started (#332). */
72
80
  writeStatus(shipId: ShipId, written: WrittenStatus): Promise<void>;
81
+ /**
82
+ * Gives back a request it cannot crew, for the settings version it tried,
83
+ * while its crew is not final (#382): the fleet unassigns it and ends the
84
+ * ship's lease. A refusal is answered, not thrown.
85
+ */
86
+ giveBack(shipId: ShipId, given: {
87
+ settingsVersion: number;
88
+ reason: string;
89
+ }): Promise<GiveBackAnswer>;
90
+ /** The trierarch's own ship, as its crew token says: its name names the machine. It answers while the lease holds. */
91
+ whoami(): Promise<{
92
+ shipId: ShipId;
93
+ name: string;
94
+ }>;
73
95
  /** Confirms it released the ship of a releasing request, which then goes. */
74
96
  confirmRelease(shipId: ShipId): Promise<void>;
75
97
  ship(shipId: ShipId): Promise<FleetShipStatus>;
@@ -150,7 +172,24 @@ export interface HarnessPort {
150
172
  shipId: ShipId;
151
173
  folder: string;
152
174
  }): Promise<void>;
175
+ /** What the session's screen shows in its launch window (#382), for the model it launched with; any model refused when it launched with none. */
176
+ launchSeen(session: {
177
+ shipId: ShipId;
178
+ model?: string;
179
+ }): Promise<LaunchSeen>;
153
180
  }
181
+ /**
182
+ * What a session's screen shows in its launch window (#382): activity once
183
+ * its first prompt made a tool call, the model refused, or neither yet.
184
+ */
185
+ export type LaunchSeen = {
186
+ readonly kind: 'active';
187
+ } | {
188
+ readonly kind: 'refused';
189
+ readonly model: string;
190
+ } | {
191
+ readonly kind: 'none';
192
+ };
154
193
  /** A session the process supervisor runs, by ship id: running, or exited and kept so the exit is seen. */
155
194
  export interface ObservedSession {
156
195
  readonly shipId: ShipId;
@@ -167,6 +206,19 @@ export interface ObservedWorktree {
167
206
  readonly name: string;
168
207
  readonly shipId?: ShipId;
169
208
  }
209
+ /** The configured repositories and folders each configured harness trusts, by name (#381). */
210
+ export type TrustedPlaces = Readonly<Record<string, {
211
+ readonly repositories: readonly string[];
212
+ readonly folders: readonly string[];
213
+ }>>;
214
+ /**
215
+ * What each harness trusts now, as its own files say (#381). Init trusts a
216
+ * place as it adds it; the trierarch only reads: a place a harness does not
217
+ * trust is never offered and never crewed.
218
+ */
219
+ export interface TrustPort {
220
+ trusted(): Promise<TrustedPlaces>;
221
+ }
170
222
  export interface WorkspacePort {
171
223
  /** Makes the workspace, or finds the one a stop mid-crew left half made: its folder. */
172
224
  prepare(workspace: {
@@ -177,6 +229,12 @@ export interface WorkspacePort {
177
229
  folder: string;
178
230
  }>;
179
231
  isClean(folder: string): Promise<boolean>;
232
+ /**
233
+ * What removing the worktree would discard, one line each (#450): each change
234
+ * not committed, as git status shows it, then each commit no branch, tag or
235
+ * remote branch keeps. None when everything in it is kept elsewhere.
236
+ */
237
+ unsaved(folder: string): Promise<readonly string[]>;
180
238
  /** Removes a worktree the trierarch made; never a configured folder. */
181
239
  remove(folder: string): Promise<void>;
182
240
  worktrees(): Promise<readonly ObservedWorktree[]>;
@@ -210,6 +268,13 @@ export interface DetectedHarness {
210
268
  readonly options: Readonly<Record<string, ConfiguredOption>>;
211
269
  /** Why detection could not find what it should, for argo, once per version; none when it found it. */
212
270
  readonly problem?: string;
271
+ /** The model ids a session on this machine refused at this version (#382), never offered again until the version changes or a hand detect; none when none was. */
272
+ readonly refused?: readonly RefusedModel[];
273
+ }
274
+ /** A model id a session refused, and when it was seen on its screen. */
275
+ export interface RefusedModel {
276
+ readonly id: string;
277
+ readonly at: Date;
213
278
  }
214
279
  /** What detection found, per harness. */
215
280
  export type Detected = Readonly<Record<string, DetectedHarness | undefined>>;
@@ -1,7 +1,7 @@
1
1
  import type { CrewStatus, ShipId, TrierarchConfiguration } from '@aeolus-fleet/common';
2
2
  import { type Refusal } from './check-settings.js';
3
3
  import { type Entry, type KeptWorktree, type TrierarchState } from './entry.js';
4
- import type { ArgoReport, AssignedRequest, ClearRequestToMe, InboxAnswer, ObservedSession, ObservedWorktree, Turn, WrittenStatus } from './ports.js';
4
+ import type { ArgoReport, AssignedRequest, ClearRequestToMe, InboxAnswer, LaunchSeen, ObservedSession, ObservedWorktree, TrustedPlaces, Turn, WrittenStatus } from './ports.js';
5
5
  /**
6
6
  * The Reconciler (docs/architecture.md, "The trierarch"): a pure function
7
7
  * from the crew requests assigned to the trierarch, its saved state, what
@@ -18,6 +18,8 @@ export interface Observed {
18
18
  readonly inbox: InboxAnswer;
19
19
  readonly turn: Turn;
20
20
  }>>;
21
+ /** For each entry crewing whose session started: what its screen shows in its launch window (#382). */
22
+ readonly launches: Readonly<Record<string, LaunchSeen>>;
21
23
  }
22
24
  export type Action =
23
25
  /** Crew the ship: starting prompt, register, workspace, identity, launch. Resumed while its own lease may still hold the ship. */
@@ -63,12 +65,33 @@ export type Action =
63
65
  readonly shipId: ShipId;
64
66
  readonly note: string;
65
67
  }
66
- /** Tell argo it cannot crew this settings version. */
68
+ /** Tell argo it cannot crew this settings version: its crew is final, so it is not given back. */
67
69
  | {
68
70
  readonly kind: 'refuse';
69
71
  readonly shipId: ShipId;
70
72
  readonly settingsVersion: number;
71
73
  readonly refusal: Refusal;
74
+ }
75
+ /**
76
+ * Give back a request it cannot crew while its crew is not final (#382), with
77
+ * why, without the machine's name, which the run pass adds. With the entry it
78
+ * crewed with, which ends first: session, identity and clean worktree.
79
+ */
80
+ | {
81
+ readonly kind: 'giveBack';
82
+ readonly shipId: ShipId;
83
+ readonly settingsVersion: number;
84
+ readonly reason: string;
85
+ readonly entry?: Entry;
86
+ }
87
+ /** A session refused the model it launched with (#382): kept refused at its harness's version, and argo told once. */
88
+ | {
89
+ readonly kind: 'modelRefused';
90
+ readonly shipId: ShipId;
91
+ readonly shipName?: string;
92
+ readonly harness: string;
93
+ readonly version: string;
94
+ readonly model: string;
72
95
  } | {
73
96
  readonly kind: 'argo';
74
97
  readonly report: ArgoReport;
@@ -92,7 +115,13 @@ export interface ReconcileContext {
92
115
  readonly observed: Observed;
93
116
  readonly now: Date;
94
117
  readonly configuration: TrierarchConfiguration;
118
+ /** What each harness trusts now: checked before every launch (#381). */
119
+ readonly trusted: TrustedPlaces;
120
+ /** Each harness's version as detection found it, for the reason a refused model is given back with (#382). */
121
+ readonly versions: Readonly<Record<string, string>>;
95
122
  }
123
+ /** How long after its start a crewing session has to show activity (#382): its first prompt made a tool call. */
124
+ export declare const LAUNCH_WINDOW_MS = 60000;
96
125
  export declare function reconcile(state: TrierarchState, context: ReconcileContext): Reconciled;
97
126
  /**
98
127
  * The status an entry writes (#332): its state; the restart attempt, the