@timurproko/a1 0.2.7-dev.767 → 0.2.7-dev.772
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/bin/cli.js +4 -0
- package/bin/tab-launch-context.d.ts +3 -0
- package/bin/tab-launch-context.js +52 -3
- package/bin/ui.js +6 -3
- package/dist/app/session-shell/session-shell-root.d.ts +0 -1
- package/dist/app/session-shell/session-shell-root.js +1 -1
- package/dist/app/session-shell/session-shell.js +3 -8
- package/dist/app/session-shell/shell-host.d.ts +2 -0
- package/dist/app/session-shell/shell-host.js +20 -1
- package/dist/cli/dispatch.d.ts +11 -1
- package/dist/cli/dispatch.js +79 -5
- package/dist/cli/tabs-request.d.ts +7 -0
- package/dist/cli/tabs-request.js +1 -0
- package/dist/cli/tabs.d.ts +14 -0
- package/dist/cli/tabs.js +140 -0
- package/dist/composition/owned-ui.d.ts +8 -2
- package/dist/composition/owned-ui.js +109 -12
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +3 -1
- package/dist/features/launch/intent.js +7 -4
- package/dist/features/resident-tab/auto-name.d.ts +11 -0
- package/dist/features/resident-tab/auto-name.js +42 -0
- package/dist/features/resident-tab/index.d.ts +3 -0
- package/dist/features/resident-tab/index.js +3 -0
- package/dist/features/resident-tab/shortcuts.d.ts +10 -0
- package/dist/features/resident-tab/shortcuts.js +35 -0
- package/dist/features/resident-tab/status-deriver.d.ts +9 -0
- package/dist/features/resident-tab/status-deriver.js +15 -0
- package/dist/foundation/launch-context/index.d.ts +4 -0
- package/dist/foundation/launch-context/index.js +10 -0
- package/dist/foundation/release/bootstrap.d.ts +4 -2
- package/dist/foundation/release/bootstrap.js +11 -8
- package/dist/foundation/release/cohort-state.d.ts +1 -1
- package/dist/foundation/release/cohort-state.js +1 -1
- package/dist/foundation/release/release-gc.d.ts +3 -0
- package/dist/foundation/release/release-gc.js +44 -8
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +16 -0
- package/dist/foundation/resident-tabs/bounded-host-command.js +35 -0
- package/dist/foundation/resident-tabs/bridge-client.d.ts +18 -3
- package/dist/foundation/resident-tabs/bridge-client.js +87 -7
- package/dist/foundation/resident-tabs/doctor.d.ts +29 -0
- package/dist/foundation/resident-tabs/doctor.js +166 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +2 -1
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +33 -7
- package/dist/foundation/resident-tabs/index.d.ts +7 -1
- package/dist/foundation/resident-tabs/index.js +4 -1
- package/dist/foundation/resident-tabs/maintenance.d.ts +42 -0
- package/dist/foundation/resident-tabs/maintenance.js +78 -0
- package/dist/foundation/resident-tabs/release-holds.d.ts +27 -0
- package/dist/foundation/resident-tabs/release-holds.js +77 -0
- package/dist/foundation/resident-tabs/routing.d.ts +4 -3
- package/dist/foundation/resident-tabs/routing.js +6 -4
- package/dist/foundation/resident-tabs/settings.d.ts +7 -2
- package/dist/foundation/resident-tabs/settings.js +17 -16
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +18 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +53 -0
- package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
- package/dist/foundation/resident-tabs/zip-archive.js +56 -0
- package/dist/foundation/session-writer-lock/index.d.ts +5 -0
- package/dist/foundation/session-writer-lock/index.js +13 -9
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +4 -2
- package/dist/integrations/pi/components/shell-presenters-info.js +38 -4
- package/dist/integrations/pi/engine/adapter.d.ts +1 -0
- package/dist/integrations/pi/engine/adapter.js +3 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
- package/dist/native/darwin-arm64/a1_session_lock.node +0 -0
- package/dist/native/darwin-arm64/manifest.json +1 -1
- package/dist/native/darwin-arm64/terminal-host +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
- package/dist/native/darwin-arm64/terminal-host.manifest.json +44 -0
- package/dist/native/darwin-x64/a1_session_lock.node +0 -0
- package/dist/native/darwin-x64/manifest.json +20 -0
- package/dist/native/darwin-x64/process-guardian +0 -0
- package/dist/native/darwin-x64/terminal-host +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
- package/dist/native/darwin-x64/terminal-host.manifest.json +44 -0
- package/dist/native/linux-x64/a1_session_lock.node +0 -0
- package/dist/native/linux-x64/manifest.json +1 -1
- package/dist/native/linux-x64/terminal-host +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
- package/dist/native/linux-x64/terminal-host.manifest.json +44 -0
- package/dist/native/win32-x64/a1_session_lock.node +0 -0
- package/dist/native/win32-x64/manifest.json +2 -2
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
- package/dist/native/win32-x64/terminal-host.exe +0 -0
- package/dist/native/win32-x64/terminal-host.manifest.json +44 -0
- package/dist/ui/settings/declarations.d.ts +19 -43
- package/dist/ui/settings/declarations.js +19 -35
- package/dist/ui/settings/index.d.ts +1 -1
- package/dist/ui/settings/index.js +1 -1
- package/dist/ui/settings/manager.d.ts +1 -0
- package/dist/ui/settings/manager.js +9 -1
- package/dist/ui/settings/migrations.js +12 -0
- package/dist/ui/settings/resolution.d.ts +0 -2
- package/dist/ui/settings/resolution.js +1 -13
- package/dist/ui/settings/sections.js +0 -4
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
- package/docs/architecture/internal-naming.md +2 -0
- package/docs/architecture/process-guardian-provenance.md +2 -0
- package/docs/architecture/resident-tabs-requirements.md +1 -563
- package/docs/architecture/resident-tabs.md +166 -94
- package/docs/architecture/terminal-host-provenance.md +13 -3
- package/docs/architecture/toolchain.md +1 -1
- package/docs/ci-release-runbook.md +2 -2
- package/docs/features/launch-profiles.md +11 -8
- package/docs/manual-resident-tabs-acceptance.md +51 -0
- package/docs/validation.md +9 -1
- package/package.json +5 -1
|
Binary file
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "a1-terminal-host-artifact-v1",
|
|
3
|
+
"protocolVersion": 1,
|
|
4
|
+
"generation": 1,
|
|
5
|
+
"crateVersion": "0.1.0-dev",
|
|
6
|
+
"platform": "win32",
|
|
7
|
+
"architecture": "x64",
|
|
8
|
+
"target": "x86_64-pc-windows-msvc",
|
|
9
|
+
"capability": "supported",
|
|
10
|
+
"builtAt": "2026-10-15T16:41:35.484Z",
|
|
11
|
+
"artifact": {
|
|
12
|
+
"filename": "terminal-host.exe",
|
|
13
|
+
"sha256": "cbcda1f0a7234ac3a2938fbedecaa71e93c0a9b18bfcc52afb434fc5c8c3e038",
|
|
14
|
+
"size": 5114368
|
|
15
|
+
},
|
|
16
|
+
"sessionLock": {
|
|
17
|
+
"filename": "a1_session_lock.node",
|
|
18
|
+
"sha256": "9eb9f269336acd2955640c1044df2bcfceabbe43bdbc441f2b41e08072ffbd29",
|
|
19
|
+
"size": 1996288
|
|
20
|
+
},
|
|
21
|
+
"notices": {
|
|
22
|
+
"filename": "terminal-host-THIRD-PARTY-NOTICES.txt",
|
|
23
|
+
"sha256": "9e80136b62106ac672162dacbd0d6eb2a94b3318e597e40dfcf70c4920c34b00",
|
|
24
|
+
"size": 555140
|
|
25
|
+
},
|
|
26
|
+
"provenance": {
|
|
27
|
+
"language": "Rust",
|
|
28
|
+
"sourceRoot": "native/terminal-host",
|
|
29
|
+
"cargoLock": "native/terminal-host/Cargo.lock",
|
|
30
|
+
"cargoLockSha256": "f8a60ecf67ce276d8f668ed09805f3b869e3e9058eac152dc197c1fbbf855220",
|
|
31
|
+
"libghosttyVtCommit": "c5a21edfcbc2d5b46540ad91b7980aca31f5f1f3",
|
|
32
|
+
"zigTarget": "x86_64-windows-msvc",
|
|
33
|
+
"zigCpu": "baseline",
|
|
34
|
+
"zigVersion": "0.15.2",
|
|
35
|
+
"rustVersion": "rustc 1.99.0 (b940084d7 2026-09-28)",
|
|
36
|
+
"features": {
|
|
37
|
+
"executable": [],
|
|
38
|
+
"sessionLock": [
|
|
39
|
+
"node-addon"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"signatureStatus": "ci-attestation-required"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const OWNED_UI_SETTINGS_VERSION =
|
|
1
|
+
export declare const OWNED_UI_SETTINGS_VERSION = 16;
|
|
2
2
|
export type OwnedUiSettingValue = string | number | boolean;
|
|
3
3
|
export type OwnedUiSettingApplication = "live" | "restart";
|
|
4
4
|
export interface OwnedUiSettingDeclaration {
|
|
@@ -164,53 +164,29 @@ export declare const OWNED_SETTING_DECLARATIONS: Readonly<{
|
|
|
164
164
|
defaultValue: 8;
|
|
165
165
|
allowedValues: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
|
|
166
166
|
}>;
|
|
167
|
-
readonly
|
|
168
|
-
id: "
|
|
169
|
-
label: "
|
|
167
|
+
readonly tabsMax: Readonly<{
|
|
168
|
+
id: "tabsMax";
|
|
169
|
+
label: "Maximum tabs";
|
|
170
170
|
section: Readonly<{
|
|
171
|
-
id: "
|
|
172
|
-
title: "
|
|
173
|
-
}>;
|
|
174
|
-
description: "Keep bare A1 running when its terminal closes and reattach on the next launch. Turning this off prevents new resident launches but does not stop existing tabs.";
|
|
175
|
-
application: "restart";
|
|
176
|
-
defaultValue: false;
|
|
177
|
-
allowedValues: readonly [true, false];
|
|
178
|
-
}>;
|
|
179
|
-
readonly tabsMaxConcurrentStarts: Readonly<{
|
|
180
|
-
id: "tabsMaxConcurrentStarts";
|
|
181
|
-
label: "Concurrent tab starts";
|
|
182
|
-
section: Readonly<{
|
|
183
|
-
id: "generic";
|
|
184
|
-
title: "Generic";
|
|
171
|
+
id: "tabs";
|
|
172
|
+
title: "Tabs";
|
|
185
173
|
}>;
|
|
186
|
-
description: "Maximum A1 tabs
|
|
187
|
-
application: "
|
|
188
|
-
defaultValue:
|
|
189
|
-
allowedValues: readonly [
|
|
190
|
-
}>;
|
|
191
|
-
readonly tabsUnresponsiveRestartSeconds: Readonly<{
|
|
192
|
-
id: "tabsUnresponsiveRestartSeconds";
|
|
193
|
-
label: "Unresponsive tab restart";
|
|
194
|
-
section: Readonly<{
|
|
195
|
-
id: "generic";
|
|
196
|
-
title: "Generic";
|
|
197
|
-
}>;
|
|
198
|
-
description: "Seconds of continuously healthy supervision without a tab heartbeat before A1 restarts that tab.";
|
|
199
|
-
application: "restart";
|
|
200
|
-
defaultValue: 120;
|
|
201
|
-
allowedValues: readonly [60, 120, 300, 600];
|
|
174
|
+
description: "Maximum resident A1 tabs kept in the shared strip.";
|
|
175
|
+
application: "live";
|
|
176
|
+
defaultValue: 10;
|
|
177
|
+
allowedValues: readonly number[];
|
|
202
178
|
}>;
|
|
203
|
-
readonly
|
|
204
|
-
id: "
|
|
205
|
-
label: "
|
|
179
|
+
readonly tabsAutoName: Readonly<{
|
|
180
|
+
id: "tabsAutoName";
|
|
181
|
+
label: "Auto name";
|
|
206
182
|
section: Readonly<{
|
|
207
|
-
id: "
|
|
208
|
-
title: "
|
|
183
|
+
id: "tabs";
|
|
184
|
+
title: "Tabs";
|
|
209
185
|
}>;
|
|
210
|
-
description: "
|
|
211
|
-
application: "
|
|
212
|
-
defaultValue:
|
|
213
|
-
allowedValues: readonly [
|
|
186
|
+
description: "Automatically name a new tab from its first completed turn with the tab's current model.";
|
|
187
|
+
application: "live";
|
|
188
|
+
defaultValue: true;
|
|
189
|
+
allowedValues: readonly [true, false];
|
|
214
190
|
}>;
|
|
215
191
|
}>;
|
|
216
192
|
export type OwnedSettingId = keyof typeof OWNED_SETTING_DECLARATIONS;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const OWNED_UI_SETTINGS_VERSION =
|
|
1
|
+
export const OWNED_UI_SETTINGS_VERSION = 16;
|
|
2
2
|
const UI_ACCENT_COLOR_CHOICES = Object.freeze([
|
|
3
3
|
"purple", "blue", "cyan", "green", "orange", "pink",
|
|
4
4
|
]);
|
|
@@ -9,6 +9,8 @@ const GENERIC_SECTION = Object.freeze({ id: "generic", title: "Generic" });
|
|
|
9
9
|
const APPEARANCE_SECTION = Object.freeze({ id: "appearance", title: "Appearance" });
|
|
10
10
|
const SCROLL_SECTION = Object.freeze({ id: "scroll", title: "Scroll" });
|
|
11
11
|
const AGENT_SECTION = Object.freeze({ id: "agent", title: "Agent" });
|
|
12
|
+
const TABS_SECTION = Object.freeze({ id: "tabs", title: "Tabs" });
|
|
13
|
+
const TABS_MAX_CHOICES = Object.freeze(Array.from({ length: 50 }, (_, index) => index + 1));
|
|
12
14
|
/**
|
|
13
15
|
* Every A1 setting, keyed by its id. The table is the one declaration: ids, defaults, and allowed
|
|
14
16
|
* values are read from it, and `OwnedSettingValueOf` derives each getter's type from it.
|
|
@@ -124,42 +126,24 @@ export const OWNED_SETTING_DECLARATIONS = Object.freeze({
|
|
|
124
126
|
defaultValue: 8,
|
|
125
127
|
allowedValues: Object.freeze([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
|
|
126
128
|
}),
|
|
127
|
-
|
|
128
|
-
id: "
|
|
129
|
-
label: "
|
|
130
|
-
section:
|
|
131
|
-
description: "
|
|
132
|
-
application: "
|
|
133
|
-
defaultValue:
|
|
129
|
+
tabsMax: Object.freeze({
|
|
130
|
+
id: "tabsMax",
|
|
131
|
+
label: "Maximum tabs",
|
|
132
|
+
section: TABS_SECTION,
|
|
133
|
+
description: "Maximum resident A1 tabs kept in the shared strip.",
|
|
134
|
+
application: "live",
|
|
135
|
+
defaultValue: 10,
|
|
136
|
+
allowedValues: TABS_MAX_CHOICES,
|
|
137
|
+
}),
|
|
138
|
+
tabsAutoName: Object.freeze({
|
|
139
|
+
id: "tabsAutoName",
|
|
140
|
+
label: "Auto name",
|
|
141
|
+
section: TABS_SECTION,
|
|
142
|
+
description: "Automatically name a new tab from its first completed turn with the tab's current model.",
|
|
143
|
+
application: "live",
|
|
144
|
+
defaultValue: true,
|
|
134
145
|
allowedValues: Object.freeze([true, false]),
|
|
135
146
|
}),
|
|
136
|
-
tabsMaxConcurrentStarts: Object.freeze({
|
|
137
|
-
id: "tabsMaxConcurrentStarts",
|
|
138
|
-
label: "Concurrent tab starts",
|
|
139
|
-
section: GENERIC_SECTION,
|
|
140
|
-
description: "Maximum A1 tabs started together. Starts remain spaced to protect shared profile files.",
|
|
141
|
-
application: "restart",
|
|
142
|
-
defaultValue: 2,
|
|
143
|
-
allowedValues: Object.freeze([1, 2, 3, 4, 5, 6, 7, 8]),
|
|
144
|
-
}),
|
|
145
|
-
tabsUnresponsiveRestartSeconds: Object.freeze({
|
|
146
|
-
id: "tabsUnresponsiveRestartSeconds",
|
|
147
|
-
label: "Unresponsive tab restart",
|
|
148
|
-
section: GENERIC_SECTION,
|
|
149
|
-
description: "Seconds of continuously healthy supervision without a tab heartbeat before A1 restarts that tab.",
|
|
150
|
-
application: "restart",
|
|
151
|
-
defaultValue: 120,
|
|
152
|
-
allowedValues: Object.freeze([60, 120, 300, 600]),
|
|
153
|
-
}),
|
|
154
|
-
tabsStallNoticeSeconds: Object.freeze({
|
|
155
|
-
id: "tabsStallNoticeSeconds",
|
|
156
|
-
label: "Tab stall notice",
|
|
157
|
-
section: GENERIC_SECTION,
|
|
158
|
-
description: "Seconds without model or tool progress before a working tab shows a stall notice; A1 never kills a stalled tab automatically.",
|
|
159
|
-
application: "restart",
|
|
160
|
-
defaultValue: 300,
|
|
161
|
-
allowedValues: Object.freeze([120, 300, 600, 1800]),
|
|
162
|
-
}),
|
|
163
147
|
});
|
|
164
148
|
/** The declarations in declaration order, for resolution, persistence, and the settings screen. */
|
|
165
149
|
export const OWNED_UI_SETTING_DECLARATIONS = Object.freeze(Object.values(OWNED_SETTING_DECLARATIONS));
|
|
@@ -2,7 +2,7 @@ export { OWNED_SETTING_DECLARATIONS, OWNED_UI_SETTINGS_VERSION, OWNED_UI_SETTING
|
|
|
2
2
|
export type { OwnedSettingId, OwnedSettingValueOf, OwnedUiSettingApplication, OwnedUiSettingDeclaration, OwnedUiSettingValue } from "./declarations.js";
|
|
3
3
|
export { OWNED_UI_SETTINGS_MIGRATIONS, assertOwnedUiSettingsMigrations, migrationsFrom, normalizeOwnedUiSettingsValues, } from "./migrations.js";
|
|
4
4
|
export type { OwnedUiSettingsCompatibilityResult, OwnedUiSettingsMigration } from "./migrations.js";
|
|
5
|
-
export { documentFrom, parseOwnedUiSettingsDocument, resolveOwnedUiSettings,
|
|
5
|
+
export { documentFrom, parseOwnedUiSettingsDocument, resolveOwnedUiSettings, settingValue } from "./resolution.js";
|
|
6
6
|
export type { OwnedUiResolvedSetting, OwnedUiSettingSource, OwnedUiSettingsDocument, OwnedUiSettingsNotice, OwnedUiSettingsNoticeCode, OwnedUiSettingsResolution, ResolveOwnedUiSettingsInput, } from "./resolution.js";
|
|
7
7
|
export { AGENT_SECTION_ID, buildOwnedUiSettingsSections, findOwnedUiSettingsEntry } from "./sections.js";
|
|
8
8
|
export type { AgentSettingsSnapshot, BuildOwnedUiSettingsSectionsInput, OwnedUiSettingsBackend, OwnedUiSettingsEntry, OwnedUiSettingsSection, } from "./sections.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { OWNED_SETTING_DECLARATIONS, OWNED_UI_SETTINGS_VERSION, OWNED_UI_SETTING_DECLARATIONS, assertOwnedUiSettingDeclarations, findOwnedUiSettingDeclaration, isOwnedSettingId, } from "./declarations.js";
|
|
2
2
|
export { OWNED_UI_SETTINGS_MIGRATIONS, assertOwnedUiSettingsMigrations, migrationsFrom, normalizeOwnedUiSettingsValues, } from "./migrations.js";
|
|
3
|
-
export { documentFrom, parseOwnedUiSettingsDocument, resolveOwnedUiSettings,
|
|
3
|
+
export { documentFrom, parseOwnedUiSettingsDocument, resolveOwnedUiSettings, settingValue } from "./resolution.js";
|
|
4
4
|
export { AGENT_SECTION_ID, buildOwnedUiSettingsSections, findOwnedUiSettingsEntry } from "./sections.js";
|
|
5
5
|
export { OwnedSettingsManager } from "./manager.js";
|
|
6
6
|
export { assertProfileSettingsNamespaceAvailable, readProfileSettingsNamespace, repairProfileSettingsDocument, updateProfileSettingsNamespace, } from "./profile-document.js";
|
|
@@ -17,6 +17,7 @@ export interface OwnedSettingsManagerOptions {
|
|
|
17
17
|
readonly migrations?: readonly OwnedUiSettingsMigration[];
|
|
18
18
|
readonly agent?: AgentSettingsPort | null;
|
|
19
19
|
readonly agentProvider?: () => AgentSettingsPort | null;
|
|
20
|
+
readonly hiddenOwnedSettingIds?: readonly string[];
|
|
20
21
|
readonly hiddenAgentSettingIds?: readonly string[];
|
|
21
22
|
readonly agentSettingLabelOverrides?: Readonly<Record<string, string>>;
|
|
22
23
|
}
|
|
@@ -23,6 +23,7 @@ export class OwnedSettingsManager {
|
|
|
23
23
|
#agent;
|
|
24
24
|
#agentProvider;
|
|
25
25
|
#listeners = new Set();
|
|
26
|
+
#hiddenOwnedSettingIds;
|
|
26
27
|
#hiddenAgentSettingIds;
|
|
27
28
|
#agentSettingLabelOverrides;
|
|
28
29
|
#resolution;
|
|
@@ -45,6 +46,7 @@ export class OwnedSettingsManager {
|
|
|
45
46
|
this.#migrations = options.migrations ?? OWNED_UI_SETTINGS_MIGRATIONS;
|
|
46
47
|
this.#agent = options.agent ?? null;
|
|
47
48
|
this.#agentProvider = options.agentProvider ?? null;
|
|
49
|
+
this.#hiddenOwnedSettingIds = new Set(options.hiddenOwnedSettingIds ?? []);
|
|
48
50
|
this.#hiddenAgentSettingIds = new Set(options.hiddenAgentSettingIds ?? []);
|
|
49
51
|
this.#agentSettingLabelOverrides = { ...(options.agentSettingLabelOverrides ?? {}) };
|
|
50
52
|
this.#resolution = this.read();
|
|
@@ -128,7 +130,13 @@ export class OwnedSettingsManager {
|
|
|
128
130
|
this.#notify();
|
|
129
131
|
}
|
|
130
132
|
sections() {
|
|
131
|
-
|
|
133
|
+
const resolution = this.#hiddenOwnedSettingIds.size === 0
|
|
134
|
+
? this.#resolution
|
|
135
|
+
: {
|
|
136
|
+
...this.#resolution,
|
|
137
|
+
settings: this.#resolution.settings.filter(setting => !this.#hiddenOwnedSettingIds.has(setting.declaration.id)),
|
|
138
|
+
};
|
|
139
|
+
return buildOwnedUiSettingsSections({ resolution, agent: this.#agentSnapshot }).map(section => ({
|
|
132
140
|
...section,
|
|
133
141
|
entries: section.entries.map(entry => {
|
|
134
142
|
if (entry.backend === "a1" && this.#restartEffective.has(entry.id)) {
|
|
@@ -118,6 +118,18 @@ export const OWNED_UI_SETTINGS_MIGRATIONS = Object.freeze([
|
|
|
118
118
|
return { ...values };
|
|
119
119
|
},
|
|
120
120
|
}),
|
|
121
|
+
Object.freeze({
|
|
122
|
+
to: 16,
|
|
123
|
+
description: "Make bare A1 tabs unconditional and keep only tab UX controls.",
|
|
124
|
+
migrate(values) {
|
|
125
|
+
const migrated = { ...values };
|
|
126
|
+
delete migrated.residentTabs;
|
|
127
|
+
delete migrated.tabsMaxConcurrentStarts;
|
|
128
|
+
delete migrated.tabsUnresponsiveRestartSeconds;
|
|
129
|
+
delete migrated.tabsStallNoticeSeconds;
|
|
130
|
+
return migrated;
|
|
131
|
+
},
|
|
132
|
+
}),
|
|
121
133
|
]);
|
|
122
134
|
/** Shape-selected compatibility for the metadata-free product object. */
|
|
123
135
|
export function normalizeOwnedUiSettingsValues(source) {
|
|
@@ -42,6 +42,4 @@ export interface ResolveOwnedUiSettingsInput {
|
|
|
42
42
|
*/
|
|
43
43
|
export declare function resolveOwnedUiSettings(input: ResolveOwnedUiSettingsInput): OwnedUiSettingsResolution;
|
|
44
44
|
export declare function settingValue(resolution: OwnedUiSettingsResolution, id: string): OwnedUiSettingValue | null;
|
|
45
|
-
/** Resolve the launch-routing flag without constructing the UI settings manager. */
|
|
46
|
-
export declare function resolveResidentTabsSetting(document: OwnedUiSettingsDocument | null): boolean;
|
|
47
45
|
export declare function documentFrom(resolution: OwnedUiSettingsResolution): OwnedUiSettingsDocument;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OWNED_UI_SETTINGS_VERSION, findOwnedUiSettingDeclaration, } from "./declarations.js";
|
|
2
2
|
import { migrationsFrom } from "./migrations.js";
|
|
3
3
|
export function parseOwnedUiSettingsDocument(raw) {
|
|
4
4
|
let parsed;
|
|
@@ -122,18 +122,6 @@ export function resolveOwnedUiSettings(input) {
|
|
|
122
122
|
export function settingValue(resolution, id) {
|
|
123
123
|
return resolution.settings.find(setting => setting.declaration.id === id)?.value ?? null;
|
|
124
124
|
}
|
|
125
|
-
/** Resolve the launch-routing flag without constructing the UI settings manager. */
|
|
126
|
-
export function resolveResidentTabsSetting(document) {
|
|
127
|
-
if (document === null || document.version !== OWNED_UI_SETTINGS_VERSION)
|
|
128
|
-
return false;
|
|
129
|
-
const resolution = resolveOwnedUiSettings({
|
|
130
|
-
declarations: [OWNED_SETTING_DECLARATIONS.residentTabs],
|
|
131
|
-
migrations: [],
|
|
132
|
-
document,
|
|
133
|
-
currentVersion: OWNED_UI_SETTINGS_VERSION,
|
|
134
|
-
});
|
|
135
|
-
return settingValue(resolution, "residentTabs") === true;
|
|
136
|
-
}
|
|
137
125
|
export function documentFrom(resolution) {
|
|
138
126
|
const values = { ...resolution.preserved };
|
|
139
127
|
for (const setting of resolution.settings) {
|
|
@@ -2,11 +2,7 @@ export const AGENT_SECTION_ID = "agent";
|
|
|
2
2
|
const BOOLEAN_CHOICES = Object.freeze([true, false]);
|
|
3
3
|
export function buildOwnedUiSettingsSections(input) {
|
|
4
4
|
const grouped = new Map();
|
|
5
|
-
const residentTabsEnabled = input.resolution.settings
|
|
6
|
-
.find(setting => setting.declaration.id === "residentTabs")?.value === true;
|
|
7
5
|
for (const setting of input.resolution.settings) {
|
|
8
|
-
if (!residentTabsEnabled && ["tabsUnresponsiveRestartSeconds", "tabsStallNoticeSeconds"].includes(setting.declaration.id))
|
|
9
|
-
continue;
|
|
10
6
|
const section = setting.declaration.section ?? { id: "a1", title: "A1" };
|
|
11
7
|
const group = grouped.get(section.id) ?? { title: section.title, entries: [] };
|
|
12
8
|
group.entries.push({
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Resident tabs acceptance: Linux x64
|
|
2
|
+
|
|
3
|
+
State: CI-verified
|
|
4
|
+
|
|
5
|
+
Physical acceptance against a published candidate package is pending; the operator runs [the checklist](../../../manual-resident-tabs-acceptance.md) and fills in this record. Until every item passes, resident tabs on this platform are CI-verified, not certified.
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Package version | pending (first published candidate carrying the terminal host) |
|
|
10
|
+
| terminal-host SHA-256 | pending (from that package's `terminal-host.manifest.json`) |
|
|
11
|
+
| OS build | pending |
|
|
12
|
+
| Terminal | pending |
|
|
13
|
+
| Operator or worker | pending |
|
|
14
|
+
| Date | pending |
|
|
15
|
+
|
|
16
|
+
## Automated evidence
|
|
17
|
+
|
|
18
|
+
- Pull-request `terminal-host` lane on `ubuntu-24.04`: native unit and role-integration suites, every named crash point recovering to a clean start, the 10,000-schedule simulation corpus, `a1 tabs` maintenance end to end, and the release build of the terminal host with its manifest, session lock, and notices.
|
|
19
|
+
- Pull-request `resident-chaos` lane on `ubuntu-24.04`: bounded randomized kills of servers, holders, and agents against the release-built host, with no duplicate tabs or holders and no orphaned processes.
|
|
20
|
+
- Publication `terminal_hosts` job on `ubuntu-24.04`: the release artifact is rebuilt, its `--version` identity checked, and packing refuses a missing or altered artifact.
|
|
21
|
+
- Bounded fuzzing of every decoder and parser runs on this lane; it proves parser robustness, not platform behavior.
|
|
22
|
+
|
|
23
|
+
## Physical verdicts
|
|
24
|
+
|
|
25
|
+
| # | Item | Verdict | Notes |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| 1 | Terminal close mid-turn | pending | |
|
|
28
|
+
| 2 | SSH or remote-session loss | pending | |
|
|
29
|
+
| 3 | Forced attach-client kill | pending | |
|
|
30
|
+
| 4 | Reattach fidelity | pending | |
|
|
31
|
+
| 5 | Input and render smoothness | pending | |
|
|
32
|
+
| 6 | Extension text UI | pending | |
|
|
33
|
+
| 7 | Two clients and controller transfer | pending | |
|
|
34
|
+
| 8 | Server, holder, and child failure | pending | |
|
|
35
|
+
| 9 | Sensitive-data separation | pending | |
|
|
36
|
+
| 10 | Conflict-safe direct rollback | pending | |
|
|
37
|
+
| 11 | Logout (Linux) | pending | |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Resident tabs acceptance: macOS arm64
|
|
2
|
+
|
|
3
|
+
State: CI-verified
|
|
4
|
+
|
|
5
|
+
Physical acceptance against a published candidate package is pending; the operator runs [the checklist](../../../manual-resident-tabs-acceptance.md) and fills in this record. Until every item passes, resident tabs on this platform are CI-verified, not certified.
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Package version | pending (first published candidate carrying the terminal host) |
|
|
10
|
+
| terminal-host SHA-256 | pending (from that package's `terminal-host.manifest.json`) |
|
|
11
|
+
| OS build | pending |
|
|
12
|
+
| Terminal | pending |
|
|
13
|
+
| Operator or worker | pending |
|
|
14
|
+
| Date | pending |
|
|
15
|
+
|
|
16
|
+
## Automated evidence
|
|
17
|
+
|
|
18
|
+
- Pull-request `terminal-host` lane on `macos-15`: native unit and role-integration suites, every named crash point recovering to a clean start, the 10,000-schedule simulation corpus, `a1 tabs` maintenance end to end, and the release build of the terminal host with its manifest, session lock, and notices.
|
|
19
|
+
- Pull-request `resident-chaos` lane on `macos-15`: bounded randomized kills of servers, holders, and agents against the release-built host, with no duplicate tabs or holders and no orphaned processes.
|
|
20
|
+
- Publication `terminal_hosts` job on `macos-15`: the release artifact is rebuilt, its `--version` identity checked, and packing refuses a missing or altered artifact.
|
|
21
|
+
|
|
22
|
+
## Physical verdicts
|
|
23
|
+
|
|
24
|
+
| # | Item | Verdict | Notes |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| 1 | Terminal close mid-turn | pending | |
|
|
27
|
+
| 2 | SSH or remote-session loss | pending | |
|
|
28
|
+
| 3 | Forced attach-client kill | pending | |
|
|
29
|
+
| 4 | Reattach fidelity | pending | |
|
|
30
|
+
| 5 | Input and render smoothness | pending | |
|
|
31
|
+
| 6 | Extension text UI | pending | |
|
|
32
|
+
| 7 | Two clients and controller transfer | pending | |
|
|
33
|
+
| 8 | Server, holder, and child failure | pending | |
|
|
34
|
+
| 9 | Sensitive-data separation | pending | |
|
|
35
|
+
| 10 | Conflict-safe direct rollback | pending | |
|
|
36
|
+
| 11 | Logout (Linux) | not applicable | Linux-only item. |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Resident tabs acceptance: macOS x64
|
|
2
|
+
|
|
3
|
+
State: CI-verified
|
|
4
|
+
|
|
5
|
+
Physical acceptance against a published candidate package is pending; the operator runs [the checklist](../../../manual-resident-tabs-acceptance.md) and fills in this record. Until every item passes, resident tabs on this platform are CI-verified, not certified.
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Package version | pending (first published candidate carrying the terminal host) |
|
|
10
|
+
| terminal-host SHA-256 | pending (from that package's `terminal-host.manifest.json`) |
|
|
11
|
+
| OS build | pending |
|
|
12
|
+
| Terminal | pending |
|
|
13
|
+
| Operator or worker | pending |
|
|
14
|
+
| Date | pending |
|
|
15
|
+
|
|
16
|
+
## Automated evidence
|
|
17
|
+
|
|
18
|
+
- Publication `terminal_hosts` and `guardians` jobs on `macos-15-intel`: the release terminal host and process guardian are built for Intel macOS, the host's `--version` identity is checked, and packing refuses a missing or altered artifact.
|
|
19
|
+
- Known gap: the pull-request `terminal-host` and `resident-chaos` suites run on macOS arm64 only, because modular validation outcomes are keyed by platform without architecture. Intel macOS has build and identity evidence but no automated behavior suite of its own.
|
|
20
|
+
|
|
21
|
+
## Physical verdicts
|
|
22
|
+
|
|
23
|
+
| # | Item | Verdict | Notes |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| 1 | Terminal close mid-turn | pending | |
|
|
26
|
+
| 2 | SSH or remote-session loss | pending | |
|
|
27
|
+
| 3 | Forced attach-client kill | pending | |
|
|
28
|
+
| 4 | Reattach fidelity | pending | |
|
|
29
|
+
| 5 | Input and render smoothness | pending | |
|
|
30
|
+
| 6 | Extension text UI | pending | |
|
|
31
|
+
| 7 | Two clients and controller transfer | pending | |
|
|
32
|
+
| 8 | Server, holder, and child failure | pending | |
|
|
33
|
+
| 9 | Sensitive-data separation | pending | |
|
|
34
|
+
| 10 | Conflict-safe direct rollback | pending | |
|
|
35
|
+
| 11 | Logout (Linux) | not applicable | Linux-only item. |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Resident tabs acceptance: Windows x64
|
|
2
|
+
|
|
3
|
+
State: CI-verified
|
|
4
|
+
|
|
5
|
+
Physical acceptance against a published candidate package is pending; the operator runs [the checklist](../../../manual-resident-tabs-acceptance.md) and fills in this record. Until every item passes, resident tabs on this platform are CI-verified, not certified.
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Package version | pending (first published candidate carrying the terminal host) |
|
|
10
|
+
| terminal-host SHA-256 | pending (from that package's `terminal-host.manifest.json`) |
|
|
11
|
+
| OS build | pending |
|
|
12
|
+
| Terminal | pending |
|
|
13
|
+
| Operator or worker | pending |
|
|
14
|
+
| Date | pending |
|
|
15
|
+
|
|
16
|
+
## Automated evidence
|
|
17
|
+
|
|
18
|
+
- Pull-request `terminal-host` lane on `windows-2025`: native unit and role-integration suites, every named crash point recovering to a clean start, the 10,000-schedule simulation corpus, `a1 tabs` maintenance end to end, and the release build of the terminal host with its manifest, session lock, and notices.
|
|
19
|
+
- Pull-request `resident-chaos` lane on `windows-2025`: bounded randomized kills of servers, holders, and agents against the release-built host, with no duplicate tabs or holders and no orphaned processes.
|
|
20
|
+
- Publication `terminal_hosts` job on `windows-2025`: the release artifact is rebuilt, its `--version` identity checked, and packing refuses a missing or altered artifact.
|
|
21
|
+
|
|
22
|
+
## Physical verdicts
|
|
23
|
+
|
|
24
|
+
| # | Item | Verdict | Notes |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| 1 | Terminal close mid-turn | pending | Milestone 2 passed this item against development build `09028be5` (run 38159593912); that evidence is for that build, not this package. |
|
|
27
|
+
| 2 | SSH or remote-session loss | pending | Milestone 2 passed Windows OpenSSH loss against development build `09028be5`; it is not evidence for this package. |
|
|
28
|
+
| 3 | Forced attach-client kill | pending | |
|
|
29
|
+
| 4 | Reattach fidelity | pending | |
|
|
30
|
+
| 5 | Input and render smoothness | pending | |
|
|
31
|
+
| 6 | Extension text UI | pending | |
|
|
32
|
+
| 7 | Two clients and controller transfer | pending | |
|
|
33
|
+
| 8 | Server, holder, and child failure | pending | |
|
|
34
|
+
| 9 | Sensitive-data separation | pending | |
|
|
35
|
+
| 10 | Conflict-safe direct rollback | pending | |
|
|
36
|
+
| 11 | Logout (Linux) | not applicable | Linux-only item. |
|
|
@@ -47,6 +47,8 @@ Pending review preserves a possible external interface, not an obsolete private
|
|
|
47
47
|
| `RELEASE_RUNNER_LABEL` | Release/full-regression workflows supply certification-runner provenance to `run-release-gates.mjs`. |
|
|
48
48
|
| `TERMINAL_FIXTURE_INPUT`, `TERMINAL_FIXTURE_TOKEN` | Native terminal probe producer/consumer in `native/terminal-host/src/main.rs`; expected input and fixture token. |
|
|
49
49
|
| `TERMINAL_HOST_LOCAL_BUILD` | Developer shell sets exactly `1`; `native/terminal-host/build.rs` then permits a Windows build outside CI. |
|
|
50
|
+
| `TERMINAL_HOST_EXPORT_VT` | Native validation lanes in `.github/workflows/ci.yml` name a directory; `build.rs` copies the linked terminal library, headers, and manifest there for upload. |
|
|
51
|
+
| `TERMINAL_HOST_PREBUILT_VT` | Developer shell names a fetched library directory; with `TERMINAL_HOST_LOCAL_BUILD=1` and no `CI`, `build.rs` verifies its manifest and links it instead of running Zig. |
|
|
50
52
|
| `DOCS_AUTO_MERGE_POLL_ATTEMPTS`, `DOCS_AUTO_MERGE_POLL_MS` | Documentation automation polling controls, produced by governance tests and consumed by `manage-documentation-auto-merge.mjs`. |
|
|
51
53
|
| `VALIDATION_JOB_STARTED_MS`, `RENDERING_JOB_STARTED_MS` | CI timing handoffs within `.github/workflows/ci.yml`; epoch milliseconds. |
|
|
52
54
|
| `RUN_PROCESS_CONTAINMENT_INTEGRATION` | CI enables the real containment fixture with exactly `1`; platform containment tests consume it. |
|
|
@@ -21,6 +21,8 @@ dist/native/darwin-x64/process-guardian
|
|
|
21
21
|
dist/native/darwin-arm64/process-guardian
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
The publication `guardians` job builds them on `windows-2025`, `ubuntu-24.04`, `macos-15` (arm64), and `macos-15-intel` (x64).
|
|
25
|
+
|
|
24
26
|
Each supported artifact must be named in the release integrity manifest with target triple, crate version, guardian protocol version, SHA-256, byte size, build provenance, and signature/attestation status. The build marks a platform supported only after its native containment integration runs on that platform. A missing, altered, incompatible, unsupported, or wrong-platform artifact is a concise containment launch error; A1 never silently falls back to PID-only cleanup.
|
|
25
27
|
|
|
26
28
|
## Licensing
|