@astrale-os/adapter-astrale 0.5.0-beta.76 → 0.5.0-beta.78

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/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.0-beta.78](https://github.com/astrale-os/sdk/compare/adapter-astrale-v0.5.0-beta.77...adapter-astrale-v0.5.0-beta.78) (2026-08-29)
4
+
5
+
6
+ ### Dependencies
7
+
8
+ * The following workspace dependencies were updated
9
+ * dependencies
10
+ * @astrale-os/adapter-cloudflare bumped to 0.5.0-beta.85
11
+ * @astrale-os/sdk bumped to 0.5.0-beta.82
12
+
13
+ ## [0.5.0-beta.77](https://github.com/astrale-os/sdk/compare/adapter-astrale-v0.5.0-beta.76...adapter-astrale-v0.5.0-beta.77) (2026-08-29)
14
+
15
+
16
+ ### Features
17
+
18
+ * **app:** add development session file ([#339](https://github.com/astrale-os/sdk/issues/339)) ([f28e9c6](https://github.com/astrale-os/sdk/commit/f28e9c6fb707b8791a5bc63eba3b616aa7b02342))
19
+
20
+
21
+ ### Dependencies
22
+
23
+ * The following workspace dependencies were updated
24
+ * dependencies
25
+ * @astrale-os/adapter-cloudflare bumped to 0.5.0-beta.84
26
+ * @astrale-os/sdk bumped to 0.5.0-beta.81
27
+
3
28
  ## [0.5.0-beta.76](https://github.com/astrale-os/sdk/compare/adapter-astrale-v0.5.0-beta.75...adapter-astrale-v0.5.0-beta.76) (2026-08-29)
4
29
 
5
30
 
package/README.md CHANGED
@@ -22,7 +22,10 @@ npm install @astrale-os/sdk@beta @astrale-os/adapter-astrale@beta
22
22
 
23
23
  Bare installs return to stable releases when the package set is promoted and npm `latest` advances.
24
24
 
25
- The adapter admits the exact Services deployment response. Expected `invalid-deployment`,
25
+ The adapter sends provider-neutral deployment material: Services receives no Schema revision,
26
+ Publication identity, issuer, or callable inventory. It admits the exact generic Services response,
27
+ then assembles the expected Release from its local Build and verifies the live Publication before
28
+ installation. Expected `invalid-deployment`,
26
29
  `service-unavailable`, and `artifact-mode-conflict` rejections preserve their actionable Domain
27
30
  message; malformed or unknown response evidence still fails closed.
28
31
 
@@ -33,3 +36,8 @@ processes and retains the installation plus a non-secret local reconciliation re
33
36
  `pnpm dev` replaces a stale Quick issuer only when that record still matches fresh Kernel
34
37
  introspection; drift fails safely with an explicit recovery command. Use
35
38
  `pnpm dev --host https://your-ingress.example --port 8787` to supply stable ingress.
39
+
40
+ Automation may add `--session-file /private/path/development-session.json`. The SDK exclusively
41
+ creates that non-existent path inside a caller-owned private directory and retains one atomic,
42
+ versioned `DevelopmentSessionFileV1` snapshot after termination. It is the machine contract for
43
+ session phase and exact installed Release identity; stdout and stderr remain human diagnostics.
@@ -101,7 +101,7 @@ export async function deployAstrale(parameters, context, dependencies) {
101
101
  const expectedServiceKey = serviceKeyFromOrigin(origin);
102
102
  let observation;
103
103
  try {
104
- observation = deployedService(deployed, expectedServiceKey, context.artifact.build.schema.compiled.root.revision);
104
+ observation = deployedService(deployed, expectedServiceKey);
105
105
  }
106
106
  catch (cause) {
107
107
  return failed('provider', progress({
@@ -17,7 +17,6 @@ export interface DeploymentRequest {
17
17
  readonly serviceKey: string;
18
18
  readonly name: string;
19
19
  readonly revisioned: {
20
- readonly revision: string;
21
20
  readonly requiredSecrets: readonly string[];
22
21
  readonly release: EncodedArtifact;
23
22
  };
@@ -25,7 +25,6 @@ export function deploymentRequest(artifact, input) {
25
25
  serviceKey: serviceKeyFromOrigin(worker.origin),
26
26
  name: input.name,
27
27
  revisioned: Object.freeze({
28
- revision: worker.revision,
29
28
  requiredSecrets: worker.bindings.requiredSecrets,
30
29
  release: executable(worker.release),
31
30
  }),
@@ -1,4 +1,4 @@
1
- export declare function deployedService(input: unknown, expectedServiceKey: string, expectedRevision: string): {
1
+ export declare function deployedService(input: unknown, expectedServiceKey: string): {
2
2
  readonly url?: string;
3
3
  readonly digest: string;
4
4
  };
@@ -1,11 +1,9 @@
1
- export function deployedService(input, expectedServiceKey, expectedRevision) {
1
+ export function deployedService(input, expectedServiceKey) {
2
2
  if (input === null || typeof input !== 'object' || Array.isArray(input))
3
3
  invalidDeployment();
4
4
  const value = input;
5
5
  if (value.kind === 'rejected')
6
6
  rejectDeployment(value);
7
- if (value.error !== undefined && value.error !== null)
8
- invalidDeployment();
9
7
  if (value.state !== 'ready') {
10
8
  throw new TypeError('Astrale Services deployment did not report ready provider state.');
11
9
  }
@@ -15,9 +13,6 @@ export function deployedService(input, expectedServiceKey, expectedRevision) {
15
13
  if (typeof value.digest !== 'string' || value.digest.length === 0) {
16
14
  throw new TypeError('Astrale Services deployment returned an invalid provider digest.');
17
15
  }
18
- if (value.revision !== expectedRevision) {
19
- throw new TypeError('Astrale Services deployment returned a different Schema revision.');
20
- }
21
16
  let url;
22
17
  if (typeof value.url === 'string') {
23
18
  try {
@@ -94,6 +94,7 @@ export async function developAstrale(parameters, context, dependencies = default
94
94
  let port = requestedPort;
95
95
  let ingress;
96
96
  let localSession;
97
+ let installedRelease;
97
98
  let stopping = false;
98
99
  let terminal = false;
99
100
  let generation = 0;
@@ -116,7 +117,7 @@ export async function developAstrale(parameters, context, dependencies = default
116
117
  throw new TypeError('Domain origin changed during development; restart pnpm dev to acquire the new target coordinate.');
117
118
  }
118
119
  const release = assemble(current.artifact.build, addressing(placement.releaseUrl));
119
- await dependencies.reconcileInstallation({
120
+ const observed = await dependencies.reconcileInstallation({
120
121
  executable: toolchain.cli,
121
122
  projectDir: context.projectDir,
122
123
  instance,
@@ -124,6 +125,7 @@ export async function developAstrale(parameters, context, dependencies = default
124
125
  signal,
125
126
  ...(recordPath === undefined ? {} : { recordPath }),
126
127
  }, release, installation);
128
+ installedRelease = observed;
127
129
  let pageUrl;
128
130
  try {
129
131
  pageUrl = await view.refresh(release, placement.localUrl, signal);
@@ -131,7 +133,7 @@ export async function developAstrale(parameters, context, dependencies = default
131
133
  catch (cause) {
132
134
  report('View unavailable', message(cause));
133
135
  }
134
- await context.onPlacement(placement);
136
+ await context.onPlacement(Object.freeze({ ...placement, installedRelease: observed }));
135
137
  report('Installed', `${instance} · ${release.build.schema.compiled.root.revision}`);
136
138
  if (pageUrl !== undefined)
137
139
  report('View', pageUrl);
@@ -206,6 +208,7 @@ export async function developAstrale(parameters, context, dependencies = default
206
208
  const recover = async (observedGeneration, kind, original) => {
207
209
  if (stopping || observedGeneration !== generation)
208
210
  return;
211
+ await context.onRecovering?.();
209
212
  report('Recovering', kind === 'ingress' ? 'public ingress' : 'local runtime');
210
213
  generation += 1;
211
214
  const previousLocal = localSession;
@@ -265,7 +268,7 @@ export async function developAstrale(parameters, context, dependencies = default
265
268
  generation += 1;
266
269
  supervise(localSession, ingress, generation);
267
270
  const result = Object.freeze({
268
- current: () => localSession.current(),
271
+ current: () => Object.freeze({ ...localSession.current(), installedRelease }),
269
272
  update(next) {
270
273
  if (terminal)
271
274
  return Promise.reject(new Error('Astrale development session is terminal.'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrale-os/adapter-astrale",
3
- "version": "0.5.0-beta.76",
3
+ "version": "0.5.0-beta.78",
4
4
  "description": "Deploy an Astrale domain as a managed service through the Astrale platform",
5
5
  "keywords": [
6
6
  "adapter",
@@ -37,8 +37,8 @@
37
37
  "registry": "https://registry.npmjs.org/"
38
38
  },
39
39
  "dependencies": {
40
- "@astrale-os/adapter-cloudflare": "0.5.0-beta.83",
41
- "@astrale-os/sdk": "0.5.0-beta.80"
40
+ "@astrale-os/adapter-cloudflare": "0.5.0-beta.85",
41
+ "@astrale-os/sdk": "0.5.0-beta.82"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@astrale-os/ox": "0.1.3",