@amalgm/shell 0.1.113 → 0.1.114
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/PURPOSE.md +67 -6
- package/README.md +36 -7
- package/dist/authorization/device-key.d.ts +19 -0
- package/dist/authorization/device-key.js +81 -0
- package/dist/authorization/device-key.js.map +1 -0
- package/dist/authorization/index.d.ts +65 -0
- package/dist/authorization/index.js +63 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/issuer.d.ts +11 -0
- package/dist/authorization/issuer.js +76 -0
- package/dist/authorization/issuer.js.map +1 -0
- package/dist/authorization/key-store.d.ts +15 -0
- package/dist/authorization/key-store.js +148 -0
- package/dist/authorization/key-store.js.map +1 -0
- package/dist/authorization/recovery-client.d.ts +19 -0
- package/dist/authorization/recovery-client.js +102 -0
- package/dist/authorization/recovery-client.js.map +1 -0
- package/dist/authorization/recovery-host.d.ts +28 -0
- package/dist/authorization/recovery-host.js +93 -0
- package/dist/authorization/recovery-host.js.map +1 -0
- package/dist/authorization/recovery.d.ts +13 -0
- package/dist/authorization/recovery.js +27 -0
- package/dist/authorization/recovery.js.map +1 -0
- package/dist/authorization/secret-process.d.ts +2 -0
- package/dist/authorization/secret-process.js +32 -0
- package/dist/authorization/secret-process.js.map +1 -0
- package/dist/boot.d.ts +19 -11
- package/dist/boot.js +34 -25
- package/dist/boot.js.map +1 -1
- package/dist/builtin-agents.d.ts +3 -0
- package/dist/builtin-agents.js +15 -0
- package/dist/builtin-agents.js.map +1 -0
- package/dist/chat-composition.d.ts +19 -0
- package/dist/chat-composition.js +83 -0
- package/dist/chat-composition.js.map +1 -0
- package/dist/chat-host.d.ts +9 -25
- package/dist/chat-host.js +12 -158
- package/dist/chat-host.js.map +1 -1
- package/dist/cli.js +21 -13
- package/dist/cli.js.map +1 -1
- package/dist/content-cache-host.d.ts +7 -0
- package/dist/content-cache-host.js +23 -1
- package/dist/content-cache-host.js.map +1 -1
- package/dist/credentials-host.d.ts +1 -5
- package/dist/credentials-host.js +1 -5
- package/dist/credentials-host.js.map +1 -1
- package/dist/entity-record-store.d.ts +2 -0
- package/dist/entity-record-store.js +15 -0
- package/dist/entity-record-store.js.map +1 -1
- package/dist/forward.js +1 -1
- package/dist/forward.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/machine-host.d.ts +29 -0
- package/dist/machine-host.js +240 -10
- package/dist/machine-host.js.map +1 -1
- package/dist/parity.d.ts +1 -5
- package/dist/parity.js +4 -41
- package/dist/parity.js.map +1 -1
- package/dist/release-catalog.js +7 -4
- package/dist/release-catalog.js.map +1 -1
- package/dist/runtime-command-host.d.ts +11 -0
- package/dist/runtime-command-host.js +65 -0
- package/dist/runtime-command-host.js.map +1 -1
- package/dist/user-ground-host.js +60 -5
- package/dist/user-ground-host.js.map +1 -1
- package/package.json +14 -5
- package/dist/chat-payloads-host.d.ts +0 -8
- package/dist/chat-payloads-host.js +0 -76
- package/dist/chat-payloads-host.js.map +0 -1
- package/dist/chat-relay-host.d.ts +0 -24
- package/dist/chat-relay-host.js +0 -90
- package/dist/chat-relay-host.js.map +0 -1
- package/dist/drivers/claude-code.d.ts +0 -27
- package/dist/drivers/claude-code.js +0 -72
- package/dist/drivers/claude-code.js.map +0 -1
|
@@ -23,6 +23,44 @@ export function unpublishRuntimeCommands(input) {
|
|
|
23
23
|
rmSync(files.state, { force: true });
|
|
24
24
|
rmSync(files.token, { force: true });
|
|
25
25
|
}
|
|
26
|
+
/** Readiness is the published address plus an authenticated response from the
|
|
27
|
+
* exact loopback runtime. A marker or a live PID alone cannot prove that the
|
|
28
|
+
* composed services are accepting requests. This probe is read-only so a UI
|
|
29
|
+
* may adopt a runtime it did not start. */
|
|
30
|
+
export async function inspectRuntimeCommands(input) {
|
|
31
|
+
const files = commandFiles(input);
|
|
32
|
+
const state = readJson(files.state);
|
|
33
|
+
const label = coerceRuntimeLabel(input.runtimeLabel);
|
|
34
|
+
if (!state
|
|
35
|
+
|| state.runtime_label !== label
|
|
36
|
+
|| state.user_scope !== input.userScope) {
|
|
37
|
+
return { published: false, running: false, pid: null, port: null };
|
|
38
|
+
}
|
|
39
|
+
const pid = Number.isSafeInteger(state.pid) && Number(state.pid) > 0
|
|
40
|
+
? Number(state.pid)
|
|
41
|
+
: null;
|
|
42
|
+
let port = null;
|
|
43
|
+
let token = "";
|
|
44
|
+
try {
|
|
45
|
+
port = validPort(state.ports?.[FILES_PORT]);
|
|
46
|
+
token = required(readJson(files.token)?.token, "runtime token");
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { published: true, running: false, pid, port };
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const response = await getRuntimeHealth(port, token);
|
|
53
|
+
return {
|
|
54
|
+
published: true,
|
|
55
|
+
running: response.statusCode === 200 && response.body === '{"ok":true}',
|
|
56
|
+
pid,
|
|
57
|
+
port,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return { published: true, running: false, pid, port };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
26
64
|
/** Call the one running Files runtime. The CLI owns no Files effects. */
|
|
27
65
|
export async function callRuntimeCommand(input, path, body) {
|
|
28
66
|
const files = commandFiles(input);
|
|
@@ -95,6 +133,33 @@ function postRuntimeCommand(port, path, token, body) {
|
|
|
95
133
|
command.end(encoded);
|
|
96
134
|
});
|
|
97
135
|
}
|
|
136
|
+
function getRuntimeHealth(port, token) {
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const command = request({
|
|
139
|
+
hostname: "127.0.0.1",
|
|
140
|
+
port,
|
|
141
|
+
path: "/healthz",
|
|
142
|
+
method: "GET",
|
|
143
|
+
headers: {
|
|
144
|
+
"x-amalgm-runtime-token": token,
|
|
145
|
+
"connection": "close",
|
|
146
|
+
},
|
|
147
|
+
timeout: 2_000,
|
|
148
|
+
}, (response) => {
|
|
149
|
+
response.setEncoding("utf8");
|
|
150
|
+
let responseBody = "";
|
|
151
|
+
response.on("data", (chunk) => { responseBody += chunk; });
|
|
152
|
+
response.once("end", () => resolve({
|
|
153
|
+
statusCode: response.statusCode ?? 500,
|
|
154
|
+
body: responseBody,
|
|
155
|
+
}));
|
|
156
|
+
response.once("error", reject);
|
|
157
|
+
});
|
|
158
|
+
command.once("timeout", () => command.destroy(new Error("runtime health probe timed out")));
|
|
159
|
+
command.once("error", reject);
|
|
160
|
+
command.end();
|
|
161
|
+
});
|
|
162
|
+
}
|
|
98
163
|
function commandFiles(input) {
|
|
99
164
|
const directory = runtimeStateDir(input.userRoot, required(input.deviceId, "device id"), coerceRuntimeLabel(input.runtimeLabel));
|
|
100
165
|
return { state: runtimeStateFile(directory), token: runtimeTokenFile(directory) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-command-host.js","sourceRoot":"","sources":["../src/runtime-command-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,UAAU,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-command-host.js","sourceRoot":"","sources":["../src/runtime-command-host.ts"],"names":[],"mappings":"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"}
|
package/dist/user-ground-host.js
CHANGED
|
@@ -11,7 +11,7 @@ import { EntityApplyHost, } from "./entity-apply-host.js";
|
|
|
11
11
|
import { EntityRecordSqliteStore } from "./entity-record-store.js";
|
|
12
12
|
import { observeEntityRecordPorts } from "./entity-record-observability.js";
|
|
13
13
|
import { indexRowsByOutermostRoot } from "./ground-root-index.js";
|
|
14
|
-
import { ContentCacheDownloadSet, captureContentFile, hashContentFile, sealCapturedArtifact, } from "./content-cache-host.js";
|
|
14
|
+
import { ContentCacheDownloadSet, captureContentFile, hashContentFile, pruneSettledContentCache, sealCapturedArtifact, } from "./content-cache-host.js";
|
|
15
15
|
import { DirectContentPlane } from "./content-direct.js";
|
|
16
16
|
import { encodeContentWireBytes } from "./content-wire-codec.js";
|
|
17
17
|
import { exactTextReplay, planGroundDetection, reconcileGroundUUIDs, } from "./detection/portable.js";
|
|
@@ -839,7 +839,38 @@ export class UserGroundHost {
|
|
|
839
839
|
throw new Error("gateway speaks an older wire protocol than this shell");
|
|
840
840
|
}
|
|
841
841
|
this.adoptCloudDeliveryBaseline(identity, this.cloudState.deliveryWatermark);
|
|
842
|
-
const
|
|
842
|
+
const recordDatabase = initializeDatabase(this.databasePath(identity));
|
|
843
|
+
const store = new EntityRecordSqliteStore(recordDatabase);
|
|
844
|
+
const pruneAcceptedCargo = () => {
|
|
845
|
+
const retained = new Set(store.pendingContentHashes());
|
|
846
|
+
const currentReplayBases = recordDatabase.prepare(`
|
|
847
|
+
SELECT type,
|
|
848
|
+
payload_version AS payloadVersion,
|
|
849
|
+
transport_version AS transportVersion
|
|
850
|
+
FROM entities
|
|
851
|
+
WHERE type IN ('file.text', 'repo.git')
|
|
852
|
+
`).all();
|
|
853
|
+
for (const row of currentReplayBases) {
|
|
854
|
+
const contentHash = row.type === "file.text" ? row.payloadVersion : row.transportVersion;
|
|
855
|
+
if (contentHash && /^[0-9a-f]{64}$/.test(contentHash))
|
|
856
|
+
retained.add(contentHash);
|
|
857
|
+
}
|
|
858
|
+
pruneSettledContentCache(this.cacheDir(identity), retained);
|
|
859
|
+
};
|
|
860
|
+
// Accepted Send cargo is no longer retry responsibility. Keep only the
|
|
861
|
+
// current verified text and repository heads needed for the next exact
|
|
862
|
+
// delta; reclaim all other unreferenced history before start and after
|
|
863
|
+
// every acceptance.
|
|
864
|
+
pruneAcceptedCargo();
|
|
865
|
+
const cacheReleasingStore = {
|
|
866
|
+
readPending: (limit) => store.readPending(limit),
|
|
867
|
+
stampAccepted: async (...args) => {
|
|
868
|
+
store.stampAccepted(...args);
|
|
869
|
+
pruneAcceptedCargo();
|
|
870
|
+
},
|
|
871
|
+
readDeliveryCursor: (authorityId) => store.readDeliveryCursor(authorityId),
|
|
872
|
+
receive: (input) => store.receive(input),
|
|
873
|
+
};
|
|
843
874
|
const wireAuthority = createEntityRecordAuthorityPort({
|
|
844
875
|
request: (frame, acceptedTypes, binaryBody) => binaryBody === undefined
|
|
845
876
|
? this.wire.request({ ...frame }, acceptedTypes)
|
|
@@ -848,7 +879,7 @@ export class UserGroundHost {
|
|
|
848
879
|
onDisconnect: (listener) => this.wire.onDisconnect(listener),
|
|
849
880
|
});
|
|
850
881
|
const ports = observeEntityRecordPorts({
|
|
851
|
-
store,
|
|
882
|
+
store: cacheReleasingStore,
|
|
852
883
|
authority: wireAuthority,
|
|
853
884
|
cargo: {
|
|
854
885
|
ensure: async (record) => {
|
|
@@ -1838,7 +1869,22 @@ export class UserGroundHost {
|
|
|
1838
1869
|
durationMs: performance.now() - waitStarted,
|
|
1839
1870
|
});
|
|
1840
1871
|
try {
|
|
1841
|
-
|
|
1872
|
+
let retriedAdvancedBasis = false;
|
|
1873
|
+
for (;;) {
|
|
1874
|
+
try {
|
|
1875
|
+
await this.syncLocalChangesUnlocked(identity, pending, coreScan);
|
|
1876
|
+
break;
|
|
1877
|
+
}
|
|
1878
|
+
catch (error) {
|
|
1879
|
+
if (retriedAdvancedBasis || !detectionBasisAdvanced(error))
|
|
1880
|
+
throw error;
|
|
1881
|
+
// The complete generation remains unsettled. Re-read its truth once
|
|
1882
|
+
// while this pass still owns every affected ground cone; another
|
|
1883
|
+
// conflict means an invariant outside this finite pass moved again
|
|
1884
|
+
// and must remain visible to the caller.
|
|
1885
|
+
retriedAdvancedBasis = true;
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1842
1888
|
}
|
|
1843
1889
|
finally {
|
|
1844
1890
|
release();
|
|
@@ -1974,7 +2020,7 @@ export class UserGroundHost {
|
|
|
1974
2020
|
proposals: detectedRecords,
|
|
1975
2021
|
});
|
|
1976
2022
|
if (!committed) {
|
|
1977
|
-
throw pipelineStageError("detection", new
|
|
2023
|
+
throw pipelineStageError("detection", new DetectionBasisAdvancedError());
|
|
1978
2024
|
}
|
|
1979
2025
|
const recordCommitDuration = performance.now() - recordCommitStarted;
|
|
1980
2026
|
if (detectedRecords.length === 0) {
|
|
@@ -2465,6 +2511,15 @@ function pipelineStageError(stage, error) {
|
|
|
2465
2511
|
cause: error,
|
|
2466
2512
|
});
|
|
2467
2513
|
}
|
|
2514
|
+
class DetectionBasisAdvancedError extends Error {
|
|
2515
|
+
constructor() {
|
|
2516
|
+
super("the verified notebook advanced while Detect was observing; retrying fresh truth");
|
|
2517
|
+
}
|
|
2518
|
+
}
|
|
2519
|
+
function detectionBasisAdvanced(error) {
|
|
2520
|
+
return error instanceof DetectionBasisAdvancedError
|
|
2521
|
+
|| (error instanceof Error && error.cause instanceof DetectionBasisAdvancedError);
|
|
2522
|
+
}
|
|
2468
2523
|
function filesPipelineStage(error) {
|
|
2469
2524
|
const stage = error instanceof Error
|
|
2470
2525
|
? error.filesStage
|