@blxzer/cursor-trellis-core 0.5.0-beta.5 → 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 (198) hide show
  1. package/LICENSE +235 -235
  2. package/channel.d.ts +1 -0
  3. package/channel.js +1 -0
  4. package/index.d.ts +1 -0
  5. package/index.js +1 -0
  6. package/package.json +27 -47
  7. package/task.d.ts +1 -0
  8. package/task.js +1 -0
  9. package/testing.d.ts +1 -0
  10. package/testing.js +1 -0
  11. package/dist/channel/api/assert.d.ts +0 -3
  12. package/dist/channel/api/assert.d.ts.map +0 -1
  13. package/dist/channel/api/assert.js +0 -11
  14. package/dist/channel/api/assert.js.map +0 -1
  15. package/dist/channel/api/context.d.ts +0 -21
  16. package/dist/channel/api/context.d.ts.map +0 -1
  17. package/dist/channel/api/context.js +0 -99
  18. package/dist/channel/api/context.js.map +0 -1
  19. package/dist/channel/api/create.d.ts +0 -9
  20. package/dist/channel/api/create.d.ts.map +0 -1
  21. package/dist/channel/api/create.js +0 -104
  22. package/dist/channel/api/create.js.map +0 -1
  23. package/dist/channel/api/inbox.d.ts +0 -51
  24. package/dist/channel/api/inbox.d.ts.map +0 -1
  25. package/dist/channel/api/inbox.js +0 -176
  26. package/dist/channel/api/inbox.js.map +0 -1
  27. package/dist/channel/api/interrupt.d.ts +0 -31
  28. package/dist/channel/api/interrupt.d.ts.map +0 -1
  29. package/dist/channel/api/interrupt.js +0 -102
  30. package/dist/channel/api/interrupt.js.map +0 -1
  31. package/dist/channel/api/post-thread.d.ts +0 -14
  32. package/dist/channel/api/post-thread.d.ts.map +0 -1
  33. package/dist/channel/api/post-thread.js +0 -109
  34. package/dist/channel/api/post-thread.js.map +0 -1
  35. package/dist/channel/api/read.d.ts +0 -17
  36. package/dist/channel/api/read.d.ts.map +0 -1
  37. package/dist/channel/api/read.js +0 -44
  38. package/dist/channel/api/read.js.map +0 -1
  39. package/dist/channel/api/resolve.d.ts +0 -21
  40. package/dist/channel/api/resolve.d.ts.map +0 -1
  41. package/dist/channel/api/resolve.js +0 -28
  42. package/dist/channel/api/resolve.js.map +0 -1
  43. package/dist/channel/api/runtime.d.ts +0 -70
  44. package/dist/channel/api/runtime.d.ts.map +0 -1
  45. package/dist/channel/api/runtime.js +0 -11
  46. package/dist/channel/api/runtime.js.map +0 -1
  47. package/dist/channel/api/send.d.ts +0 -4
  48. package/dist/channel/api/send.d.ts.map +0 -1
  49. package/dist/channel/api/send.js +0 -52
  50. package/dist/channel/api/send.js.map +0 -1
  51. package/dist/channel/api/spawn.d.ts +0 -13
  52. package/dist/channel/api/spawn.d.ts.map +0 -1
  53. package/dist/channel/api/spawn.js +0 -54
  54. package/dist/channel/api/spawn.js.map +0 -1
  55. package/dist/channel/api/title.d.ts +0 -5
  56. package/dist/channel/api/title.d.ts.map +0 -1
  57. package/dist/channel/api/title.js +0 -40
  58. package/dist/channel/api/title.js.map +0 -1
  59. package/dist/channel/api/types.d.ts +0 -65
  60. package/dist/channel/api/types.d.ts.map +0 -1
  61. package/dist/channel/api/types.js +0 -2
  62. package/dist/channel/api/types.js.map +0 -1
  63. package/dist/channel/api/watch-channels.d.ts +0 -40
  64. package/dist/channel/api/watch-channels.d.ts.map +0 -1
  65. package/dist/channel/api/watch-channels.js +0 -143
  66. package/dist/channel/api/watch-channels.js.map +0 -1
  67. package/dist/channel/api/watch.d.ts +0 -11
  68. package/dist/channel/api/watch.d.ts.map +0 -1
  69. package/dist/channel/api/watch.js +0 -17
  70. package/dist/channel/api/watch.js.map +0 -1
  71. package/dist/channel/api/workers.d.ts +0 -69
  72. package/dist/channel/api/workers.d.ts.map +0 -1
  73. package/dist/channel/api/workers.js +0 -145
  74. package/dist/channel/api/workers.js.map +0 -1
  75. package/dist/channel/index.d.ts +0 -38
  76. package/dist/channel/index.d.ts.map +0 -1
  77. package/dist/channel/index.js +0 -23
  78. package/dist/channel/index.js.map +0 -1
  79. package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
  80. package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
  81. package/dist/channel/internal/store/channel-metadata.js +0 -94
  82. package/dist/channel/internal/store/channel-metadata.js.map +0 -1
  83. package/dist/channel/internal/store/delivery.d.ts +0 -27
  84. package/dist/channel/internal/store/delivery.d.ts.map +0 -1
  85. package/dist/channel/internal/store/delivery.js +0 -37
  86. package/dist/channel/internal/store/delivery.js.map +0 -1
  87. package/dist/channel/internal/store/events.d.ts +0 -215
  88. package/dist/channel/internal/store/events.d.ts.map +0 -1
  89. package/dist/channel/internal/store/events.js +0 -206
  90. package/dist/channel/internal/store/events.js.map +0 -1
  91. package/dist/channel/internal/store/filter.d.ts +0 -21
  92. package/dist/channel/internal/store/filter.d.ts.map +0 -1
  93. package/dist/channel/internal/store/filter.js +0 -75
  94. package/dist/channel/internal/store/filter.js.map +0 -1
  95. package/dist/channel/internal/store/inbox.d.ts +0 -17
  96. package/dist/channel/internal/store/inbox.d.ts.map +0 -1
  97. package/dist/channel/internal/store/inbox.js +0 -30
  98. package/dist/channel/internal/store/inbox.js.map +0 -1
  99. package/dist/channel/internal/store/lock.d.ts +0 -17
  100. package/dist/channel/internal/store/lock.d.ts.map +0 -1
  101. package/dist/channel/internal/store/lock.js +0 -88
  102. package/dist/channel/internal/store/lock.js.map +0 -1
  103. package/dist/channel/internal/store/paths.d.ts +0 -43
  104. package/dist/channel/internal/store/paths.d.ts.map +0 -1
  105. package/dist/channel/internal/store/paths.js +0 -233
  106. package/dist/channel/internal/store/paths.js.map +0 -1
  107. package/dist/channel/internal/store/schema.d.ts +0 -77
  108. package/dist/channel/internal/store/schema.d.ts.map +0 -1
  109. package/dist/channel/internal/store/schema.js +0 -127
  110. package/dist/channel/internal/store/schema.js.map +0 -1
  111. package/dist/channel/internal/store/seq.d.ts +0 -12
  112. package/dist/channel/internal/store/seq.d.ts.map +0 -1
  113. package/dist/channel/internal/store/seq.js +0 -133
  114. package/dist/channel/internal/store/seq.js.map +0 -1
  115. package/dist/channel/internal/store/thread-state.d.ts +0 -37
  116. package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
  117. package/dist/channel/internal/store/thread-state.js +0 -206
  118. package/dist/channel/internal/store/thread-state.js.map +0 -1
  119. package/dist/channel/internal/store/watch.d.ts +0 -10
  120. package/dist/channel/internal/store/watch.d.ts.map +0 -1
  121. package/dist/channel/internal/store/watch.js +0 -122
  122. package/dist/channel/internal/store/watch.js.map +0 -1
  123. package/dist/channel/internal/store/worker-state.d.ts +0 -56
  124. package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
  125. package/dist/channel/internal/store/worker-state.js +0 -220
  126. package/dist/channel/internal/store/worker-state.js.map +0 -1
  127. package/dist/index.d.ts +0 -3
  128. package/dist/index.d.ts.map +0 -1
  129. package/dist/index.js +0 -7
  130. package/dist/index.js.map +0 -1
  131. package/dist/task/adapter-middleware.d.ts +0 -118
  132. package/dist/task/adapter-middleware.d.ts.map +0 -1
  133. package/dist/task/adapter-middleware.js +0 -508
  134. package/dist/task/adapter-middleware.js.map +0 -1
  135. package/dist/task/contract-migrate.d.ts +0 -29
  136. package/dist/task/contract-migrate.d.ts.map +0 -1
  137. package/dist/task/contract-migrate.js +0 -207
  138. package/dist/task/contract-migrate.js.map +0 -1
  139. package/dist/task/full-quality.d.ts +0 -89
  140. package/dist/task/full-quality.d.ts.map +0 -1
  141. package/dist/task/full-quality.js +0 -379
  142. package/dist/task/full-quality.js.map +0 -1
  143. package/dist/task/index.d.ts +0 -31
  144. package/dist/task/index.d.ts.map +0 -1
  145. package/dist/task/index.js +0 -20
  146. package/dist/task/index.js.map +0 -1
  147. package/dist/task/kernel-cli.d.ts +0 -44
  148. package/dist/task/kernel-cli.d.ts.map +0 -1
  149. package/dist/task/kernel-cli.js +0 -287
  150. package/dist/task/kernel-cli.js.map +0 -1
  151. package/dist/task/kernel-contract.d.ts +0 -113
  152. package/dist/task/kernel-contract.d.ts.map +0 -1
  153. package/dist/task/kernel-contract.js +0 -332
  154. package/dist/task/kernel-contract.js.map +0 -1
  155. package/dist/task/kernel-store.d.ts +0 -99
  156. package/dist/task/kernel-store.d.ts.map +0 -1
  157. package/dist/task/kernel-store.js +0 -735
  158. package/dist/task/kernel-store.js.map +0 -1
  159. package/dist/task/kernel-surface.d.ts +0 -39
  160. package/dist/task/kernel-surface.d.ts.map +0 -1
  161. package/dist/task/kernel-surface.js +0 -73
  162. package/dist/task/kernel-surface.js.map +0 -1
  163. package/dist/task/lite-context-pack.d.ts +0 -71
  164. package/dist/task/lite-context-pack.d.ts.map +0 -1
  165. package/dist/task/lite-context-pack.js +0 -175
  166. package/dist/task/lite-context-pack.js.map +0 -1
  167. package/dist/task/ondemand-topology.d.ts +0 -108
  168. package/dist/task/ondemand-topology.d.ts.map +0 -1
  169. package/dist/task/ondemand-topology.js +0 -453
  170. package/dist/task/ondemand-topology.js.map +0 -1
  171. package/dist/task/p36-artifact-migrate.d.ts +0 -61
  172. package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
  173. package/dist/task/p36-artifact-migrate.js +0 -336
  174. package/dist/task/p36-artifact-migrate.js.map +0 -1
  175. package/dist/task/p36-wave-c.d.ts +0 -39
  176. package/dist/task/p36-wave-c.d.ts.map +0 -1
  177. package/dist/task/p36-wave-c.js +0 -100
  178. package/dist/task/p36-wave-c.js.map +0 -1
  179. package/dist/task/paths.d.ts +0 -37
  180. package/dist/task/paths.d.ts.map +0 -1
  181. package/dist/task/paths.js +0 -49
  182. package/dist/task/paths.js.map +0 -1
  183. package/dist/task/phase.d.ts +0 -27
  184. package/dist/task/phase.d.ts.map +0 -1
  185. package/dist/task/phase.js +0 -24
  186. package/dist/task/phase.js.map +0 -1
  187. package/dist/task/records.d.ts +0 -48
  188. package/dist/task/records.d.ts.map +0 -1
  189. package/dist/task/records.js +0 -100
  190. package/dist/task/records.js.map +0 -1
  191. package/dist/task/schema.d.ts +0 -77
  192. package/dist/task/schema.d.ts.map +0 -1
  193. package/dist/task/schema.js +0 -220
  194. package/dist/task/schema.js.map +0 -1
  195. package/dist/testing/index.d.ts +0 -2
  196. package/dist/testing/index.d.ts.map +0 -1
  197. package/dist/testing/index.js +0 -4
  198. package/dist/testing/index.js.map +0 -1
package/package.json CHANGED
@@ -1,72 +1,52 @@
1
1
  {
2
2
  "name": "@blxzer/cursor-trellis-core",
3
- "version": "0.5.0-beta.5",
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