@amalgm/automations 0.4.3 → 0.4.4-main.34176529830
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/AXIOMS.md +3 -0
- package/PURPOSE.md +37 -0
- package/README.md +34 -0
- package/dist/host/config.js +8 -12
- package/dist/skills/amalgm-automations.a46100bf875bc64b8668dc705003d6e31bddd32cb61cda74852786370842c94e.tgz +0 -0
- package/dist/skills/index.json +1 -1
- package/package.json +51 -5
- package/dist/skills/amalgm-automations.97a9eb82d8185b0730c018c7e82479f2597efd19e2a828cfb256d64ac27082af.tgz +0 -0
package/AXIOMS.md
CHANGED
|
@@ -65,6 +65,9 @@
|
|
|
65
65
|
aliases for one another.
|
|
66
66
|
23. Automations is a standalone hosted service. Gateway owns none of its API,
|
|
67
67
|
scheduling, claim, execution, or persistence path.
|
|
68
|
+
Its host validates Core's complete environment binding before opening its
|
|
69
|
+
database, issuer, public API or webhook authority; local has no managed
|
|
70
|
+
service fallback.
|
|
68
71
|
24. The durable run ledger is the offline queue. The platform never keeps a
|
|
69
72
|
second online-machine delivery buffer and never drops an unclaimed run.
|
|
70
73
|
25. A run advances through its immutable plan in order. Every step transition
|
package/PURPOSE.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
+
Consumer assembly derives exact same-branch dependency pins from the declared
|
|
6
|
+
package manifests and registry candidate records. One pending composition per
|
|
7
|
+
branch preserves human edits; complete consumer checks for the exact merge tree govern its
|
|
8
|
+
merge, and publication never implies installed adoption.
|
|
9
|
+
|
|
10
|
+
Managed releases bind to one exact published Core version and build from the
|
|
11
|
+
locked dependency graph on the supported Node toolchain.
|
|
12
|
+
|
|
5
13
|
Automations is the sole owner of Amalgm automation behavior and data. It lets an
|
|
6
14
|
authenticated user create, inspect, change, delete, and manually run automation
|
|
7
15
|
configuration — an automation belongs to one user and one target, may own any
|
|
@@ -10,6 +18,11 @@ have each trigger occurrence run on the selected existing Amalgm machine.
|
|
|
10
18
|
Supabase holds everything except execution: the automation, its triggers, the
|
|
11
19
|
complete workflow, and permanent run history.
|
|
12
20
|
|
|
21
|
+
Each hosted environment reaches only its declared UI issuer, database and
|
|
22
|
+
webhook authority. Main and preview initially share the database by owner
|
|
23
|
+
direction; their public API and issuer identities remain distinct. Durable
|
|
24
|
+
claims remain the single authority for work even when hosts share data.
|
|
25
|
+
|
|
13
26
|
The initial launch is free, with no payment prerequisite or automatic paid
|
|
14
27
|
cutover. Shared account limits protect the hosted service: ten configuration
|
|
15
28
|
API writes and ten newly admitted runs per rolling minute, and at most one
|
|
@@ -149,3 +162,27 @@ authority. Shell calls the published machine-claim and execution contracts
|
|
|
149
162
|
directly; the UI calls the hosted control plane through the published client.
|
|
150
163
|
Any remaining Engine automation code is deprecated migration/parity evidence,
|
|
151
164
|
not a cutover dependency or compatibility authority.
|
|
165
|
+
|
|
166
|
+
## Managed package delivery
|
|
167
|
+
|
|
168
|
+
Managed package delivery starts from a clean, exact main or preview source
|
|
169
|
+
commit. The workflow occurrence supplies only its generated version and source
|
|
170
|
+
record; tests run against those candidate inputs before packing. Every native
|
|
171
|
+
gate and publication use that same tarball and integrity. A candidate tag makes
|
|
172
|
+
bytes available to release assembly; it never promotes an installed runtime.
|
|
173
|
+
Release tooling remains available inside each owner repository so a developer
|
|
174
|
+
or CI job never needs access to another private product repository.
|
|
175
|
+
Registry credentials are available only to the final protected publication job,
|
|
176
|
+
after every native examination proves the exact candidate bytes.
|
|
177
|
+
Native consumers install the archive as a dependency, so SDK development
|
|
178
|
+
dependencies never become an end-user installation requirement.
|
|
179
|
+
The repository token creates only its own dependency proposals and explicitly
|
|
180
|
+
dispatches checks and delivery; every admitted gate proves the actual checkout,
|
|
181
|
+
including the exact two-parent merge commit that becomes managed source.
|
|
182
|
+
|
|
183
|
+
Hosted delivery examines the final immutable image under both declared managed
|
|
184
|
+
bindings before deploying that exact digest to its source branch's Fly app.
|
|
185
|
+
The host's own pipeline owns replacement, health and provider verification;
|
|
186
|
+
no hosted process updates its package tree in place. A local image examination
|
|
187
|
+
proves image behavior, while Fly networking and durable product journeys retain
|
|
188
|
+
their separate provider proof.
|
package/README.md
CHANGED
|
@@ -331,3 +331,37 @@ behavior, offline catch-up, retry deadlines, and abandoned claims.
|
|
|
331
331
|
|
|
332
332
|
See [PURPOSE.md](./PURPOSE.md) and [AXIOMS.md](./AXIOMS.md) for the governing
|
|
333
333
|
ownership and behavior laws.
|
|
334
|
+
|
|
335
|
+
## Managed package delivery
|
|
336
|
+
|
|
337
|
+
Managed npm delivery uses `.github/workflows/publish-package.yml` after the
|
|
338
|
+
exact main/preview owner checks pass. The occurrence generates a unique
|
|
339
|
+
prerelease version and records its source SHA; it reruns the owner suite, packs
|
|
340
|
+
once, and installs that tarball on Linux, macOS and Windows before publication.
|
|
341
|
+
The `candidate-main`/`candidate-preview` tags are release-assembly inputs and
|
|
342
|
+
never select installed runtimes. `package.json` declares this owner's gates,
|
|
343
|
+
CLI probes, peer-only exports and lifecycle permissions. The standalone runner
|
|
344
|
+
under `scripts/release/` is intentionally copied across owners to preserve
|
|
345
|
+
private repository access boundaries. The final publish step uses the `NPM_TOKEN`
|
|
346
|
+
secret in the `npm-release` environment. Where npm trusted publishing is
|
|
347
|
+
configured for this repository's `publish-package.yml` and that environment,
|
|
348
|
+
the token can be omitted. Authentication does not replace native certification,
|
|
349
|
+
exact source records or artifact integrity; private source repositories do not
|
|
350
|
+
receive npm's public-source provenance.
|
|
351
|
+
|
|
352
|
+
Hosted delivery is separately wired in `release-hosted.yml`: it builds the exact
|
|
353
|
+
source image, tests both declared bindings without network access, deploys the
|
|
354
|
+
same digest to the selected Fly app, then verifies machine identity and public
|
|
355
|
+
readiness. `package.json` owns the host declaration. The Python effect runner is
|
|
356
|
+
an intentional standalone copy from UI; no other private repository is required.
|
|
357
|
+
Live provider and durable product-flow proof remain separate release obligations.
|
|
358
|
+
|
|
359
|
+
Managed dependency reconciliation reads this owner’s declared manifests and
|
|
360
|
+
updates exact same-branch registry candidates in one pending composition PR per
|
|
361
|
+
branch. The repository token explicitly dispatches the owner checks. Every declared gate must
|
|
362
|
+
pass for the exact merge tree; an atomic expected-base update prevents merging
|
|
363
|
+
with untested concurrent source. Human additions or amendments are preserved.
|
|
364
|
+
The half-hour CI reconciliation recovers missed dispatch hints. Assembly runs
|
|
365
|
+
no dependency code or lifecycle hooks, and repeated owner checks do not publish
|
|
366
|
+
another candidate for unchanged source. Repository policy must allow GitHub Actions to create pull requests; no
|
|
367
|
+
cross-repository credential or paid auto-merge feature is required.
|
package/dist/host/config.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
import { isLoopbackEndpoint, resolveRuntimeEndpoint, validateRuntimeEndpointEnvironment } from '@amalgm/core/binding';
|
|
1
2
|
export function automationsHostConfig(env = process.env) {
|
|
3
|
+
const publicOrigin = required(env.AMALGAM_PUBLIC_ORIGIN, 'AMALGAM_PUBLIC_ORIGIN');
|
|
4
|
+
const isolatedOrigin = isLoopbackEndpoint(publicOrigin) ? publicOrigin : undefined;
|
|
5
|
+
const binding = validateRuntimeEndpointEnvironment(env, isolatedOrigin);
|
|
2
6
|
return Object.freeze({
|
|
3
7
|
port: integer(env.PORT, 8080, 1, 65_535),
|
|
4
|
-
publicOrigin:
|
|
5
|
-
webhookOrigin:
|
|
8
|
+
publicOrigin: resolveRuntimeEndpoint(binding, 'automations', publicOrigin, isolatedOrigin),
|
|
9
|
+
webhookOrigin: resolveRuntimeEndpoint(binding, 'automations', required(env.AUTOMATIONS_WEBHOOK_ORIGIN, 'AUTOMATIONS_WEBHOOK_ORIGIN'), isolatedOrigin),
|
|
6
10
|
webhookTokenKey: secret(env.AUTOMATIONS_WEBHOOK_TOKEN_KEY, 'AUTOMATIONS_WEBHOOK_TOKEN_KEY'),
|
|
7
|
-
supabaseUrl:
|
|
11
|
+
supabaseUrl: resolveRuntimeEndpoint(binding, 'supabase', required(env.SUPABASE_URL ?? env.NEXT_PUBLIC_SUPABASE_URL, 'SUPABASE_URL'), isolatedOrigin),
|
|
8
12
|
supabaseServiceRoleKey: required(env.SUPABASE_SERVICE_ROLE_KEY, 'SUPABASE_SERVICE_ROLE_KEY'),
|
|
9
|
-
authorizationIssuer:
|
|
13
|
+
authorizationIssuer: resolveRuntimeEndpoint(binding, 'app', required(env.AMALGM_AUTHORIZATION_ISSUER, 'AMALGM_AUTHORIZATION_ISSUER'), isolatedOrigin),
|
|
10
14
|
schedulerIntervalMs: integer(env.AUTOMATIONS_SCHEDULER_INTERVAL_MS, 1_000, 250, 60_000),
|
|
11
15
|
});
|
|
12
16
|
}
|
|
@@ -21,14 +25,6 @@ function secret(value, name) {
|
|
|
21
25
|
throw new Error(`${name} must contain at least 32 bytes`);
|
|
22
26
|
return result;
|
|
23
27
|
}
|
|
24
|
-
function url(value, name) {
|
|
25
|
-
const parsed = new URL(required(value, name));
|
|
26
|
-
const local = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
27
|
-
if (parsed.protocol !== 'https:' && !(local && parsed.protocol === 'http:')) {
|
|
28
|
-
throw new Error(`${name} must use HTTPS`);
|
|
29
|
-
}
|
|
30
|
-
return parsed.toString().replace(/\/$/, '');
|
|
31
|
-
}
|
|
32
28
|
function integer(value, fallback, minimum, maximum) {
|
|
33
29
|
const parsed = value === undefined ? fallback : Number(value);
|
|
34
30
|
if (!Number.isInteger(parsed) || parsed < minimum || parsed > maximum) {
|
|
Binary file
|
package/dist/skills/index.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://schemas.agentskills.io/discovery/0.2.0/schema.json","skills":[{"name":"amalgm-automations","description":"Set up and use Amalgm to schedule workflows, run native agents and scripts, receive webhooks, and inspect automation results through the amalgm CLI or an existing MCP connection.","type":"archive","url":"./amalgm-automations.
|
|
1
|
+
{"$schema":"https://schemas.agentskills.io/discovery/0.2.0/schema.json","skills":[{"name":"amalgm-automations","description":"Set up and use Amalgm to schedule workflows, run native agents and scripts, receive webhooks, and inspect automation results through the amalgm CLI or an existing MCP connection.","type":"archive","url":"./amalgm-automations.a46100bf875bc64b8668dc705003d6e31bddd32cb61cda74852786370842c94e.tgz","digest":"sha256:a46100bf875bc64b8668dc705003d6e31bddd32cb61cda74852786370842c94e"}]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amalgm/automations",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4-main.34176529830",
|
|
4
4
|
"description": "Amalgm's automation SDK: durable trigger admission and target-machine execution.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"README.md"
|
|
46
46
|
],
|
|
47
47
|
"scripts": {
|
|
48
|
-
"build": "
|
|
48
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json && tsx scripts/mark-executables.ts && tsx scripts/build-public-skill.ts",
|
|
49
49
|
"check": "tsx scripts/check-tree.ts && tsc -p tsconfig.json --noEmit",
|
|
50
50
|
"test": "tsx --test test/*.test.ts",
|
|
51
51
|
"test:supabase": "tsx --test test/integration/postgres.test.ts",
|
|
@@ -53,13 +53,19 @@
|
|
|
53
53
|
"verify": "npm run check && npm test && npm run build && tsx scripts/check-cli-artifact.ts",
|
|
54
54
|
"release:check": "npm run verify && npm run test:supabase",
|
|
55
55
|
"prepack": "npm run build",
|
|
56
|
-
"start": "node dist/host/main.js"
|
|
56
|
+
"start": "node dist/host/main.js",
|
|
57
|
+
"release:admit": "node scripts/release/package.mjs admit",
|
|
58
|
+
"release:prepare": "node scripts/release/package.mjs prepare",
|
|
59
|
+
"release:examine": "node scripts/release/package.mjs examine",
|
|
60
|
+
"release:publish": "node scripts/release/package.mjs publish",
|
|
61
|
+
"release:compose": "node scripts/release/compose.mjs",
|
|
62
|
+
"test:release": "node --test scripts/release/*.test.mjs"
|
|
57
63
|
},
|
|
58
64
|
"engines": {
|
|
59
|
-
"node": ">=
|
|
65
|
+
"node": ">=24"
|
|
60
66
|
},
|
|
61
67
|
"dependencies": {
|
|
62
|
-
"@amalgm/core": "0.4.
|
|
68
|
+
"@amalgm/core": "0.4.8-main.34168902443",
|
|
63
69
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
64
70
|
"@supabase/supabase-js": "2.57.4",
|
|
65
71
|
"cron-parser": "^5.4.0",
|
|
@@ -72,5 +78,45 @@
|
|
|
72
78
|
"pg": "^8.16.3",
|
|
73
79
|
"tsx": "^4.23.1",
|
|
74
80
|
"typescript": "5.9.3"
|
|
81
|
+
},
|
|
82
|
+
"amalgmRelease": {
|
|
83
|
+
"schema": 1,
|
|
84
|
+
"workflow": "verify.yml",
|
|
85
|
+
"jobs": [
|
|
86
|
+
"product",
|
|
87
|
+
"notifications"
|
|
88
|
+
],
|
|
89
|
+
"verify": "verify",
|
|
90
|
+
"cli": [
|
|
91
|
+
"amalgm-automations"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"allowScripts": {
|
|
95
|
+
"esbuild@0.28.1": true,
|
|
96
|
+
"fsevents@2.3.3": false
|
|
97
|
+
},
|
|
98
|
+
"amalgmHosts": {
|
|
99
|
+
"automations": {
|
|
100
|
+
"directory": ".",
|
|
101
|
+
"context": ".",
|
|
102
|
+
"dockerfile": "Dockerfile"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"amalgmComposition": {
|
|
106
|
+
"schema": 1,
|
|
107
|
+
"manifests": [
|
|
108
|
+
"package.json"
|
|
109
|
+
],
|
|
110
|
+
"afterMergeWorkflows": [
|
|
111
|
+
"publish-package.yml",
|
|
112
|
+
"release-hosted.yml"
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"gitHead": "09ce702dd22145ddc2684e0dc1bfde1639d66e33",
|
|
116
|
+
"amalgmSource": {
|
|
117
|
+
"repository": "amalgm-inc/amalgm-automations",
|
|
118
|
+
"branch": "main",
|
|
119
|
+
"commit": "09ce702dd22145ddc2684e0dc1bfde1639d66e33",
|
|
120
|
+
"occurrence": "34176529830"
|
|
75
121
|
}
|
|
76
122
|
}
|