@plurnk/plurnk-service 0.15.0 → 0.17.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/SPEC.md +29 -11
- package/dist/Paths.d.ts +1 -0
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +5 -0
- package/dist/Paths.js.map +1 -1
- package/dist/content/edited-span.d.ts +2 -0
- package/dist/content/edited-span.d.ts.map +1 -0
- package/dist/content/edited-span.js +33 -0
- package/dist/content/edited-span.js.map +1 -0
- package/dist/content/index.d.ts +1 -0
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +1 -0
- package/dist/content/index.js.map +1 -1
- package/dist/core/Engine.d.ts +5 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +153 -11
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +9 -1
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +21 -28
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +2 -0
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +52 -0
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +69 -18
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.d.ts +15 -0
- package/dist/core/git-state.d.ts.map +1 -0
- package/dist/core/git-state.js +65 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/packet-wire.d.ts +1 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +27 -7
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/scheme-types.d.ts +9 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/schemes/Exec.d.ts +4 -0
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +17 -1
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts +2 -11
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +38 -7
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +2 -10
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +5 -1
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +1 -0
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +8 -2
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/server/ClientConnection.d.ts.map +1 -1
- package/dist/server/ClientConnection.js +5 -2
- package/dist/server/ClientConnection.js.map +1 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +10 -0
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/MethodRegistry.d.ts +5 -0
- package/dist/server/MethodRegistry.d.ts.map +1 -1
- package/dist/server/MethodRegistry.js.map +1 -1
- package/dist/server/methods/loop_run.d.ts.map +1 -1
- package/dist/server/methods/loop_run.js +1 -0
- package/dist/server/methods/loop_run.js.map +1 -1
- package/dist/server/methods/session_attach.d.ts.map +1 -1
- package/dist/server/methods/session_attach.js +0 -3
- package/dist/server/methods/session_attach.js.map +1 -1
- package/dist/server/methods/session_constraints.d.ts +6 -0
- package/dist/server/methods/session_constraints.d.ts.map +1 -0
- package/dist/server/methods/session_constraints.js +63 -0
- package/dist/server/methods/session_constraints.js.map +1 -0
- package/dist/server/methods/session_create.d.ts.map +1 -1
- package/dist/server/methods/session_create.js +1 -3
- package/dist/server/methods/session_create.js.map +1 -1
- package/migrations/0000-00-00.01_schema.sql +35 -1
- package/package.json +11 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_attach.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_attach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"session_attach.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_attach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAqClD"}
|
|
@@ -3,9 +3,6 @@ export default class SessionAttachMethod {
|
|
|
3
3
|
static register(registry) {
|
|
4
4
|
registry.registerMethod("session.attach", {
|
|
5
5
|
handler: async (params, ctx) => {
|
|
6
|
-
if (ctx.session !== null) {
|
|
7
|
-
throw new Error("connection already has a session attached");
|
|
8
|
-
}
|
|
9
6
|
const p = params;
|
|
10
7
|
if (typeof p.id !== "number") {
|
|
11
8
|
throw new Error("session.attach requires params.id: number");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_attach.js","sourceRoot":"","sources":["../../../src/server/methods/session_attach.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE;YACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,
|
|
1
|
+
{"version":3,"file":"session_attach.js","sourceRoot":"","sources":["../../../src/server/methods/session_attach.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE;YACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,MAAmF,CAAC;gBAC9F,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACvD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC9D,CAAC;gBACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBACvF,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;gBAClC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/G,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO;oBACH,EAAE,EAAE,QAAQ,CAAC,SAAS;oBACtB,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAC1B,cAAc,EAAE,QAAQ,CAAC,cAAc;oBACvC,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAClC,CAAC;YACN,CAAC;YACD,WAAW,EAAE,mTAAmT;YAChU,MAAM,EAAE;gBACJ,EAAE,EAAE,kCAAkC;gBACtC,KAAK,EAAE,oEAAoE;gBAC3E,OAAO,EAAE,8EAA8E;gBACvF,OAAO,EAAE,kFAAkF;aAC9F;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session_constraints.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_constraints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AASvD,MAAM,CAAC,OAAO,OAAO,wBAAwB;;IACzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAqDlD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import GitMembership from "../../core/git-membership.js";
|
|
2
|
+
// Client tooling for the SPEC §14.3 constraint overlay — the supersede over git
|
|
3
|
+
// membership. `constrain`/`unconstrain` mutate session_constraints then re-resolve
|
|
4
|
+
// membership so the change lands now, not next turn; `constraints` lists them.
|
|
5
|
+
const EFFECTS = new Set(["add", "ignore", "read-only"]);
|
|
6
|
+
export default class SessionConstraintsMethod {
|
|
7
|
+
static register(registry) {
|
|
8
|
+
registry.registerMethod("session.constrain", {
|
|
9
|
+
handler: async (params, ctx) => {
|
|
10
|
+
if (ctx.session === null)
|
|
11
|
+
throw new Error("session.constrain requires an attached session");
|
|
12
|
+
const { effect, glob } = SessionConstraintsMethod.#parse(params, "session.constrain");
|
|
13
|
+
await ctx.db.crud_insert_session_constraint.run({ session_id: ctx.session.sessionId, effect, glob });
|
|
14
|
+
await GitMembership.resolveGitMembership(ctx.db, ctx.session.sessionId, undefined);
|
|
15
|
+
return { effect, glob };
|
|
16
|
+
},
|
|
17
|
+
description: "Add a workspace membership constraint (SPEC §14.3 overlay): `add` admits files git misses (the sole source when git is absent), `ignore` drops tracked matches, `read-only` admits a member for read but refuses edits. Takes effect immediately.",
|
|
18
|
+
params: {
|
|
19
|
+
effect: "string — one of: add | ignore | read-only",
|
|
20
|
+
glob: "string — node:path glob matched against workspace-relative paths",
|
|
21
|
+
},
|
|
22
|
+
requiresInit: true,
|
|
23
|
+
});
|
|
24
|
+
registry.registerMethod("session.unconstrain", {
|
|
25
|
+
handler: async (params, ctx) => {
|
|
26
|
+
if (ctx.session === null)
|
|
27
|
+
throw new Error("session.unconstrain requires an attached session");
|
|
28
|
+
const { effect, glob } = SessionConstraintsMethod.#parse(params, "session.unconstrain");
|
|
29
|
+
await ctx.db.crud_delete_session_constraint.run({ session_id: ctx.session.sessionId, effect, glob });
|
|
30
|
+
await GitMembership.resolveGitMembership(ctx.db, ctx.session.sessionId, undefined);
|
|
31
|
+
return { effect, glob };
|
|
32
|
+
},
|
|
33
|
+
description: "Remove a workspace membership constraint — the inverse of session.constrain (the `remove` verb is deleting the constraint row). Takes effect immediately.",
|
|
34
|
+
params: {
|
|
35
|
+
effect: "string — one of: add | ignore | read-only",
|
|
36
|
+
glob: "string — the glob to remove",
|
|
37
|
+
},
|
|
38
|
+
requiresInit: true,
|
|
39
|
+
});
|
|
40
|
+
registry.registerMethod("session.constraints", {
|
|
41
|
+
handler: async (_params, ctx) => {
|
|
42
|
+
if (ctx.session === null)
|
|
43
|
+
throw new Error("session.constraints requires an attached session");
|
|
44
|
+
const constraints = await ctx.db.crud_list_session_constraints.all({ session_id: ctx.session.sessionId });
|
|
45
|
+
return { constraints };
|
|
46
|
+
},
|
|
47
|
+
description: "List the workspace membership constraints on the attached session.",
|
|
48
|
+
params: {},
|
|
49
|
+
requiresInit: true,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
static #parse(params, method) {
|
|
53
|
+
const p = params;
|
|
54
|
+
if (typeof p.effect !== "string" || !EFFECTS.has(p.effect)) {
|
|
55
|
+
throw new Error(`${method}: effect must be one of add | ignore | read-only`);
|
|
56
|
+
}
|
|
57
|
+
if (typeof p.glob !== "string" || p.glob.length === 0) {
|
|
58
|
+
throw new Error(`${method}: glob must be a non-empty string`);
|
|
59
|
+
}
|
|
60
|
+
return { effect: p.effect, glob: p.glob };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=session_constraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session_constraints.js","sourceRoot":"","sources":["../../../src/server/methods/session_constraints.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_create.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"session_create.d.ts","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAiDlD"}
|
|
@@ -4,9 +4,6 @@ export default class SessionCreateMethod {
|
|
|
4
4
|
static register(registry) {
|
|
5
5
|
registry.registerMethod("session.create", {
|
|
6
6
|
handler: async (params, ctx) => {
|
|
7
|
-
if (ctx.session !== null) {
|
|
8
|
-
throw new Error("connection already has a session attached");
|
|
9
|
-
}
|
|
10
7
|
const p = params;
|
|
11
8
|
const projectRoot = p.projectRoot ?? null;
|
|
12
9
|
if (projectRoot !== null) {
|
|
@@ -31,6 +28,7 @@ export default class SessionCreateMethod {
|
|
|
31
28
|
});
|
|
32
29
|
return {
|
|
33
30
|
id: envelope.sessionId, name: envelope.sessionName,
|
|
31
|
+
runId: envelope.runId, runName: envelope.runName,
|
|
34
32
|
projectRoot: envelope.projectRoot, persona: envelope.sessionPersona,
|
|
35
33
|
};
|
|
36
34
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_create.js","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE;YACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,
|
|
1
|
+
{"version":3,"file":"session_create.js","sourceRoot":"","sources":["../../../src/server/methods/session_create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE;YACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,MAAiF,CAAC;gBAC5F,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;gBAC1C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;oBACvB,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC9D,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;oBACtF,CAAC;oBACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;oBAC5E,CAAC;gBACL,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;gBAClC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE;oBACjC,EAAE,EAAE,QAAQ,CAAC,SAAS;oBACtB,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAC1B,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,OAAO,EAAE,QAAQ,CAAC,cAAc;iBACnC,CAAC,CAAC;gBACH,OAAO;oBACH,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAClD,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO;oBAChD,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,cAAc;iBACtE,CAAC;YACN,CAAC;YACD,WAAW,EAAE,0QAA0Q;YACvR,MAAM,EAAE;gBACJ,IAAI,EAAE,oDAAoD;gBAC1D,WAAW,EAAE,oHAAoH;gBACjI,OAAO,EAAE,qIAAqI;aACjJ;SACJ,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,CAAC,iBAAiB,EAAE;YAC7C,WAAW,EAAE,qEAAqE;YAClF,MAAM,EAAE;gBACJ,EAAE,EAAE,qBAAqB;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,mEAAmE;gBAChF,OAAO,EAAE,iFAAiF;aAC7F;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -98,6 +98,11 @@ CREATE TABLE IF NOT EXISTS entries (
|
|
|
98
98
|
pathname TEXT NOT NULL,
|
|
99
99
|
params TEXT CHECK (params IS NULL OR json_valid(params)),
|
|
100
100
|
attributes TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(attributes)),
|
|
101
|
+
-- SPEC §14.3 — how a file member entered the curated surface. 'git' rows are
|
|
102
|
+
-- reconciled against `git ls-files − ignore` each turn (registered + un-registered
|
|
103
|
+
-- so entries == members); 'client'/'constraint' (model-created, add-glob) are not
|
|
104
|
+
-- git's to reclaim. NULL = not a file member (other schemes don't carry origin).
|
|
105
|
+
membership_origin TEXT CHECK (membership_origin IS NULL OR membership_origin IN ('git', 'client', 'constraint')),
|
|
101
106
|
CHECK ((scope = 'agent' AND session_id IS NULL)
|
|
102
107
|
OR (scope = 'session' AND session_id IS NOT NULL)),
|
|
103
108
|
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
@@ -150,7 +155,7 @@ CREATE TABLE IF NOT EXISTS log_entries (
|
|
|
150
155
|
-- NULL = the owning run itself (self), rendered without a run= label.
|
|
151
156
|
source TEXT,
|
|
152
157
|
|
|
153
|
-
op TEXT NOT NULL CHECK (op IN ('FIND', 'READ', 'EDIT', 'COPY', 'MOVE', 'OPEN', 'FOLD', 'SEND', 'EXEC')),
|
|
158
|
+
op TEXT NOT NULL CHECK (op IN ('FIND', 'READ', 'EDIT', 'COPY', 'MOVE', 'OPEN', 'FOLD', 'SEND', 'EXEC', 'KILL', 'PLAN')),
|
|
154
159
|
suffix TEXT NOT NULL DEFAULT '',
|
|
155
160
|
signal TEXT CHECK (signal IS NULL OR json_valid(signal)),
|
|
156
161
|
|
|
@@ -312,3 +317,32 @@ CREATE INDEX IF NOT EXISTS subscriptions_scheme_active
|
|
|
312
317
|
WHERE closed_at IS NULL;
|
|
313
318
|
|
|
314
319
|
CREATE INDEX IF NOT EXISTS subscriptions_opened_at ON subscriptions (opened_at);
|
|
320
|
+
|
|
321
|
+
-- INIT: run_watermarks
|
|
322
|
+
-- §14.5 environment-delta detection. Per (run, entry, channel): the content this
|
|
323
|
+
-- run last reconciled. First sight sets it silently (no delta); a later content
|
|
324
|
+
-- change materializes a delta-EDIT (the diff span, §14.6) and advances the mark.
|
|
325
|
+
-- plurnk:// derived entries (manifest/prompt) are excluded at the query, not here.
|
|
326
|
+
CREATE TABLE IF NOT EXISTS run_watermarks (
|
|
327
|
+
run_id INTEGER NOT NULL,
|
|
328
|
+
entry_id INTEGER NOT NULL,
|
|
329
|
+
channel TEXT NOT NULL,
|
|
330
|
+
content TEXT NOT NULL,
|
|
331
|
+
PRIMARY KEY (run_id, entry_id, channel),
|
|
332
|
+
FOREIGN KEY (run_id) REFERENCES runs(id) ON DELETE CASCADE,
|
|
333
|
+
FOREIGN KEY (entry_id) REFERENCES entries(id) ON DELETE CASCADE
|
|
334
|
+
) STRICT, WITHOUT ROWID;
|
|
335
|
+
|
|
336
|
+
-- INIT: session_constraints
|
|
337
|
+
-- SPEC §14.3 constraint overlay — the client's supersede over git membership.
|
|
338
|
+
-- Per (session, effect, glob): `add` (members git misses, resolved by a targeted
|
|
339
|
+
-- client-dictated scan), `ignore` (drop git-tracked matches), `read-only` (member
|
|
340
|
+
-- for read; File.edit rejects the write). git-absent, `add` rows are the sole
|
|
341
|
+
-- membership source. Composed at membership resolution; node:path.matchesGlob.
|
|
342
|
+
CREATE TABLE IF NOT EXISTS session_constraints (
|
|
343
|
+
session_id INTEGER NOT NULL,
|
|
344
|
+
effect TEXT NOT NULL CHECK (effect IN ('add', 'ignore', 'read-only')),
|
|
345
|
+
glob TEXT NOT NULL,
|
|
346
|
+
PRIMARY KEY (session_id, effect, glob),
|
|
347
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
348
|
+
) STRICT, WITHOUT ROWID;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk-service",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Plurnk agent runtime — the server / engine / core. Implements the @plurnk/plurnk-grammar contract.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,21 +44,17 @@
|
|
|
44
44
|
"prepare": "npm run build"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@plurnk/plurnk-execs": "0.4.
|
|
48
|
-
"@plurnk/plurnk-execs-
|
|
49
|
-
"@plurnk/plurnk-execs-
|
|
50
|
-
"@plurnk/plurnk-execs-search": "0.2.
|
|
51
|
-
"@plurnk/plurnk-execs-
|
|
52
|
-
"@plurnk/plurnk-execs-
|
|
53
|
-
"@plurnk/plurnk-grammar": "0.
|
|
54
|
-
"@plurnk/plurnk-mimetypes": "0.15.
|
|
55
|
-
"@plurnk/plurnk-providers": "0.
|
|
56
|
-
"@plurnk/plurnk-providers-cloudflare": "0.2.6",
|
|
57
|
-
"@plurnk/plurnk-providers-google": "0.2.7",
|
|
58
|
-
"@plurnk/plurnk-providers-ollama": "0.2.6",
|
|
59
|
-
"@plurnk/plurnk-providers-openrouter": "0.2.6",
|
|
60
|
-
"@plurnk/plurnk-providers-xai": "0.2.6",
|
|
47
|
+
"@plurnk/plurnk-execs": "0.4.1",
|
|
48
|
+
"@plurnk/plurnk-execs-common": "0.2.0",
|
|
49
|
+
"@plurnk/plurnk-execs-git": "0.1.0",
|
|
50
|
+
"@plurnk/plurnk-execs-search": "0.2.2",
|
|
51
|
+
"@plurnk/plurnk-execs-sqlite": "0.1.2",
|
|
52
|
+
"@plurnk/plurnk-execs-wasm": "0.1.1",
|
|
53
|
+
"@plurnk/plurnk-grammar": "0.31.0",
|
|
54
|
+
"@plurnk/plurnk-mimetypes": "0.15.5",
|
|
55
|
+
"@plurnk/plurnk-providers": "0.2.0",
|
|
61
56
|
"@plurnk/plurnk-schemes": "0.4.4",
|
|
57
|
+
"@plurnk/plurnk-schemes-http": "0.1.0",
|
|
62
58
|
"@possumtech/sqlrite": "5.1.1",
|
|
63
59
|
"diff": "^9.0.0",
|
|
64
60
|
"ws": "^8.20.1"
|