@blxzer/cursor-trellis-core 0.5.0-beta.4 → 0.5.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 (197) hide show
  1. package/channel.d.ts +1 -0
  2. package/channel.js +1 -0
  3. package/index.d.ts +1 -0
  4. package/index.js +1 -0
  5. package/package.json +27 -47
  6. package/task.d.ts +1 -0
  7. package/task.js +1 -0
  8. package/testing.d.ts +1 -0
  9. package/testing.js +1 -0
  10. package/dist/channel/api/assert.d.ts +0 -3
  11. package/dist/channel/api/assert.d.ts.map +0 -1
  12. package/dist/channel/api/assert.js +0 -11
  13. package/dist/channel/api/assert.js.map +0 -1
  14. package/dist/channel/api/context.d.ts +0 -21
  15. package/dist/channel/api/context.d.ts.map +0 -1
  16. package/dist/channel/api/context.js +0 -99
  17. package/dist/channel/api/context.js.map +0 -1
  18. package/dist/channel/api/create.d.ts +0 -9
  19. package/dist/channel/api/create.d.ts.map +0 -1
  20. package/dist/channel/api/create.js +0 -104
  21. package/dist/channel/api/create.js.map +0 -1
  22. package/dist/channel/api/inbox.d.ts +0 -51
  23. package/dist/channel/api/inbox.d.ts.map +0 -1
  24. package/dist/channel/api/inbox.js +0 -176
  25. package/dist/channel/api/inbox.js.map +0 -1
  26. package/dist/channel/api/interrupt.d.ts +0 -31
  27. package/dist/channel/api/interrupt.d.ts.map +0 -1
  28. package/dist/channel/api/interrupt.js +0 -102
  29. package/dist/channel/api/interrupt.js.map +0 -1
  30. package/dist/channel/api/post-thread.d.ts +0 -14
  31. package/dist/channel/api/post-thread.d.ts.map +0 -1
  32. package/dist/channel/api/post-thread.js +0 -109
  33. package/dist/channel/api/post-thread.js.map +0 -1
  34. package/dist/channel/api/read.d.ts +0 -17
  35. package/dist/channel/api/read.d.ts.map +0 -1
  36. package/dist/channel/api/read.js +0 -44
  37. package/dist/channel/api/read.js.map +0 -1
  38. package/dist/channel/api/resolve.d.ts +0 -21
  39. package/dist/channel/api/resolve.d.ts.map +0 -1
  40. package/dist/channel/api/resolve.js +0 -28
  41. package/dist/channel/api/resolve.js.map +0 -1
  42. package/dist/channel/api/runtime.d.ts +0 -70
  43. package/dist/channel/api/runtime.d.ts.map +0 -1
  44. package/dist/channel/api/runtime.js +0 -11
  45. package/dist/channel/api/runtime.js.map +0 -1
  46. package/dist/channel/api/send.d.ts +0 -4
  47. package/dist/channel/api/send.d.ts.map +0 -1
  48. package/dist/channel/api/send.js +0 -52
  49. package/dist/channel/api/send.js.map +0 -1
  50. package/dist/channel/api/spawn.d.ts +0 -13
  51. package/dist/channel/api/spawn.d.ts.map +0 -1
  52. package/dist/channel/api/spawn.js +0 -54
  53. package/dist/channel/api/spawn.js.map +0 -1
  54. package/dist/channel/api/title.d.ts +0 -5
  55. package/dist/channel/api/title.d.ts.map +0 -1
  56. package/dist/channel/api/title.js +0 -40
  57. package/dist/channel/api/title.js.map +0 -1
  58. package/dist/channel/api/types.d.ts +0 -65
  59. package/dist/channel/api/types.d.ts.map +0 -1
  60. package/dist/channel/api/types.js +0 -2
  61. package/dist/channel/api/types.js.map +0 -1
  62. package/dist/channel/api/watch-channels.d.ts +0 -40
  63. package/dist/channel/api/watch-channels.d.ts.map +0 -1
  64. package/dist/channel/api/watch-channels.js +0 -143
  65. package/dist/channel/api/watch-channels.js.map +0 -1
  66. package/dist/channel/api/watch.d.ts +0 -11
  67. package/dist/channel/api/watch.d.ts.map +0 -1
  68. package/dist/channel/api/watch.js +0 -17
  69. package/dist/channel/api/watch.js.map +0 -1
  70. package/dist/channel/api/workers.d.ts +0 -69
  71. package/dist/channel/api/workers.d.ts.map +0 -1
  72. package/dist/channel/api/workers.js +0 -145
  73. package/dist/channel/api/workers.js.map +0 -1
  74. package/dist/channel/index.d.ts +0 -38
  75. package/dist/channel/index.d.ts.map +0 -1
  76. package/dist/channel/index.js +0 -23
  77. package/dist/channel/index.js.map +0 -1
  78. package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
  79. package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
  80. package/dist/channel/internal/store/channel-metadata.js +0 -94
  81. package/dist/channel/internal/store/channel-metadata.js.map +0 -1
  82. package/dist/channel/internal/store/delivery.d.ts +0 -27
  83. package/dist/channel/internal/store/delivery.d.ts.map +0 -1
  84. package/dist/channel/internal/store/delivery.js +0 -37
  85. package/dist/channel/internal/store/delivery.js.map +0 -1
  86. package/dist/channel/internal/store/events.d.ts +0 -215
  87. package/dist/channel/internal/store/events.d.ts.map +0 -1
  88. package/dist/channel/internal/store/events.js +0 -206
  89. package/dist/channel/internal/store/events.js.map +0 -1
  90. package/dist/channel/internal/store/filter.d.ts +0 -21
  91. package/dist/channel/internal/store/filter.d.ts.map +0 -1
  92. package/dist/channel/internal/store/filter.js +0 -75
  93. package/dist/channel/internal/store/filter.js.map +0 -1
  94. package/dist/channel/internal/store/inbox.d.ts +0 -17
  95. package/dist/channel/internal/store/inbox.d.ts.map +0 -1
  96. package/dist/channel/internal/store/inbox.js +0 -30
  97. package/dist/channel/internal/store/inbox.js.map +0 -1
  98. package/dist/channel/internal/store/lock.d.ts +0 -17
  99. package/dist/channel/internal/store/lock.d.ts.map +0 -1
  100. package/dist/channel/internal/store/lock.js +0 -88
  101. package/dist/channel/internal/store/lock.js.map +0 -1
  102. package/dist/channel/internal/store/paths.d.ts +0 -43
  103. package/dist/channel/internal/store/paths.d.ts.map +0 -1
  104. package/dist/channel/internal/store/paths.js +0 -233
  105. package/dist/channel/internal/store/paths.js.map +0 -1
  106. package/dist/channel/internal/store/schema.d.ts +0 -77
  107. package/dist/channel/internal/store/schema.d.ts.map +0 -1
  108. package/dist/channel/internal/store/schema.js +0 -127
  109. package/dist/channel/internal/store/schema.js.map +0 -1
  110. package/dist/channel/internal/store/seq.d.ts +0 -12
  111. package/dist/channel/internal/store/seq.d.ts.map +0 -1
  112. package/dist/channel/internal/store/seq.js +0 -133
  113. package/dist/channel/internal/store/seq.js.map +0 -1
  114. package/dist/channel/internal/store/thread-state.d.ts +0 -37
  115. package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
  116. package/dist/channel/internal/store/thread-state.js +0 -206
  117. package/dist/channel/internal/store/thread-state.js.map +0 -1
  118. package/dist/channel/internal/store/watch.d.ts +0 -10
  119. package/dist/channel/internal/store/watch.d.ts.map +0 -1
  120. package/dist/channel/internal/store/watch.js +0 -122
  121. package/dist/channel/internal/store/watch.js.map +0 -1
  122. package/dist/channel/internal/store/worker-state.d.ts +0 -56
  123. package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
  124. package/dist/channel/internal/store/worker-state.js +0 -220
  125. package/dist/channel/internal/store/worker-state.js.map +0 -1
  126. package/dist/index.d.ts +0 -3
  127. package/dist/index.d.ts.map +0 -1
  128. package/dist/index.js +0 -7
  129. package/dist/index.js.map +0 -1
  130. package/dist/task/adapter-middleware.d.ts +0 -118
  131. package/dist/task/adapter-middleware.d.ts.map +0 -1
  132. package/dist/task/adapter-middleware.js +0 -508
  133. package/dist/task/adapter-middleware.js.map +0 -1
  134. package/dist/task/contract-migrate.d.ts +0 -29
  135. package/dist/task/contract-migrate.d.ts.map +0 -1
  136. package/dist/task/contract-migrate.js +0 -207
  137. package/dist/task/contract-migrate.js.map +0 -1
  138. package/dist/task/full-quality.d.ts +0 -89
  139. package/dist/task/full-quality.d.ts.map +0 -1
  140. package/dist/task/full-quality.js +0 -379
  141. package/dist/task/full-quality.js.map +0 -1
  142. package/dist/task/index.d.ts +0 -31
  143. package/dist/task/index.d.ts.map +0 -1
  144. package/dist/task/index.js +0 -20
  145. package/dist/task/index.js.map +0 -1
  146. package/dist/task/kernel-cli.d.ts +0 -44
  147. package/dist/task/kernel-cli.d.ts.map +0 -1
  148. package/dist/task/kernel-cli.js +0 -287
  149. package/dist/task/kernel-cli.js.map +0 -1
  150. package/dist/task/kernel-contract.d.ts +0 -113
  151. package/dist/task/kernel-contract.d.ts.map +0 -1
  152. package/dist/task/kernel-contract.js +0 -332
  153. package/dist/task/kernel-contract.js.map +0 -1
  154. package/dist/task/kernel-store.d.ts +0 -99
  155. package/dist/task/kernel-store.d.ts.map +0 -1
  156. package/dist/task/kernel-store.js +0 -735
  157. package/dist/task/kernel-store.js.map +0 -1
  158. package/dist/task/kernel-surface.d.ts +0 -39
  159. package/dist/task/kernel-surface.d.ts.map +0 -1
  160. package/dist/task/kernel-surface.js +0 -73
  161. package/dist/task/kernel-surface.js.map +0 -1
  162. package/dist/task/lite-context-pack.d.ts +0 -71
  163. package/dist/task/lite-context-pack.d.ts.map +0 -1
  164. package/dist/task/lite-context-pack.js +0 -175
  165. package/dist/task/lite-context-pack.js.map +0 -1
  166. package/dist/task/ondemand-topology.d.ts +0 -108
  167. package/dist/task/ondemand-topology.d.ts.map +0 -1
  168. package/dist/task/ondemand-topology.js +0 -453
  169. package/dist/task/ondemand-topology.js.map +0 -1
  170. package/dist/task/p36-artifact-migrate.d.ts +0 -61
  171. package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
  172. package/dist/task/p36-artifact-migrate.js +0 -336
  173. package/dist/task/p36-artifact-migrate.js.map +0 -1
  174. package/dist/task/p36-wave-c.d.ts +0 -39
  175. package/dist/task/p36-wave-c.d.ts.map +0 -1
  176. package/dist/task/p36-wave-c.js +0 -100
  177. package/dist/task/p36-wave-c.js.map +0 -1
  178. package/dist/task/paths.d.ts +0 -37
  179. package/dist/task/paths.d.ts.map +0 -1
  180. package/dist/task/paths.js +0 -49
  181. package/dist/task/paths.js.map +0 -1
  182. package/dist/task/phase.d.ts +0 -27
  183. package/dist/task/phase.d.ts.map +0 -1
  184. package/dist/task/phase.js +0 -24
  185. package/dist/task/phase.js.map +0 -1
  186. package/dist/task/records.d.ts +0 -48
  187. package/dist/task/records.d.ts.map +0 -1
  188. package/dist/task/records.js +0 -100
  189. package/dist/task/records.js.map +0 -1
  190. package/dist/task/schema.d.ts +0 -77
  191. package/dist/task/schema.d.ts.map +0 -1
  192. package/dist/task/schema.js +0 -220
  193. package/dist/task/schema.js.map +0 -1
  194. package/dist/testing/index.d.ts +0 -2
  195. package/dist/testing/index.d.ts.map +0 -1
  196. package/dist/testing/index.js +0 -4
  197. package/dist/testing/index.js.map +0 -1
