@jentra/community-runtime 0.0.0-stage → 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
package/README.md CHANGED
@@ -1,3 +1,23 @@
1
- # Temporary Holding Version
1
+ # Jentra Community Runtime
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The Community Runtime is a small, local-first Jentra coordination service. It gives the public SDK,
4
+ CLI, MCP server and agent skill a usable backend without the private hosted control plane.
5
+
6
+ ```sh
7
+ npx @jentra/community-runtime init
8
+ npx @jentra/community-runtime start
9
+ ```
10
+
11
+ Open `http://127.0.0.1:4317`, or connect another public Jentra tool:
12
+
13
+ ```sh
14
+ JENTRA_API_URL=http://127.0.0.1:4317 JENTRA_TEST_PARTICIPANT=local-user npx @jentra/mcp-server
15
+ ```
16
+
17
+ Data is stored in `.jentra/community.json`. The service binds to loopback by default. Set
18
+ `JENTRA_COMMUNITY_TOKEN` before binding it to another interface.
19
+
20
+ This first public runtime supports Projects, Journeys, participants, current context, append-only
21
+ command receipts, events, Change Review summaries and the five public MCP operations. It does not
22
+ include managed execution, hosted identity, billing, organization administration or Jentra's private
23
+ large-scale control-plane implementation.
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { type IncomingMessage, type ServerResponse } from "node:http";
3
+ export interface CommunityRuntimeOptions {
4
+ host?: string;
5
+ port?: number;
6
+ dataFile?: string;
7
+ token?: string;
8
+ }
9
+ export declare function startCommunityRuntime(options?: CommunityRuntimeOptions): Promise<{
10
+ server: import("node:http").Server<typeof IncomingMessage, typeof ServerResponse>;
11
+ url: string;
12
+ dataFile: string;
13
+ }>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAmDpF,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2BD,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,uBAA4B;;;;GAgBhF"}
package/dist/index.js ADDED
@@ -0,0 +1,344 @@
1
+ #!/usr/bin/env node
2
+ import { randomUUID } from "node:crypto";
3
+ import { createServer } from "node:http";
4
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
5
+ import { dirname, resolve } from "node:path";
6
+ import { CommandEnvelopeSchema, ProjectCreateRequestSchema, ProjectJourneyStartRequestSchema, } from "@jentra/contracts";
7
+ const empty = () => ({ schemaVersion: 1, projects: {}, journeys: {} });
8
+ class Store {
9
+ path;
10
+ state = empty();
11
+ constructor(path) {
12
+ this.path = path;
13
+ }
14
+ async load() {
15
+ try {
16
+ this.state = JSON.parse(await readFile(this.path, "utf8"));
17
+ }
18
+ catch (error) {
19
+ if (error.code !== "ENOENT")
20
+ throw error;
21
+ }
22
+ }
23
+ read() {
24
+ return this.state;
25
+ }
26
+ async change(fn) {
27
+ const result = fn(this.state);
28
+ await mkdir(dirname(this.path), { recursive: true });
29
+ const temporary = `${this.path}.${String(process.pid)}.tmp`;
30
+ await writeFile(temporary, `${JSON.stringify(this.state, null, 2)}\n`, { mode: 0o600 });
31
+ await rename(temporary, this.path);
32
+ return result;
33
+ }
34
+ }
35
+ export async function startCommunityRuntime(options = {}) {
36
+ const host = options.host ?? process.env.JENTRA_COMMUNITY_HOST ?? "127.0.0.1";
37
+ const port = options.port ?? Number(process.env.JENTRA_COMMUNITY_PORT ?? 4317);
38
+ const token = options.token ?? process.env.JENTRA_COMMUNITY_TOKEN;
39
+ if (host !== "127.0.0.1" && host !== "localhost" && host !== "::1" && !token)
40
+ throw new Error("A JENTRA_COMMUNITY_TOKEN is required outside loopback.");
41
+ const store = new Store(resolve(options.dataFile ?? process.env.JENTRA_COMMUNITY_DATA ?? ".jentra/community.json"));
42
+ await store.load();
43
+ const server = createServer((request, response) => void route(request, response, store, token));
44
+ await new Promise((done, reject) => {
45
+ server.once("error", reject);
46
+ server.listen(port, host, done);
47
+ });
48
+ return { server, url: `http://${host}:${String(port)}`, dataFile: store.path };
49
+ }
50
+ async function route(request, response, store, token) {
51
+ const url = new URL(request.url ?? "/", "http://localhost");
52
+ try {
53
+ if (url.pathname === "/health") {
54
+ json(response, 200, { status: "ok", edition: "community", schemaVersion: 1 });
55
+ return;
56
+ }
57
+ if (url.pathname === "/" && request.method === "GET") {
58
+ html(response, dashboard(store.read()));
59
+ return;
60
+ }
61
+ if (token && request.headers.authorization !== `Bearer ${token}`) {
62
+ problem(response, 401, "AUTH_REQUIRED", "Supply the configured Community Runtime token.");
63
+ return;
64
+ }
65
+ const participantId = String(request.headers["x-jentra-test-participant"] ?? "local-user");
66
+ if (url.pathname === "/v1/projects" && request.method === "POST") {
67
+ const input = ProjectCreateRequestSchema.parse(await body(request));
68
+ const id = input.projectId ?? randomUUID();
69
+ const project = await store.change((state) => (state.projects[id] ??= {
70
+ id,
71
+ name: input.name,
72
+ source: input.source,
73
+ createdAt: now(),
74
+ participants: [human(participantId)],
75
+ }));
76
+ json(response, 201, project);
77
+ return;
78
+ }
79
+ const projectMatch = /^\/v1\/projects\/([^/]+)$/u.exec(url.pathname);
80
+ if (projectMatch && request.method === "GET") {
81
+ entity(response, store.read().projects[decodeURIComponent(projectMatch[1])], "PROJECT_NOT_FOUND");
82
+ return;
83
+ }
84
+ const collaborationMatch = /^\/v1\/projects\/([^/]+)\/collaboration$/u.exec(url.pathname);
85
+ if (collaborationMatch && request.method === "GET") {
86
+ const project = store.read().projects[decodeURIComponent(collaborationMatch[1])];
87
+ if (!project) {
88
+ problem(response, 404, "PROJECT_NOT_FOUND", "Project not found.");
89
+ return;
90
+ }
91
+ const journeys = Object.values(store.read().journeys).filter((item) => item.projectId === project.id);
92
+ json(response, 200, {
93
+ project,
94
+ journeys: journeys.map(summary),
95
+ authority: { mode: "OWNER_CONTROLLED", deliveryRequiresExplicitCommand: true },
96
+ capabilities: ["local-coordination", "mcp", "cli", "sdk", "local-checks"],
97
+ });
98
+ return;
99
+ }
100
+ const projectPeople = /^\/v1\/projects\/([^/]+)\/people-agents$/u.exec(url.pathname);
101
+ if (projectPeople && request.method === "GET") {
102
+ entity(response, {
103
+ participants: store.read().projects[decodeURIComponent(projectPeople[1])]?.participants ?? [],
104
+ }, "PROJECT_NOT_FOUND");
105
+ return;
106
+ }
107
+ const journeyStart = /^\/v1\/projects\/([^/]+)\/journeys$/u.exec(url.pathname);
108
+ if (journeyStart && request.method === "POST") {
109
+ const projectId = decodeURIComponent(journeyStart[1]);
110
+ if (!store.read().projects[projectId]) {
111
+ problem(response, 404, "PROJECT_NOT_FOUND", "Project not found.");
112
+ return;
113
+ }
114
+ const input = ProjectJourneyStartRequestSchema.parse(await body(request));
115
+ const id = input.journeyId ?? randomUUID();
116
+ const journey = await store.change((state) => (state.journeys[id] ??= {
117
+ id,
118
+ projectId,
119
+ layer: input.layer,
120
+ outcome: input.answers.outcome,
121
+ workKind: input.answers.workKind,
122
+ autonomy: input.answers.autonomy,
123
+ version: 1,
124
+ status: "ACTIVE",
125
+ createdAt: now(),
126
+ participants: [human(participantId)],
127
+ events: [
128
+ {
129
+ id: randomUUID(),
130
+ sequence: 1,
131
+ type: "JourneyStarted",
132
+ at: now(),
133
+ actorId: participantId,
134
+ payload: { outcome: input.answers.outcome },
135
+ },
136
+ ],
137
+ commands: {},
138
+ }));
139
+ json(response, 201, journey);
140
+ return;
141
+ }
142
+ const journeyMatch = /^\/v1\/journeys\/([^/]+)$/u.exec(url.pathname);
143
+ if (journeyMatch && request.method === "GET") {
144
+ const journey = findJourney(store, journeyMatch[1]);
145
+ if (journey)
146
+ json(response, 200, { state: journey, events: journey.events });
147
+ else
148
+ problem(response, 404, "JOURNEY_NOT_FOUND", "Journey not found.");
149
+ return;
150
+ }
151
+ const viewMatch = /^\/v1\/journeys\/([^/]+)\/(experience|change-review|people-agents)$/u.exec(url.pathname);
152
+ if (viewMatch && request.method === "GET") {
153
+ const journey = findJourney(store, viewMatch[1]);
154
+ if (!journey) {
155
+ problem(response, 404, "JOURNEY_NOT_FOUND", "Journey not found.");
156
+ return;
157
+ }
158
+ json(response, 200, viewMatch[2] === "experience"
159
+ ? context(journey)
160
+ : viewMatch[2] === "change-review"
161
+ ? review(journey)
162
+ : { participants: journey.participants });
163
+ return;
164
+ }
165
+ const commandMatch = /^\/v1\/journeys\/([^/]+)\/commands$/u.exec(url.pathname);
166
+ if (commandMatch && request.method === "POST") {
167
+ const journey = findJourney(store, commandMatch[1]);
168
+ if (!journey) {
169
+ problem(response, 404, "JOURNEY_NOT_FOUND", "Journey not found.");
170
+ return;
171
+ }
172
+ const command = CommandEnvelopeSchema.parse(await body(request));
173
+ if (command.journeyId !== journey.id) {
174
+ problem(response, 400, "JOURNEY_MISMATCH", "Command Journey does not match the route.");
175
+ return;
176
+ }
177
+ const existing = journey.commands[command.idempotencyKey];
178
+ if (existing) {
179
+ json(response, 200, existing);
180
+ return;
181
+ }
182
+ if (command.aggregateVersionExpected !== "ANY_ALLOWED" &&
183
+ command.aggregateVersionExpected !== journey.version) {
184
+ problem(response, 409, "VERSION_CONFLICT", "Read current context and retry with its version.", journey.version);
185
+ return;
186
+ }
187
+ const receipt = await applyCommand(store, journey.id, command);
188
+ json(response, 202, receipt);
189
+ return;
190
+ }
191
+ problem(response, 404, "NOT_FOUND", "Route not found.");
192
+ return;
193
+ }
194
+ catch (error) {
195
+ problem(response, 400, "INVALID_REQUEST", error instanceof Error ? error.message : String(error));
196
+ return;
197
+ }
198
+ }
199
+ async function applyCommand(store, journeyId, command) {
200
+ return store.change((state) => {
201
+ const journey = state.journeys[journeyId];
202
+ journey.version += 1;
203
+ const event = {
204
+ id: randomUUID(),
205
+ sequence: journey.events.length + 1,
206
+ type: command.commandType,
207
+ at: now(),
208
+ actorId: command.actor.participantId,
209
+ payload: command.payload,
210
+ };
211
+ journey.events.push(event);
212
+ if (!journey.participants.some((item) => item.id === command.actor.participantId))
213
+ journey.participants.push({
214
+ id: command.actor.participantId,
215
+ displayName: command.actor.participantId,
216
+ kind: command.actor.runtimeId ? "AGENT" : "HUMAN",
217
+ joinedAt: now(),
218
+ });
219
+ if (command.commandType === "CompleteJourney")
220
+ journey.status = "COMPLETED";
221
+ const receipt = {
222
+ commandId: command.commandId,
223
+ idempotencyKey: command.idempotencyKey,
224
+ payloadHash: command.payloadHash,
225
+ status: "ACCEPTED",
226
+ aggregateVersion: journey.version,
227
+ lastSequence: event.sequence,
228
+ result: { eventId: event.id },
229
+ };
230
+ journey.commands[command.idempotencyKey] = receipt;
231
+ return receipt;
232
+ });
233
+ }
234
+ const context = (journey) => ({
235
+ edition: "community",
236
+ journey: summary(journey),
237
+ direction: { revision: journey.version, outcome: journey.outcome, current: true },
238
+ assignments: journey.events.filter((item) => /assign/i.test(item.type)),
239
+ decisions: journey.events.filter((item) => /decid|accept|reject/i.test(item.type)),
240
+ evidence: journey.events.filter((item) => /evidence|check|result|contribution/i.test(item.type)),
241
+ recentActivity: journey.events.slice(-20),
242
+ authority: { autonomy: journey.autonomy, consequentialActionsRequireExplicitCommand: true },
243
+ });
244
+ const review = (journey) => ({
245
+ journeyId: journey.id,
246
+ status: journey.status,
247
+ directionRevision: journey.version,
248
+ proposedChanges: journey.events.filter((item) => /contribution|result|change/i.test(item.type)),
249
+ assurance: journey.events.filter((item) => /check|verify|assurance/i.test(item.type)),
250
+ decisions: journey.events.filter((item) => /decid|accept|reject/i.test(item.type)),
251
+ deliveryReady: journey.status === "COMPLETED",
252
+ });
253
+ const summary = (journey) => ({
254
+ id: journey.id,
255
+ projectId: journey.projectId,
256
+ outcome: journey.outcome,
257
+ workKind: journey.workKind,
258
+ autonomy: journey.autonomy,
259
+ layer: journey.layer,
260
+ status: journey.status,
261
+ version: journey.version,
262
+ createdAt: journey.createdAt,
263
+ });
264
+ const human = (id) => ({
265
+ id,
266
+ displayName: id,
267
+ kind: "HUMAN",
268
+ joinedAt: now(),
269
+ });
270
+ const now = () => new Date().toISOString();
271
+ const findJourney = (store, encoded) => store.read().journeys[decodeURIComponent(encoded)];
272
+ async function body(request) {
273
+ const chunks = [];
274
+ let size = 0;
275
+ for await (const chunk of request) {
276
+ const value = typeof chunk === "string" ? Buffer.from(chunk) : new Uint8Array(chunk);
277
+ size += value.byteLength;
278
+ if (size > 1_000_000)
279
+ throw new Error("Request body exceeds 1 MB.");
280
+ chunks.push(value);
281
+ }
282
+ return JSON.parse(Buffer.concat(chunks).toString("utf8") || "{}");
283
+ }
284
+ function json(response, status, value) {
285
+ response.writeHead(status, {
286
+ "content-type": "application/json; charset=utf-8",
287
+ "cache-control": "no-store",
288
+ });
289
+ response.end(JSON.stringify(value));
290
+ }
291
+ function html(response, value) {
292
+ response.writeHead(200, {
293
+ "content-type": "text/html; charset=utf-8",
294
+ "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'; form-action 'self'; base-uri 'none'",
295
+ });
296
+ response.end(value);
297
+ }
298
+ function entity(response, value, code) {
299
+ if (value)
300
+ json(response, 200, value);
301
+ else
302
+ problem(response, 404, code, "Resource not found.");
303
+ }
304
+ function problem(response, status, code, messagePlain, currentVersion) {
305
+ json(response, status, {
306
+ code,
307
+ messagePlain,
308
+ ...(currentVersion === undefined ? {} : { currentVersion }),
309
+ retryClass: status === 409 ? "REREAD_REQUIRED" : status >= 500 ? "LATER" : "USER_ACTION",
310
+ remediationActions: [messagePlain],
311
+ correlationId: randomUUID(),
312
+ });
313
+ }
314
+ function dashboard(state) {
315
+ const projects = Object.values(state.projects);
316
+ const journeys = Object.values(state.journeys);
317
+ const escape = (value) => value.replace(/[&<>"']/gu, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[c]);
318
+ return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Jentra Community</title><style>body{margin:0;background:#111b34;color:#eef4ff;font:16px system-ui}main{max-width:900px;margin:auto;padding:8vw 24px}small{color:#9fb4d7}h1{font-size:clamp(2.4rem,8vw,5rem);margin:.2em 0}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.card{border:1px solid #526b96;border-radius:18px;padding:20px;background:#182746}.tag{color:#ff8b6a}code{background:#0a1226;padding:3px 6px;border-radius:5px}a{color:#a9c8ff}</style></head><body><main><small>LOCAL COORDINATION RUNTIME</small><h1>Jentra Community</h1><p>Your Projects, Journeys and agent context stay in <code>.jentra/community.json</code>.</p><section><h2>Projects</h2><div class="grid">${projects.map((p) => `<article class="card"><span class="tag">Project</span><h3>${escape(p.name)}</h3><small>${escape(p.id)}</small></article>`).join("") || "<p>No Projects yet. Create one with the SDK or API.</p>"}</div></section><section><h2>Journeys</h2><div class="grid">${journeys.map((j) => `<article class="card"><span class="tag">${escape(j.status)}</span><h3>${escape(j.outcome)}</h3><p>${escape(j.workKind)} · revision ${String(j.version)}</p><small>${escape(j.id)}</small></article>`).join("") || "<p>No Journeys yet.</p>"}</div></section></main></body></html>`;
319
+ }
320
+ async function main() {
321
+ const command = process.argv[2] ?? "start";
322
+ if (command === "init") {
323
+ const path = resolve(process.env.JENTRA_COMMUNITY_DATA ?? ".jentra/community.json");
324
+ const store = new Store(path);
325
+ await store.load();
326
+ await store.change(() => undefined);
327
+ console.log(`Initialized ${path}`);
328
+ return;
329
+ }
330
+ if (command === "start") {
331
+ const runtime = await startCommunityRuntime();
332
+ console.log(`Jentra Community Runtime: ${runtime.url}\nData: ${runtime.dataFile}`);
333
+ return;
334
+ }
335
+ console.error("Usage: jentra-community [init|start]");
336
+ process.exitCode = 2;
337
+ }
338
+ if (process.argv[1] &&
339
+ resolve(process.argv[1]) === resolve(new URL(import.meta.url).pathname.replace(/^\/(.:)/u, "$1")))
340
+ void main().catch((error) => {
341
+ console.error(error);
342
+ process.exitCode = 1;
343
+ });
344
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,29 @@
1
1
  {
2
2
  "name": "@jentra/community-runtime",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Local-first Jentra coordination runtime",
5
+ "author": "Norvande Ltd",
6
+ "license": "Apache-2.0",
7
+ "type": "module",
8
+ "bin": {
9
+ "jentra-community": "dist/index.js"
10
+ },
11
+ "exports": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "files": [
16
+ "dist/index.js",
17
+ "dist/index.js.map",
18
+ "dist/index.d.ts",
19
+ "dist/index.d.ts.map",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "dependencies": {
27
+ "@jentra/contracts": "^0.2.5"
28
+ }
29
+ }