@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.
Files changed (77) hide show
  1. package/PURPOSE.md +67 -6
  2. package/README.md +36 -7
  3. package/dist/authorization/device-key.d.ts +19 -0
  4. package/dist/authorization/device-key.js +81 -0
  5. package/dist/authorization/device-key.js.map +1 -0
  6. package/dist/authorization/index.d.ts +65 -0
  7. package/dist/authorization/index.js +63 -0
  8. package/dist/authorization/index.js.map +1 -0
  9. package/dist/authorization/issuer.d.ts +11 -0
  10. package/dist/authorization/issuer.js +76 -0
  11. package/dist/authorization/issuer.js.map +1 -0
  12. package/dist/authorization/key-store.d.ts +15 -0
  13. package/dist/authorization/key-store.js +148 -0
  14. package/dist/authorization/key-store.js.map +1 -0
  15. package/dist/authorization/recovery-client.d.ts +19 -0
  16. package/dist/authorization/recovery-client.js +102 -0
  17. package/dist/authorization/recovery-client.js.map +1 -0
  18. package/dist/authorization/recovery-host.d.ts +28 -0
  19. package/dist/authorization/recovery-host.js +93 -0
  20. package/dist/authorization/recovery-host.js.map +1 -0
  21. package/dist/authorization/recovery.d.ts +13 -0
  22. package/dist/authorization/recovery.js +27 -0
  23. package/dist/authorization/recovery.js.map +1 -0
  24. package/dist/authorization/secret-process.d.ts +2 -0
  25. package/dist/authorization/secret-process.js +32 -0
  26. package/dist/authorization/secret-process.js.map +1 -0
  27. package/dist/boot.d.ts +19 -11
  28. package/dist/boot.js +34 -25
  29. package/dist/boot.js.map +1 -1
  30. package/dist/builtin-agents.d.ts +3 -0
  31. package/dist/builtin-agents.js +15 -0
  32. package/dist/builtin-agents.js.map +1 -0
  33. package/dist/chat-composition.d.ts +19 -0
  34. package/dist/chat-composition.js +83 -0
  35. package/dist/chat-composition.js.map +1 -0
  36. package/dist/chat-host.d.ts +9 -25
  37. package/dist/chat-host.js +12 -158
  38. package/dist/chat-host.js.map +1 -1
  39. package/dist/cli.js +21 -13
  40. package/dist/cli.js.map +1 -1
  41. package/dist/content-cache-host.d.ts +7 -0
  42. package/dist/content-cache-host.js +23 -1
  43. package/dist/content-cache-host.js.map +1 -1
  44. package/dist/credentials-host.d.ts +1 -5
  45. package/dist/credentials-host.js +1 -5
  46. package/dist/credentials-host.js.map +1 -1
  47. package/dist/entity-record-store.d.ts +2 -0
  48. package/dist/entity-record-store.js +15 -0
  49. package/dist/entity-record-store.js.map +1 -1
  50. package/dist/forward.js +1 -1
  51. package/dist/forward.js.map +1 -1
  52. package/dist/index.d.ts +7 -6
  53. package/dist/index.js +2 -2
  54. package/dist/index.js.map +1 -1
  55. package/dist/machine-host.d.ts +29 -0
  56. package/dist/machine-host.js +240 -10
  57. package/dist/machine-host.js.map +1 -1
  58. package/dist/parity.d.ts +1 -5
  59. package/dist/parity.js +4 -41
  60. package/dist/parity.js.map +1 -1
  61. package/dist/release-catalog.js +7 -4
  62. package/dist/release-catalog.js.map +1 -1
  63. package/dist/runtime-command-host.d.ts +11 -0
  64. package/dist/runtime-command-host.js +65 -0
  65. package/dist/runtime-command-host.js.map +1 -1
  66. package/dist/user-ground-host.js +60 -5
  67. package/dist/user-ground-host.js.map +1 -1
  68. package/package.json +14 -5
  69. package/dist/chat-payloads-host.d.ts +0 -8
  70. package/dist/chat-payloads-host.js +0 -76
  71. package/dist/chat-payloads-host.js.map +0 -1
  72. package/dist/chat-relay-host.d.ts +0 -24
  73. package/dist/chat-relay-host.js +0 -90
  74. package/dist/chat-relay-host.js.map +0 -1
  75. package/dist/drivers/claude-code.d.ts +0 -27
  76. package/dist/drivers/claude-code.js +0 -72
  77. 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":"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"}
1
+ {"version":3,"file":"runtime-command-host.js","sourceRoot":"","sources":["../src/runtime-command-host.ts"],"names":[],"mappings":"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"}
@@ -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 store = new EntityRecordSqliteStore(initializeDatabase(this.databasePath(identity)));
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
- await this.syncLocalChangesUnlocked(identity, pending, coreScan);
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 Error("the verified notebook advanced while Detect was observing; retrying fresh truth"));
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