package/channel.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core/channel";
package/channel.js ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core/channel";
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core";
package/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core";
package/package.json CHANGED
@@ -1,72 +1,52 @@
1
1
  {
2
2
  "name": "@blxzer/cursor-trellis-core",
3
- "version": "0.5.0-beta.4",
4
- "description": "Trellis core SDK channel and task domain primitives consumed by the Trellis CLI and downstream Node services",
3
+ "version": "0.5.0",
4
+ "description": "Deprecated compatibility shim for @blxzer/pactile-core",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
6
+ "main": "./index.js",
7
+ "types": "./index.d.ts",
8
8
  "exports": {
9
9
  "./package.json": "./package.json",
10
10
  ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js",
13
- "default": "./dist/index.js"
11
+ "types": "./index.d.ts",
12
+ "import": "./index.js",
13
+ "default": "./index.js"
14
14
  },
15
15
  "./channel": {
16
- "types": "./dist/channel/index.d.ts",
17
- "import": "./dist/channel/index.js",
18
- "default": "./dist/channel/index.js"
16
+ "types": "./channel.d.ts",
17
+ "import": "./channel.js",
18
+ "default": "./channel.js"
19
19
  },
20
20
  "./task": {
21
- "types": "./dist/task/index.d.ts",
22
- "import": "./dist/task/index.js",
23
- "default": "./dist/task/index.js"
21
+ "types": "./task.d.ts",
22
+ "import": "./task.js",
23
+ "default": "./task.js"
24
24
  },
25
25
  "./testing": {
26
- "types": "./dist/testing/index.d.ts",
27
- "import": "./dist/testing/index.js",
28
- "default": "./dist/testing/index.js"
26
+ "types": "./testing.d.ts",
27
+ "import": "./testing.js",
28
+ "default": "./testing.js"
29
29
  }
30
30
  },
