@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.
Files changed (80) hide show
  1. package/SPEC.md +29 -11
  2. package/dist/Paths.d.ts +1 -0
  3. package/dist/Paths.d.ts.map +1 -1
  4. package/dist/Paths.js +5 -0
  5. package/dist/Paths.js.map +1 -1
  6. package/dist/content/edited-span.d.ts +2 -0
  7. package/dist/content/edited-span.d.ts.map +1 -0
  8. package/dist/content/edited-span.js +33 -0
  9. package/dist/content/edited-span.js.map +1 -0
  10. package/dist/content/index.d.ts +1 -0
  11. package/dist/content/index.d.ts.map +1 -1
  12. package/dist/content/index.js +1 -0
  13. package/dist/content/index.js.map +1 -1
  14. package/dist/core/Engine.d.ts +5 -0
  15. package/dist/core/Engine.d.ts.map +1 -1
  16. package/dist/core/Engine.js +153 -11
  17. package/dist/core/Engine.js.map +1 -1
  18. package/dist/core/ExecutorRegistry.d.ts +9 -1
  19. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  20. package/dist/core/ExecutorRegistry.js +21 -28
  21. package/dist/core/ExecutorRegistry.js.map +1 -1
  22. package/dist/core/SchemeRegistry.d.ts +2 -0
  23. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  24. package/dist/core/SchemeRegistry.js +52 -0
  25. package/dist/core/SchemeRegistry.js.map +1 -1
  26. package/dist/core/git-membership.d.ts.map +1 -1
  27. package/dist/core/git-membership.js +69 -18
  28. package/dist/core/git-membership.js.map +1 -1
  29. package/dist/core/git-state.d.ts +15 -0
  30. package/dist/core/git-state.d.ts.map +1 -0
  31. package/dist/core/git-state.js +65 -0
  32. package/dist/core/git-state.js.map +1 -0
  33. package/dist/core/packet-wire.d.ts +1 -0
  34. package/dist/core/packet-wire.d.ts.map +1 -1
  35. package/dist/core/packet-wire.js +27 -7
  36. package/dist/core/packet-wire.js.map +1 -1
  37. package/dist/core/scheme-types.d.ts +9 -0
  38. package/dist/core/scheme-types.d.ts.map +1 -1
  39. package/dist/schemes/Exec.d.ts +4 -0
  40. package/dist/schemes/Exec.d.ts.map +1 -1
  41. package/dist/schemes/Exec.js +17 -1
  42. package/dist/schemes/Exec.js.map +1 -1
  43. package/dist/schemes/File.d.ts +2 -11
  44. package/dist/schemes/File.d.ts.map +1 -1
  45. package/dist/schemes/File.js +38 -7
  46. package/dist/schemes/File.js.map +1 -1
  47. package/dist/schemes/Log.d.ts +2 -10
  48. package/dist/schemes/Log.d.ts.map +1 -1
  49. package/dist/schemes/Log.js.map +1 -1
  50. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  51. package/dist/schemes/_entry-manifest.js +5 -1
  52. package/dist/schemes/_entry-manifest.js.map +1 -1
  53. package/dist/schemes/_entry-ops.d.ts +1 -0
  54. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  55. package/dist/schemes/_entry-ops.js +8 -2
  56. package/dist/schemes/_entry-ops.js.map +1 -1
  57. package/dist/server/ClientConnection.d.ts.map +1 -1
  58. package/dist/server/ClientConnection.js +5 -2
  59. package/dist/server/ClientConnection.js.map +1 -1
  60. package/dist/server/Daemon.d.ts.map +1 -1
  61. package/dist/server/Daemon.js +10 -0
  62. package/dist/server/Daemon.js.map +1 -1
  63. package/dist/server/MethodRegistry.d.ts +5 -0
  64. package/dist/server/MethodRegistry.d.ts.map +1 -1
  65. package/dist/server/MethodRegistry.js.map +1 -1
  66. package/dist/server/methods/loop_run.d.ts.map +1 -1
  67. package/dist/server/methods/loop_run.js +1 -0
  68. package/dist/server/methods/loop_run.js.map +1 -1
  69. package/dist/server/methods/session_attach.d.ts.map +1 -1
  70. package/dist/server/methods/session_attach.js +0 -3
  71. package/dist/server/methods/session_attach.js.map +1 -1
  72. package/dist/server/methods/session_constraints.d.ts +6 -0
  73. package/dist/server/methods/session_constraints.d.ts.map +1 -0
  74. package/dist/server/methods/session_constraints.js +63 -0
  75. package/dist/server/methods/session_constraints.js.map +1 -0
  76. package/dist/server/methods/session_create.d.ts.map +1 -1
  77. package/dist/server/methods/session_create.js +1 -3
  78. package/dist/server/methods/session_create.js.map +1 -1
  79. package/migrations/0000-00-00.01_schema.sql +35 -1
  80. 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;CAwClD"}
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,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACjE,CAAC;gBACD,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"}
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,6 @@
1
+ import type MethodRegistry from "../MethodRegistry.ts";
2
+ export default class SessionConstraintsMethod {
3
+ #private;
4
+ static register(registry: MethodRegistry): void;
5
+ }
6
+ //# sourceMappingURL=session_constraints.d.ts.map
@@ -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;CAmDlD"}
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,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACjE,CAAC;gBACD,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,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"}
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.15.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.0",
48
- "@plurnk/plurnk-execs-node": "0.2.1",
49
- "@plurnk/plurnk-execs-python": "0.2.1",
50
- "@plurnk/plurnk-execs-search": "0.2.1",
51
- "@plurnk/plurnk-execs-sh": "0.2.1",
52
- "@plurnk/plurnk-execs-sqlite": "0.1.1",
53
- "@plurnk/plurnk-grammar": "0.26.0",
54
- "@plurnk/plurnk-mimetypes": "0.15.4",
55
- "@plurnk/plurnk-providers": "0.1.8",
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"