@jentra/community-runtime 0.0.0-stage → 0.1.1
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 +15 -0
- package/README.md +25 -2
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +412 -0
- package/dist/index.js.map +1 -0
- package/package.json +27 -4
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,26 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Jentra Community Runtime
|
|
2
2
|
|
|
3
|
-
|
|
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
|
+
The local interface can create Projects and start Quick Tasks or Managed Journeys. SDK, CLI and MCP
|
|
21
|
+
clients see the same persisted context.
|
|
22
|
+
|
|
23
|
+
This first public runtime supports Projects, Journeys, participants, current context, append-only
|
|
24
|
+
command receipts, events, Change Review summaries and the five public MCP operations. It does not
|
|
25
|
+
include managed execution, hosted identity, billing, organization administration or Jentra's private
|
|
26
|
+
large-scale control-plane implementation.
|
package/dist/index.d.ts
ADDED
|
@@ -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,412 @@
|
|
|
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 (token && request.headers.authorization !== `Bearer ${token}`) {
|
|
58
|
+
problem(response, 401, "AUTH_REQUIRED", "Supply the configured Community Runtime token.");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const participantId = String(request.headers["x-jentra-test-participant"] ?? "local-user");
|
|
62
|
+
if (url.pathname === "/" && request.method === "GET") {
|
|
63
|
+
html(response, dashboard(store.read()));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (url.pathname === "/community/projects" && request.method === "POST") {
|
|
67
|
+
const form = await formBody(request);
|
|
68
|
+
await createProject(store, {
|
|
69
|
+
name: requiredFormValue(form, "name"),
|
|
70
|
+
source: form.get("source") ?? "NEW_PROJECT",
|
|
71
|
+
participantId,
|
|
72
|
+
});
|
|
73
|
+
redirect(response, "/#projects");
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (url.pathname === "/community/journeys" && request.method === "POST") {
|
|
77
|
+
const form = await formBody(request);
|
|
78
|
+
await createJourney(store, {
|
|
79
|
+
projectId: requiredFormValue(form, "projectId"),
|
|
80
|
+
outcome: requiredFormValue(form, "outcome"),
|
|
81
|
+
workKind: form.get("workKind") ?? "GENERAL",
|
|
82
|
+
autonomy: form.get("autonomy") ?? "BALANCED",
|
|
83
|
+
layer: form.get("layer") === "QUICK_TASK" ? "QUICK_TASK" : "MANAGED_JOURNEY",
|
|
84
|
+
participantId,
|
|
85
|
+
});
|
|
86
|
+
redirect(response, "/#journeys");
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (url.pathname === "/v1/projects" && request.method === "POST") {
|
|
90
|
+
const input = ProjectCreateRequestSchema.parse(await body(request));
|
|
91
|
+
const project = await createProject(store, { ...input, participantId });
|
|
92
|
+
json(response, 201, project);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const projectMatch = /^\/v1\/projects\/([^/]+)$/u.exec(url.pathname);
|
|
96
|
+
if (projectMatch && request.method === "GET") {
|
|
97
|
+
entity(response, store.read().projects[decodeURIComponent(projectMatch[1])], "PROJECT_NOT_FOUND");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const collaborationMatch = /^\/v1\/projects\/([^/]+)\/collaboration$/u.exec(url.pathname);
|
|
101
|
+
if (collaborationMatch && request.method === "GET") {
|
|
102
|
+
const project = store.read().projects[decodeURIComponent(collaborationMatch[1])];
|
|
103
|
+
if (!project) {
|
|
104
|
+
problem(response, 404, "PROJECT_NOT_FOUND", "Project not found.");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const journeys = Object.values(store.read().journeys).filter((item) => item.projectId === project.id);
|
|
108
|
+
json(response, 200, {
|
|
109
|
+
project,
|
|
110
|
+
journeys: journeys.map(summary),
|
|
111
|
+
authority: { mode: "OWNER_CONTROLLED", deliveryRequiresExplicitCommand: true },
|
|
112
|
+
capabilities: ["local-coordination", "mcp", "cli", "sdk", "local-checks"],
|
|
113
|
+
});
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const projectPeople = /^\/v1\/projects\/([^/]+)\/people-agents$/u.exec(url.pathname);
|
|
117
|
+
if (projectPeople && request.method === "GET") {
|
|
118
|
+
entity(response, {
|
|
119
|
+
participants: store.read().projects[decodeURIComponent(projectPeople[1])]?.participants ?? [],
|
|
120
|
+
}, "PROJECT_NOT_FOUND");
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const journeyStart = /^\/v1\/projects\/([^/]+)\/journeys$/u.exec(url.pathname);
|
|
124
|
+
if (journeyStart && request.method === "POST") {
|
|
125
|
+
const projectId = decodeURIComponent(journeyStart[1]);
|
|
126
|
+
if (!store.read().projects[projectId]) {
|
|
127
|
+
problem(response, 404, "PROJECT_NOT_FOUND", "Project not found.");
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const input = ProjectJourneyStartRequestSchema.parse(await body(request));
|
|
131
|
+
const journey = await createJourney(store, {
|
|
132
|
+
journeyId: input.journeyId,
|
|
133
|
+
projectId,
|
|
134
|
+
layer: input.layer,
|
|
135
|
+
outcome: input.answers.outcome,
|
|
136
|
+
workKind: input.answers.workKind,
|
|
137
|
+
autonomy: input.answers.autonomy,
|
|
138
|
+
participantId,
|
|
139
|
+
});
|
|
140
|
+
json(response, 201, journey);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const journeyMatch = /^\/v1\/journeys\/([^/]+)$/u.exec(url.pathname);
|
|
144
|
+
if (journeyMatch && request.method === "GET") {
|
|
145
|
+
const journey = findJourney(store, journeyMatch[1]);
|
|
146
|
+
if (journey)
|
|
147
|
+
json(response, 200, { state: journey, events: journey.events });
|
|
148
|
+
else
|
|
149
|
+
problem(response, 404, "JOURNEY_NOT_FOUND", "Journey not found.");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const viewMatch = /^\/v1\/journeys\/([^/]+)\/(experience|change-review|people-agents)$/u.exec(url.pathname);
|
|
153
|
+
if (viewMatch && request.method === "GET") {
|
|
154
|
+
const journey = findJourney(store, viewMatch[1]);
|
|
155
|
+
if (!journey) {
|
|
156
|
+
problem(response, 404, "JOURNEY_NOT_FOUND", "Journey not found.");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
json(response, 200, viewMatch[2] === "experience"
|
|
160
|
+
? context(journey)
|
|
161
|
+
: viewMatch[2] === "change-review"
|
|
162
|
+
? review(journey)
|
|
163
|
+
: { participants: journey.participants });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const commandMatch = /^\/v1\/journeys\/([^/]+)\/commands$/u.exec(url.pathname);
|
|
167
|
+
if (commandMatch && request.method === "POST") {
|
|
168
|
+
const journey = findJourney(store, commandMatch[1]);
|
|
169
|
+
if (!journey) {
|
|
170
|
+
problem(response, 404, "JOURNEY_NOT_FOUND", "Journey not found.");
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const command = CommandEnvelopeSchema.parse(await body(request));
|
|
174
|
+
if (command.journeyId !== journey.id) {
|
|
175
|
+
problem(response, 400, "JOURNEY_MISMATCH", "Command Journey does not match the route.");
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const existing = journey.commands[command.idempotencyKey];
|
|
179
|
+
if (existing) {
|
|
180
|
+
json(response, 200, existing);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (command.aggregateVersionExpected !== "ANY_ALLOWED" &&
|
|
184
|
+
command.aggregateVersionExpected !== journey.version) {
|
|
185
|
+
problem(response, 409, "VERSION_CONFLICT", "Read current context and retry with its version.", journey.version);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const receipt = await applyCommand(store, journey.id, command);
|
|
189
|
+
json(response, 202, receipt);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
problem(response, 404, "NOT_FOUND", "Route not found.");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
problem(response, 400, "INVALID_REQUEST", error instanceof Error ? error.message : String(error));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async function createProject(store, input) {
|
|
201
|
+
const id = input.projectId ?? randomUUID();
|
|
202
|
+
return store.change((state) => (state.projects[id] ??= {
|
|
203
|
+
id,
|
|
204
|
+
name: input.name,
|
|
205
|
+
source: input.source,
|
|
206
|
+
createdAt: now(),
|
|
207
|
+
participants: [human(input.participantId)],
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
async function createJourney(store, input) {
|
|
211
|
+
if (!store.read().projects[input.projectId])
|
|
212
|
+
throw new Error("Project not found.");
|
|
213
|
+
const id = input.journeyId ?? randomUUID();
|
|
214
|
+
return store.change((state) => (state.journeys[id] ??= {
|
|
215
|
+
id,
|
|
216
|
+
projectId: input.projectId,
|
|
217
|
+
layer: input.layer,
|
|
218
|
+
outcome: input.outcome,
|
|
219
|
+
workKind: input.workKind,
|
|
220
|
+
autonomy: input.autonomy,
|
|
221
|
+
version: 1,
|
|
222
|
+
status: "ACTIVE",
|
|
223
|
+
createdAt: now(),
|
|
224
|
+
participants: [human(input.participantId)],
|
|
225
|
+
events: [
|
|
226
|
+
{
|
|
227
|
+
id: randomUUID(),
|
|
228
|
+
sequence: 1,
|
|
229
|
+
type: "JourneyStarted",
|
|
230
|
+
at: now(),
|
|
231
|
+
actorId: input.participantId,
|
|
232
|
+
payload: { outcome: input.outcome },
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
commands: {},
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
async function applyCommand(store, journeyId, command) {
|
|
239
|
+
return store.change((state) => {
|
|
240
|
+
const journey = state.journeys[journeyId];
|
|
241
|
+
journey.version += 1;
|
|
242
|
+
const event = {
|
|
243
|
+
id: randomUUID(),
|
|
244
|
+
sequence: journey.events.length + 1,
|
|
245
|
+
type: command.commandType,
|
|
246
|
+
at: now(),
|
|
247
|
+
actorId: command.actor.participantId,
|
|
248
|
+
payload: command.payload,
|
|
249
|
+
};
|
|
250
|
+
journey.events.push(event);
|
|
251
|
+
if (!journey.participants.some((item) => item.id === command.actor.participantId))
|
|
252
|
+
journey.participants.push({
|
|
253
|
+
id: command.actor.participantId,
|
|
254
|
+
displayName: command.actor.participantId,
|
|
255
|
+
kind: command.actor.runtimeId ? "AGENT" : "HUMAN",
|
|
256
|
+
joinedAt: now(),
|
|
257
|
+
});
|
|
258
|
+
if (command.commandType === "CompleteJourney")
|
|
259
|
+
journey.status = "COMPLETED";
|
|
260
|
+
const receipt = {
|
|
261
|
+
commandId: command.commandId,
|
|
262
|
+
idempotencyKey: command.idempotencyKey,
|
|
263
|
+
payloadHash: command.payloadHash,
|
|
264
|
+
status: "ACCEPTED",
|
|
265
|
+
aggregateVersion: journey.version,
|
|
266
|
+
lastSequence: event.sequence,
|
|
267
|
+
result: { eventId: event.id },
|
|
268
|
+
};
|
|
269
|
+
journey.commands[command.idempotencyKey] = receipt;
|
|
270
|
+
return receipt;
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
const context = (journey) => ({
|
|
274
|
+
edition: "community",
|
|
275
|
+
journey: summary(journey),
|
|
276
|
+
direction: { revision: journey.version, outcome: journey.outcome, current: true },
|
|
277
|
+
assignments: journey.events.filter((item) => /assign/i.test(item.type)),
|
|
278
|
+
decisions: journey.events.filter((item) => /decid|accept|reject/i.test(item.type)),
|
|
279
|
+
evidence: journey.events.filter((item) => /evidence|check|result|contribution/i.test(item.type)),
|
|
280
|
+
recentActivity: journey.events.slice(-20),
|
|
281
|
+
authority: { autonomy: journey.autonomy, consequentialActionsRequireExplicitCommand: true },
|
|
282
|
+
});
|
|
283
|
+
const review = (journey) => ({
|
|
284
|
+
journeyId: journey.id,
|
|
285
|
+
status: journey.status,
|
|
286
|
+
directionRevision: journey.version,
|
|
287
|
+
proposedChanges: journey.events.filter((item) => /contribution|result|change/i.test(item.type)),
|
|
288
|
+
assurance: journey.events.filter((item) => /check|verify|assurance/i.test(item.type)),
|
|
289
|
+
decisions: journey.events.filter((item) => /decid|accept|reject/i.test(item.type)),
|
|
290
|
+
deliveryReady: journey.status === "COMPLETED",
|
|
291
|
+
});
|
|
292
|
+
const summary = (journey) => ({
|
|
293
|
+
id: journey.id,
|
|
294
|
+
projectId: journey.projectId,
|
|
295
|
+
outcome: journey.outcome,
|
|
296
|
+
workKind: journey.workKind,
|
|
297
|
+
autonomy: journey.autonomy,
|
|
298
|
+
layer: journey.layer,
|
|
299
|
+
status: journey.status,
|
|
300
|
+
version: journey.version,
|
|
301
|
+
createdAt: journey.createdAt,
|
|
302
|
+
});
|
|
303
|
+
const human = (id) => ({
|
|
304
|
+
id,
|
|
305
|
+
displayName: id,
|
|
306
|
+
kind: "HUMAN",
|
|
307
|
+
joinedAt: now(),
|
|
308
|
+
});
|
|
309
|
+
const now = () => new Date().toISOString();
|
|
310
|
+
const findJourney = (store, encoded) => store.read().journeys[decodeURIComponent(encoded)];
|
|
311
|
+
async function body(request) {
|
|
312
|
+
const chunks = [];
|
|
313
|
+
let size = 0;
|
|
314
|
+
for await (const chunk of request) {
|
|
315
|
+
const value = typeof chunk === "string" ? Buffer.from(chunk) : new Uint8Array(chunk);
|
|
316
|
+
size += value.byteLength;
|
|
317
|
+
if (size > 1_000_000)
|
|
318
|
+
throw new Error("Request body exceeds 1 MB.");
|
|
319
|
+
chunks.push(value);
|
|
320
|
+
}
|
|
321
|
+
return JSON.parse(Buffer.concat(chunks).toString("utf8") || "{}");
|
|
322
|
+
}
|
|
323
|
+
async function formBody(request) {
|
|
324
|
+
const value = await rawBody(request);
|
|
325
|
+
return new URLSearchParams(value);
|
|
326
|
+
}
|
|
327
|
+
async function rawBody(request) {
|
|
328
|
+
const chunks = [];
|
|
329
|
+
let size = 0;
|
|
330
|
+
for await (const chunk of request) {
|
|
331
|
+
const value = typeof chunk === "string" ? Buffer.from(chunk) : new Uint8Array(chunk);
|
|
332
|
+
size += value.byteLength;
|
|
333
|
+
if (size > 1_000_000)
|
|
334
|
+
throw new Error("Request body exceeds 1 MB.");
|
|
335
|
+
chunks.push(value);
|
|
336
|
+
}
|
|
337
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
338
|
+
}
|
|
339
|
+
function requiredFormValue(form, name) {
|
|
340
|
+
const value = form.get(name)?.trim();
|
|
341
|
+
if (!value)
|
|
342
|
+
throw new Error(`${name} is required.`);
|
|
343
|
+
return value;
|
|
344
|
+
}
|
|
345
|
+
function json(response, status, value) {
|
|
346
|
+
response.writeHead(status, {
|
|
347
|
+
"content-type": "application/json; charset=utf-8",
|
|
348
|
+
"cache-control": "no-store",
|
|
349
|
+
});
|
|
350
|
+
response.end(JSON.stringify(value));
|
|
351
|
+
}
|
|
352
|
+
function html(response, value) {
|
|
353
|
+
response.writeHead(200, {
|
|
354
|
+
"content-type": "text/html; charset=utf-8",
|
|
355
|
+
"content-security-policy": "default-src 'none'; style-src 'unsafe-inline'; form-action 'self'; base-uri 'none'",
|
|
356
|
+
});
|
|
357
|
+
response.end(value);
|
|
358
|
+
}
|
|
359
|
+
function redirect(response, location) {
|
|
360
|
+
response.writeHead(303, { location, "cache-control": "no-store" });
|
|
361
|
+
response.end();
|
|
362
|
+
}
|
|
363
|
+
function entity(response, value, code) {
|
|
364
|
+
if (value)
|
|
365
|
+
json(response, 200, value);
|
|
366
|
+
else
|
|
367
|
+
problem(response, 404, code, "Resource not found.");
|
|
368
|
+
}
|
|
369
|
+
function problem(response, status, code, messagePlain, currentVersion) {
|
|
370
|
+
json(response, status, {
|
|
371
|
+
code,
|
|
372
|
+
messagePlain,
|
|
373
|
+
...(currentVersion === undefined ? {} : { currentVersion }),
|
|
374
|
+
retryClass: status === 409 ? "REREAD_REQUIRED" : status >= 500 ? "LATER" : "USER_ACTION",
|
|
375
|
+
remediationActions: [messagePlain],
|
|
376
|
+
correlationId: randomUUID(),
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
function dashboard(state) {
|
|
380
|
+
const projects = Object.values(state.projects);
|
|
381
|
+
const journeys = Object.values(state.journeys);
|
|
382
|
+
const escape = (value) => value.replace(/[&<>"']/gu, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]);
|
|
383
|
+
const projectOptions = projects
|
|
384
|
+
.map((project) => `<option value="${escape(project.id)}">${escape(project.name)}</option>`)
|
|
385
|
+
.join("");
|
|
386
|
+
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>:root{color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:#111b34;color:#eef4ff;font:16px/1.55 system-ui}main{max-width:1040px;margin:auto;padding:clamp(42px,8vw,90px) 24px}small,.muted{color:#a9b9d5}h1{font-size:clamp(2.6rem,8vw,5.5rem);line-height:.95;margin:.2em 0}h2{margin-top:52px}.grid,.actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:16px}.card,form{border:1px solid #526b96;border-radius:16px;padding:20px;background:#182746}.tag{color:#ff9a7d;font-size:.78rem;font-weight:700;letter-spacing:.06em}code{background:#0a1226;padding:3px 6px;border-radius:5px}label{display:grid;gap:6px;margin:0 0 14px;font-size:.85rem;color:#c7d3e7}input,select,button{width:100%;min-height:43px;border:1px solid #7188b4;border-radius:8px;padding:9px 11px;background:#111b34;color:#fff;font:inherit}button{border-color:#ff9a7d;background:#f08064;color:#101a32;font-weight:750;cursor:pointer}.journey-form[aria-disabled=true]{opacity:.55}.id{display:block;overflow-wrap:anywhere}a{color:#b9d2ff}@media(max-width:600px){main{padding-inline:18px}.actions{grid-template-columns:1fr}}</style></head><body><main><small>LOCAL COORDINATION RUNTIME</small><h1>Jentra Community</h1><p class="muted">Coordinate people and agents locally. Your Projects, Journeys and context stay in <code>.jentra/community.json</code>.</p><section class="actions" aria-label="Create work"><form method="post" action="/community/projects"><h2>Create a Project</h2><label>Project name<input name="name" required maxlength="160" placeholder="Research launch plan"></label><label>Starting point<select name="source"><option value="NEW_PROJECT">New project</option><option value="EXISTING_REPOSITORY">Existing repository</option><option value="FILES">Files</option></select></label><button type="submit">Create Project</button></form><form class="journey-form" method="post" action="/community/journeys" ${projects.length === 0 ? 'aria-disabled="true"' : ""}><h2>Start a Journey</h2><label>Project<select name="projectId" required ${projects.length === 0 ? "disabled" : ""}>${projectOptions}</select></label><label>Outcome<input name="outcome" required maxlength="4000" placeholder="What should be true when the work is done?" ${projects.length === 0 ? "disabled" : ""}></label><label>Work kind<select name="workKind" ${projects.length === 0 ? "disabled" : ""}><option>GENERAL</option><option>SOFTWARE</option><option>RESEARCH</option><option>MARKETING</option><option>OPERATIONS</option><option>CREATIVE</option></select></label><label>Structure<select name="layer" ${projects.length === 0 ? "disabled" : ""}><option value="MANAGED_JOURNEY">Managed Journey</option><option value="QUICK_TASK">Quick Task</option></select></label><button type="submit" ${projects.length === 0 ? "disabled" : ""}>Start Journey</button>${projects.length === 0 ? '<p class="muted">Create a Project first.</p>' : ""}</form></section><section id="projects"><h2>Projects</h2><div class="grid">${projects.map((p) => `<article class="card"><span class="tag">PROJECT</span><h3>${escape(p.name)}</h3><small class="id">${escape(p.id)}</small></article>`).join("") || '<p class="muted">No Projects yet.</p>'}</div></section><section id="journeys"><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 class="id">${escape(j.id)}</small></article>`).join("") || '<p class="muted">No Journeys yet.</p>'}</div></section><section><h2>Connect an agent</h2><p class="muted">Point the public MCP server at <code>http://127.0.0.1:4317</code>. Agents can then read current context and submit versioned commands.</p></section></main></body></html>`;
|
|
387
|
+
}
|
|
388
|
+
async function main() {
|
|
389
|
+
const command = process.argv[2] ?? "start";
|
|
390
|
+
if (command === "init") {
|
|
391
|
+
const path = resolve(process.env.JENTRA_COMMUNITY_DATA ?? ".jentra/community.json");
|
|
392
|
+
const store = new Store(path);
|
|
393
|
+
await store.load();
|
|
394
|
+
await store.change(() => undefined);
|
|
395
|
+
console.log(`Initialized ${path}`);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (command === "start") {
|
|
399
|
+
const runtime = await startCommunityRuntime();
|
|
400
|
+
console.log(`Jentra Community Runtime: ${runtime.url}\nData: ${runtime.dataFile}`);
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
console.error("Usage: jentra-community [init|start]");
|
|
404
|
+
process.exitCode = 2;
|
|
405
|
+
}
|
|
406
|
+
if (process.argv[1] &&
|
|
407
|
+
resolve(process.argv[1]) === resolve(new URL(import.meta.url).pathname.replace(/^\/(.:)/u, "$1")))
|
|
408
|
+
void main().catch((error) => {
|
|
409
|
+
console.error(error);
|
|
410
|
+
process.exitCode = 1;
|
|
411
|
+
});
|
|
412
|
+
//# 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.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
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
|
+
}
|