31
31
  "files": [
32
- "dist"
32
+ "index.js",
33
+ "index.d.ts",
34
+ "channel.js",
35
+ "channel.d.ts",
36
+ "task.js",
37
+ "task.d.ts",
38
+ "testing.js",
39
+ "testing.d.ts"
33
40
  ],
34
41
  "sideEffects": false,
35
42
  "publishConfig": {
36
43
  "access": "public"
37
44
  },
38
- "keywords": [
39
- "trellis",
40
- "channel",
41
- "sdk",
42
- "agent",
43
- "events"
44
- ],
45
- "author": "Mindfold LLC",
46
- "license": "AGPL-3.0-only",
47
- "devDependencies": {
48
- "@eslint/js": "^9.18.0",
49
- "@types/node": "^20.17.10",
50
- "eslint": "^9.18.0",
51
- "typescript": "^5.7.2",
52
- "typescript-eslint": "^8.21.0",
53
- "vitest": "^4.0.18"
45
+ "dependencies": {
46
+ "@blxzer/pactile-core": "0.5.0"
54
47
  },
55
48
  "engines": {
56
49
  "node": ">=18.17.0"
57
50
  },
58
- "repository": {
59
- "type": "git",
60
- "url": "https://github.com/blxzer77/cursor-trellis.git"
61
- },
62
- "scripts": {
63
- "build": "pnpm run clean && tsc",
64
- "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
65
- "dev": "tsc --watch",
66
- "test": "vitest run",
67
- "test:watch": "vitest",
68
- "lint": "eslint src/ test/",
69
- "lint:fix": "eslint src/ test/ --fix",
70
- "typecheck": "tsc --noEmit"
71
- }
51
+ "license": "AGPL-3.0-only"
72
52
  }
package/task.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core/task";
package/task.js ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core/task";
package/testing.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core/testing";
package/testing.js ADDED
@@ -0,0 +1 @@
1
+ export * from "@blxzer/pactile-core/testing";
@@ -1,3 +0,0 @@
1
- import { type ChannelEvent } from "../internal/store/events.js";
2
- export declare function readForumChannelEvents(channel: string, project: string, operation: string): Promise<ChannelEvent[]>;
3
- //# sourceMappingURL=assert.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/channel/api/assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAGrC,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CASzB"}
@@ -1,11 +0,0 @@
1
- import { readChannelEvents, } from "../internal/store/events.js";
2
- import { reduceChannelMetadata } from "../internal/store/channel-metadata.js";
3
- export async function readForumChannelEvents(channel, project, operation) {
4
- const events = await readChannelEvents(channel, project);
5
- const metadata = reduceChannelMetadata(events);
6
- if (metadata.type !== "forum") {
7
- throw new Error(`Channel '${channel}' is type '${metadata.type}'. '${operation}' requires a forum channel.`);
8
- }
9
- return events;
10
- }
11
- //# sourceMappingURL=assert.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/channel/api/assert.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,OAAe,EACf,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,YAAY,OAAO,cAAc,QAAQ,CAAC,IAAI,OAAO,SAAS,6BAA6B,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,21 +0,0 @@
1
- import { type ContextChannelEvent } from "../internal/store/events.js";
2
- import { type ContextEntry } from "../internal/store/schema.js";
3
- import type { ContextMutationOptions, ThreadContextMutationOptions } from "./types.js";
4
- export declare function addChannelContext(opts: ContextMutationOptions): Promise<ContextChannelEvent>;
5
- export declare function deleteChannelContext(opts: ContextMutationOptions): Promise<ContextChannelEvent>;
6
- export declare function listChannelContext(opts: {
7
- channel: string;
8
- scope?: ContextMutationOptions["scope"];
9
- projectKey?: string;
10
- cwd?: string;
11
- }): Promise<ContextEntry[]>;
12
- export declare function addThreadContext(opts: ThreadContextMutationOptions): Promise<ContextChannelEvent>;
13
- export declare function deleteThreadContext(opts: ThreadContextMutationOptions): Promise<ContextChannelEvent>;
14
- export declare function listThreadContext(opts: {
15
- channel: string;
16
- thread: string;
17
- scope?: ContextMutationOptions["scope"];
18
- projectKey?: string;
19
- cwd?: string;
20
- }): Promise<ContextEntry[]>;
21
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/channel/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AAgCpB,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAiB9B;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAiB9B;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,OAAO,CAAC,YAAY,EAAE,CAAC,CAUzB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAoB1B"}
@@ -1,99 +0,0 @@
1
- import { appendEvent, readChannelEvents, } from "../internal/store/events.js";
2
- import { reduceChannelMetadata } from "../internal/store/channel-metadata.js";
3
- import { normalizeThreadKey, } from "../internal/store/schema.js";
4
- import { reduceThreads, } from "../internal/store/thread-state.js";
5
- import { readForumChannelEvents } from "./assert.js";
6
- import { resolveChannelRef } from "./resolve.js";
7
- async function appendContextEvent(ref, by, action, target, context, thread, origin, meta) {
8
- if (!context || context.length === 0) {
9
- throw new Error("context must contain at least one entry");
10
- }
11
- const event = await appendEvent(ref.name, {
12
- kind: "context",
13
- by,
14
- target,
15
- action,
16
- context,
17
- ...(thread !== undefined ? { thread } : {}),
18
- ...(origin !== undefined ? { origin } : {}),
19
- ...(meta !== undefined ? { meta } : {}),
20
- }, ref.project);
21
- return event;
22
- }
23
- export async function addChannelContext(opts) {
24
- const ref = resolveChannelRef({
25
- channel: opts.channel,
26
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
27
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
28
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
29
- });
30
- return appendContextEvent({ name: opts.channel, project: ref.project }, opts.by, "add", "channel", opts.context, undefined, opts.origin, opts.meta);
31
- }
32
- export async function deleteChannelContext(opts) {
33
- const ref = resolveChannelRef({
34
- channel: opts.channel,
35
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
36
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
37
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
38
- });
39
- return appendContextEvent({ name: opts.channel, project: ref.project }, opts.by, "delete", "channel", opts.context, undefined, opts.origin, opts.meta);
40
- }
41
- export async function listChannelContext(opts) {
42
- const ref = resolveChannelRef({
43
- channel: opts.channel,
44
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
45
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
46
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
47
- });
48
- const events = await readChannelEvents(opts.channel, ref.project);
49
- const meta = reduceChannelMetadata(events);
50
- return meta.context ?? [];
51
- }
52
- export async function addThreadContext(opts) {
53
- const ref = resolveChannelRef({
54
- channel: opts.channel,
55
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
56
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
57
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
58
- });
59
- const thread = normalizeThreadKey(opts.thread);
60
- const states = reduceThreads(await readForumChannelEvents(opts.channel, ref.project, "context add"));
61
- assertKnownThread(states, thread, opts.channel);
62
- return appendContextEvent({ name: opts.channel, project: ref.project }, opts.by, "add", "thread", opts.context, thread, opts.origin, opts.meta);
63
- }
64
- export async function deleteThreadContext(opts) {
65
- const ref = resolveChannelRef({
66
- channel: opts.channel,
67
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
68
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
69
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
70
- });
71
- const thread = normalizeThreadKey(opts.thread);
72
- const states = reduceThreads(await readForumChannelEvents(opts.channel, ref.project, "context delete"));
73
- assertKnownThread(states, thread, opts.channel);
74
- return appendContextEvent({ name: opts.channel, project: ref.project }, opts.by, "delete", "thread", opts.context, thread, opts.origin, opts.meta);
75
- }
76
- export async function listThreadContext(opts) {
77
- const ref = resolveChannelRef({
78
- channel: opts.channel,
79
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
80
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
81
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
82
- });
83
- const events = await readForumChannelEvents(opts.channel, ref.project, "context list");
84
- const states = reduceThreads(events);
85
- const key = normalizeThreadKey(opts.thread);
86
- for (const state of states) {
87
- if (state.thread === key || state.aliases.includes(key)) {
88
- return state.context ?? [];
89
- }
90
- }
91
- return [];
92
- }
93
- function assertKnownThread(states, thread, channel) {
94
- const found = states.some((state) => state.thread === thread || state.aliases.includes(thread));
95
- if (!found) {
96
- throw new Error(`Thread '${thread}' not found in channel '${channel}'.`);
97
- }
98
- }
99
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/channel/api/context.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { type CreateChannelEvent } from "../internal/store/events.js";
2
- import type { CreateChannelOptions } from "./types.js";
3
- /**
4
- * Create a new channel. Throws when the channel already exists unless
5
- * `force` is set, in which case the existing channel directory is wiped
6
- * before the create event is appended.
7
- */
8
- export declare function createChannel(opts: CreateChannelOptions): Promise<CreateChannelEvent>;
9
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/channel/api/create.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAgD7B"}
@@ -1,104 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { appendEvent, } from "../internal/store/events.js";
4
- import { channelDir, ensureBucketMarker, eventsPath, } from "../internal/store/paths.js";
5
- import { parseChannelType } from "../internal/store/schema.js";
6
- import { resolveChannelRef } from "./resolve.js";
7
- /**
8
- * Create a new channel. Throws when the channel already exists unless
9
- * `force` is set, in which case the existing channel directory is wiped
10
- * before the create event is appended.
11
- */
12
- export async function createChannel(opts) {
13
- const ref = resolveChannelRef({
14
- channel: opts.channel,
15
- scope: opts.scope ?? "project",
16
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
17
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
18
- forCreate: true,
19
- });
20
- const channelType = parseChannelType(opts.type);
21
- const events = eventsPath(opts.channel, ref.project);
22
- const dir = ref.dir;
23
- if (fs.existsSync(events) && !opts.force) {
24
- throw new Error(`Channel '${opts.channel}' already exists at ${dir}. Use --force to overwrite.`);
25
- }
26
- if (opts.force && fs.existsSync(dir)) {
27
- await forceCleanChannel(opts.channel, ref.project);
28
- }
29
- ensureBucketMarker(ref.project);
30
- const cwd = opts.cwd ?? process.cwd();
31
- const event = await appendEvent(opts.channel, {
32
- kind: "create",
33
- by: opts.by,
34
- cwd,
35
- scope: ref.scope,
36
- type: channelType,
37
- ...(opts.task ? { task: opts.task } : {}),
38
- ...(opts.project ? { project: opts.project } : {}),
39
- ...(opts.labels && opts.labels.length > 0 ? { labels: opts.labels } : {}),
40
- ...(opts.description ? { description: opts.description } : {}),
41
- ...(opts.context && opts.context.length > 0
42
- ? { context: opts.context }
43
- : {}),
44
- ...(opts.ephemeral ? { ephemeral: true } : {}),
45
- ...(opts.origin ? { origin: opts.origin } : {}),
46
- ...(opts.meta ? { meta: opts.meta } : {}),
47
- }, ref.project);
48
- return event;
49
- }
50
- async function forceCleanChannel(name, project) {
51
- const dir = channelDir(name, project);
52
- let entries;
53
- try {
54
- entries = fs.readdirSync(dir);
55
- }
56
- catch {
57
- return;
58
- }
59
- for (const f of entries) {
60
- if (!f.endsWith(".pid"))
61
- continue;
62
- const pidFile = path.join(dir, f);
63
- let pid = 0;
64
- try {
65
- pid = Number(fs.readFileSync(pidFile, "utf-8").trim());
66
- }
67
- catch {
68
- continue;
69
- }
70
- if (pid && pidAlive(pid)) {
71
- try {
72
- process.kill(pid, "SIGTERM");
73
- const deadline = Date.now() + 1500;
74
- while (pidAlive(pid) && Date.now() < deadline) {
75
- await sleep(50);
76
- }
77
- if (pidAlive(pid))
78
- process.kill(pid, "SIGKILL");
79
- }
80
- catch {
81
- // already dead
82
- }
83
- }
84
- }
85
- try {
86
- fs.rmSync(dir, { recursive: true, force: true });
87
- }
88
- catch (err) {
89
- process.stderr.write(`[channel create --force] warning: failed to fully clean ${dir}: ${err instanceof Error ? err.message : err}\n`);
90
- }
91
- }
92
- function pidAlive(pid) {
93
- try {
94
- process.kill(pid, 0);
95
- return true;
96
- }
97
- catch {
98
- return false;
99
- }
100
- }
101
- function sleep(ms) {
102
- return new Promise((r) => setTimeout(r, ms));
103
- }
104
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/channel/api/create.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- import { type MessageChannelEvent } from "../internal/store/events.js";
2
- import type { ChannelAddressOptions } from "./types.js";
3
- export type WorkerInboxErrorCode = "WORKER_INBOX_WORKER_NOT_FOUND" | "WORKER_INBOX_WORKER_TERMINAL";
4
- export declare class WorkerInboxError extends Error {
5
- readonly code: WorkerInboxErrorCode;
6
- readonly channel: string;
7
- readonly workerId: string;
8
- constructor(code: WorkerInboxErrorCode, channel: string, workerId: string, message?: string);
9
- }
10
- export interface ReadWorkerInboxInput extends ChannelAddressOptions {
11
- workerId: string;
12
- afterSeq?: number;
13
- limit?: number;
14
- includeTerminal?: boolean;
15
- }
16
- export interface WatchWorkerInboxInput extends ChannelAddressOptions {
17
- workerId: string;
18
- sinceSeq?: number;
19
- fromStart?: boolean;
20
- signal?: AbortSignal;
21
- }
22
- export interface WorkerInboxMessage {
23
- workerId: string;
24
- event: MessageChannelEvent;
25
- seq: number;
26
- cursor: number;
27
- }
28
- /**
29
- * Read durable inbox messages for a specific worker.
30
- *
31
- * Reduces the worker registry from the channel event log, finds the worker,
32
- * and filters `message` events through `matchesInboxPolicy()` using the
33
- * worker's latest `inboxPolicy`. Core only reasons from the durable event
34
- * log; it does not claim the OS process is live.
35
- */
36
- export declare function readWorkerInbox(input: ReadWorkerInboxInput): Promise<WorkerInboxMessage[]>;
37
- /**
38
- * Watch future inbox messages for a specific worker.
39
- *
40
- * Performs upfront worker validation and captures the current `lastSeq`,
41
- * then returns a generator that yields future inbox-matching messages
42
- * through the channel watch primitives. The generator ends when a terminal
43
- * event for the watched worker arrives; it does not cross a terminal event
44
- * into a later respawn with the same id.
45
- *
46
- * Eager validation means errors surface from the outer call, and the
47
- * watch's `sinceSeq` snapshot is taken before the caller can append more
48
- * events.
49
- */
50
- export declare function watchWorkerInbox(input: WatchWorkerInboxInput): Promise<AsyncGenerator<WorkerInboxMessage, void, unknown>>;
51
- //# sourceMappingURL=inbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../src/channel/api/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAC5B,+BAA+B,GAC/B,8BAA8B,CAAC;AAEnC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGxB,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM;CAQnB;AAeD,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0C/B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAsC5D"}
@@ -1,176 +0,0 @@
1
- import { readChannelEvents as readEventsInternal, } from "../internal/store/events.js";
2
- import { matchesInboxPolicy } from "../internal/store/inbox.js";
3
- import { watchEvents } from "../internal/store/watch.js";
4
- import { reduceWorkerRegistry } from "../internal/store/worker-state.js";
5
- import { resolveChannelRef } from "./resolve.js";
6
- export class WorkerInboxError extends Error {
7
- code;
8
- channel;
9
- workerId;
10
- constructor(code, channel, workerId, message) {
11
- super(message ?? defaultMessage(code, channel, workerId));
12
- this.name = "WorkerInboxError";
13
- this.code = code;
14
- this.channel = channel;
15
- this.workerId = workerId;
16
- }
17
- }
18
- function defaultMessage(code, channel, workerId) {
19
- switch (code) {
20
- case "WORKER_INBOX_WORKER_NOT_FOUND":
21
- return `Worker '${workerId}' not found in channel '${channel}'`;
22
- case "WORKER_INBOX_WORKER_TERMINAL":
23
- return `Worker '${workerId}' in channel '${channel}' is terminal`;
24
- }
25
- }
26
- function resolve(input) {
27
- return resolveChannelRef({
28
- channel: input.channel,
29
- ...(input.scope !== undefined ? { scope: input.scope } : {}),
30
- ...(input.projectKey !== undefined ? { projectKey: input.projectKey } : {}),
31
- ...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
32
- });
33
- }
34
- /**
35
- * Read durable inbox messages for a specific worker.
36
- *
37
- * Reduces the worker registry from the channel event log, finds the worker,
38
- * and filters `message` events through `matchesInboxPolicy()` using the
39
- * worker's latest `inboxPolicy`. Core only reasons from the durable event
40
- * log; it does not claim the OS process is live.
41
- */
42
- export async function readWorkerInbox(input) {
43
- const ref = resolve(input);
44
- const events = await readEventsInternal(input.channel, ref.project);
45
- const registry = reduceWorkerRegistry(events, ref);
46
- const worker = registry.workers.find((w) => w.workerId === input.workerId);
47
- if (!worker) {
48
- throw new WorkerInboxError("WORKER_INBOX_WORKER_NOT_FOUND", input.channel, input.workerId);
49
- }
50
- if (worker.terminal && !input.includeTerminal) {
51
- throw new WorkerInboxError("WORKER_INBOX_WORKER_TERMINAL", input.channel, input.workerId);
52
- }
53
- if (input.limit !== undefined &&
54
- (!Number.isInteger(input.limit) || input.limit < 0)) {
55
- throw new Error("readWorkerInbox: limit must be a non-negative integer");
56
- }
57
- if (input.limit === 0)
58
- return [];
59
- const afterSeq = input.afterSeq ?? 0;
60
- const out = [];
61
- for (const ev of events) {
62
- if (ev.seq <= afterSeq)
63
- continue;
64
- if (!matchesInboxPolicy(ev, input.workerId, worker.inboxPolicy))
65
- continue;
66
- out.push({
67
- workerId: input.workerId,
68
- event: ev,
69
- seq: ev.seq,
70
- cursor: ev.seq,
71
- });
72
- if (input.limit !== undefined && out.length >= input.limit)
73
- break;
74
- }
75
- return out;
76
- }
77
- /**
78
- * Watch future inbox messages for a specific worker.
79
- *
80
- * Performs upfront worker validation and captures the current `lastSeq`,
81
- * then returns a generator that yields future inbox-matching messages
82
- * through the channel watch primitives. The generator ends when a terminal
83
- * event for the watched worker arrives; it does not cross a terminal event
84
- * into a later respawn with the same id.
85
- *
86
- * Eager validation means errors surface from the outer call, and the
87
- * watch's `sinceSeq` snapshot is taken before the caller can append more
88
- * events.
89
- */
90
- export async function watchWorkerInbox(input) {
91
- const ref = resolve(input);
92
- const events = await readEventsInternal(input.channel, ref.project);
93
- const registry = reduceWorkerRegistry(events, ref);
94
- const worker = registry.workers.find((w) => w.workerId === input.workerId);
95
- if (!worker) {
96
- throw new WorkerInboxError("WORKER_INBOX_WORKER_NOT_FOUND", input.channel, input.workerId);
97
- }
98
- if (worker.terminal) {
99
- throw new WorkerInboxError("WORKER_INBOX_WORKER_TERMINAL", input.channel, input.workerId);
100
- }
101
- const policy = worker.inboxPolicy;
102
- const lastSeq = events.length > 0 ? events[events.length - 1].seq : 0;
103
- const generationFloorSeq = findGenerationFloorSeq(events, input.workerId);
104
- const watchOpts = { project: ref.project };
105
- if (input.signal !== undefined)
106
- watchOpts.signal = input.signal;
107
- if (input.fromStart) {
108
- watchOpts.sinceSeq = generationFloorSeq;
109
- }
110
- else if (input.sinceSeq !== undefined) {
111
- watchOpts.sinceSeq = Math.max(input.sinceSeq, generationFloorSeq);
112
- }
113
- else {
114
- watchOpts.sinceSeq = lastSeq;
115
- }
116
- return inboxWatchGenerator(input.channel, input.workerId, policy, watchOpts);
117
- }
118
- async function* inboxWatchGenerator(channel, workerId, policy, watchOpts) {
119
- for await (const ev of watchEvents(channel, { includeNonMeaningful: true, includeProgress: false }, watchOpts)) {
120
- if (isTerminalForWorker(ev, workerId))
121
- return;
122
- if (matchesInboxPolicy(ev, workerId, policy)) {
123
- yield {
124
- workerId,
125
- event: ev,
126
- seq: ev.seq,
127
- cursor: ev.seq,
128
- };
129
- }
130
- }
131
- }
132
- function isTerminalForWorker(ev, workerId) {
133
- if (ev.kind === "killed") {
134
- return resolveWorkerId(ev) === workerId;
135
- }
136
- if (ev.kind === "done") {
137
- if (ev.synthesized !== true)
138
- return false;
139
- return resolveWorkerId(ev) === workerId;
140
- }
141
- if (ev.kind === "error") {
142
- const synthesized = ev.synthesized === true;
143
- const fromSupervisor = ev.by.startsWith("supervisor:");
144
- if (!synthesized && !fromSupervisor)
145
- return false;
146
- return resolveWorkerId(ev) === workerId;
147
- }
148
- return false;
149
- }
150
- function findGenerationFloorSeq(events, workerId) {
151
- let lastTerminalSeq = 0;
152
- let generationFloorSeq = 0;
153
- for (const ev of events) {
154
- if (isTerminalForWorker(ev, workerId)) {
155
- lastTerminalSeq = ev.seq;
156
- continue;
157
- }
158
- if (isSpawnedForWorker(ev, workerId)) {
159
- generationFloorSeq = lastTerminalSeq;
160
- }
161
- }
162
- return generationFloorSeq;
163
- }
164
- function isSpawnedForWorker(ev, workerId) {
165
- return ev.kind === "spawned" && ev.as === workerId;
166
- }
167
- function resolveWorkerId(ev) {
168
- const explicit = ev.worker ?? ev.as;
169
- if (explicit)
170
- return explicit;
171
- return stripSupervisor(ev.by);
172
- }
173
- function stripSupervisor(by) {
174
- return by.startsWith("supervisor:") ? by.slice("supervisor:".length) : by;
175
- }
176
- //# sourceMappingURL=inbox.js.map