@earendil-works/pi-server 0.84.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 (71) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +50 -0
  3. package/dist/connection.d.ts +28 -0
  4. package/dist/connection.d.ts.map +1 -0
  5. package/dist/connection.js +4 -0
  6. package/dist/connection.js.map +1 -0
  7. package/dist/errors.d.ts +27 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +45 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +6 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/listener.d.ts +10 -0
  16. package/dist/listener.d.ts.map +1 -0
  17. package/dist/listener.js +2 -0
  18. package/dist/listener.js.map +1 -0
  19. package/dist/protocol.d.ts +22 -0
  20. package/dist/protocol.d.ts.map +1 -0
  21. package/dist/protocol.js +266 -0
  22. package/dist/protocol.js.map +1 -0
  23. package/dist/server.d.ts +36 -0
  24. package/dist/server.d.ts.map +1 -0
  25. package/dist/server.js +365 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/sessions.d.ts +2174 -0
  28. package/dist/sessions.d.ts.map +1 -0
  29. package/dist/sessions.js +305 -0
  30. package/dist/sessions.js.map +1 -0
  31. package/dist/snapshots.d.ts +24 -0
  32. package/dist/snapshots.d.ts.map +1 -0
  33. package/dist/snapshots.js +39 -0
  34. package/dist/snapshots.js.map +1 -0
  35. package/dist/testing/client.d.ts +31 -0
  36. package/dist/testing/client.d.ts.map +1 -0
  37. package/dist/testing/client.js +118 -0
  38. package/dist/testing/client.js.map +1 -0
  39. package/dist/testing/index.d.ts +6 -0
  40. package/dist/testing/index.d.ts.map +1 -0
  41. package/dist/testing/index.js +4 -0
  42. package/dist/testing/index.js.map +1 -0
  43. package/dist/testing/server.d.ts +12 -0
  44. package/dist/testing/server.d.ts.map +1 -0
  45. package/dist/testing/server.js +17 -0
  46. package/dist/testing/server.js.map +1 -0
  47. package/dist/testing/service.d.ts +59 -0
  48. package/dist/testing/service.d.ts.map +1 -0
  49. package/dist/testing/service.js +240 -0
  50. package/dist/testing/service.js.map +1 -0
  51. package/dist/transports/unix/index.d.ts +4 -0
  52. package/dist/transports/unix/index.d.ts.map +1 -0
  53. package/dist/transports/unix/index.js +3 -0
  54. package/dist/transports/unix/index.js.map +1 -0
  55. package/dist/transports/unix/listener.d.ts +25 -0
  56. package/dist/transports/unix/listener.d.ts.map +1 -0
  57. package/dist/transports/unix/listener.js +432 -0
  58. package/dist/transports/unix/listener.js.map +1 -0
  59. package/dist/transports/unix/preset.d.ts +6 -0
  60. package/dist/transports/unix/preset.d.ts.map +1 -0
  61. package/dist/transports/unix/preset.js +21 -0
  62. package/dist/transports/unix/preset.js.map +1 -0
  63. package/dist/transports/unix/types.d.ts +15 -0
  64. package/dist/transports/unix/types.d.ts.map +1 -0
  65. package/dist/transports/unix/types.js +2 -0
  66. package/dist/transports/unix/types.js.map +1 -0
  67. package/dist/types.d.ts +56 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +2 -0
  70. package/dist/types.js.map +1 -0
  71. package/package.json +57 -0
@@ -0,0 +1,56 @@
1
+ import type { Command, ModelMetadata, ModelRef, SessionMetadata, SessionPhase, SessionSnapshot, ThinkingLevel, TranscriptProgress } from "@earendil-works/pi-protocol";
2
+ import type { PiServerError } from "./errors.ts";
3
+ import type { PiServerListener } from "./listener.ts";
4
+ export interface PiServerOptions {
5
+ listeners: readonly PiServerListener[];
6
+ maxFrameLength?: number;
7
+ handshakeTimeoutMs?: number;
8
+ serverId?: string;
9
+ onError?: (error: Error) => void;
10
+ }
11
+ export type MaybePromise<T> = T | Promise<T>;
12
+ export type PromptInput = Omit<Extract<Command, {
13
+ command: "prompt";
14
+ }>, "command" | "sessionId">;
15
+ export type SteerInput = Omit<Extract<Command, {
16
+ command: "steer";
17
+ }>, "command" | "sessionId">;
18
+ export interface CreateSessionOptions {
19
+ /** A collision-resistant ID assigned by PiServer. The service must persist this exact ID. */
20
+ id: string;
21
+ cwd?: string;
22
+ name?: string;
23
+ model?: ModelRef;
24
+ thinkingLevel?: ThinkingLevel;
25
+ }
26
+ export type PiSessionRuntimeEvent = {
27
+ type: "snapshot";
28
+ } | {
29
+ type: "progress";
30
+ progress: TranscriptProgress;
31
+ } | {
32
+ type: "error";
33
+ error: PiServerError;
34
+ };
35
+ /** One acquired durable session. Conflicting operations must reject rather than queue. */
36
+ export interface PiSessionRuntime {
37
+ snapshot(): MaybePromise<SessionSnapshot>;
38
+ getPhase(): SessionPhase;
39
+ prompt(input: PromptInput): Promise<void>;
40
+ steer(input: SteerInput): Promise<void>;
41
+ abort(): Promise<void>;
42
+ setModel(model: ModelRef): Promise<void>;
43
+ setThinking(thinkingLevel: ThinkingLevel): Promise<void>;
44
+ subscribe(listener: (event: PiSessionRuntimeEvent) => void): () => void;
45
+ dispose(): Promise<void>;
46
+ }
47
+ /** Service boundary for durable sessions and exclusively acquired runtimes. */
48
+ export interface PiServerService {
49
+ listSessions(): Promise<SessionMetadata[]>;
50
+ listModels(): Promise<ModelMetadata[]>;
51
+ createSession(options: CreateSessionOptions): Promise<PiSessionRuntime>;
52
+ openSession(sessionId: string): Promise<PiSessionRuntime>;
53
+ }
54
+ export type SessionRuntime = PiSessionRuntime;
55
+ export type SessionRuntimeEvent = PiSessionRuntimeEvent;
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,OAAO,EACP,aAAa,EACb,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;AACjG,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;AAE/F,MAAM,WAAW,oBAAoB;IACpC,6FAA6F;IAC7F,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAE3C,0FAA0F;AAC1F,MAAM,WAAW,gBAAgB;IAChC,QAAQ,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC;IAC1C,QAAQ,IAAI,YAAY,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC/B,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3C,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACvC,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1D;AAED,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC9C,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC","sourcesContent":["import type {\n\tCommand,\n\tModelMetadata,\n\tModelRef,\n\tSessionMetadata,\n\tSessionPhase,\n\tSessionSnapshot,\n\tThinkingLevel,\n\tTranscriptProgress,\n} from \"@earendil-works/pi-protocol\";\nimport type { PiServerError } from \"./errors.ts\";\nimport type { PiServerListener } from \"./listener.ts\";\n\nexport interface PiServerOptions {\n\tlisteners: readonly PiServerListener[];\n\tmaxFrameLength?: number;\n\thandshakeTimeoutMs?: number;\n\tserverId?: string;\n\tonError?: (error: Error) => void;\n}\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type PromptInput = Omit<Extract<Command, { command: \"prompt\" }>, \"command\" | \"sessionId\">;\nexport type SteerInput = Omit<Extract<Command, { command: \"steer\" }>, \"command\" | \"sessionId\">;\n\nexport interface CreateSessionOptions {\n\t/** A collision-resistant ID assigned by PiServer. The service must persist this exact ID. */\n\tid: string;\n\tcwd?: string;\n\tname?: string;\n\tmodel?: ModelRef;\n\tthinkingLevel?: ThinkingLevel;\n}\n\nexport type PiSessionRuntimeEvent =\n\t| { type: \"snapshot\" }\n\t| { type: \"progress\"; progress: TranscriptProgress }\n\t| { type: \"error\"; error: PiServerError };\n\n/** One acquired durable session. Conflicting operations must reject rather than queue. */\nexport interface PiSessionRuntime {\n\tsnapshot(): MaybePromise<SessionSnapshot>;\n\tgetPhase(): SessionPhase;\n\tprompt(input: PromptInput): Promise<void>;\n\tsteer(input: SteerInput): Promise<void>;\n\tabort(): Promise<void>;\n\tsetModel(model: ModelRef): Promise<void>;\n\tsetThinking(thinkingLevel: ThinkingLevel): Promise<void>;\n\tsubscribe(listener: (event: PiSessionRuntimeEvent) => void): () => void;\n\tdispose(): Promise<void>;\n}\n\n/** Service boundary for durable sessions and exclusively acquired runtimes. */\nexport interface PiServerService {\n\tlistSessions(): Promise<SessionMetadata[]>;\n\tlistModels(): Promise<ModelMetadata[]>;\n\tcreateSession(options: CreateSessionOptions): Promise<PiSessionRuntime>;\n\topenSession(sessionId: string): Promise<PiSessionRuntime>;\n}\n\nexport type SessionRuntime = PiSessionRuntime;\nexport type SessionRuntimeEvent = PiSessionRuntimeEvent;\n"]}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tCommand,\n\tModelMetadata,\n\tModelRef,\n\tSessionMetadata,\n\tSessionPhase,\n\tSessionSnapshot,\n\tThinkingLevel,\n\tTranscriptProgress,\n} from \"@earendil-works/pi-protocol\";\nimport type { PiServerError } from \"./errors.ts\";\nimport type { PiServerListener } from \"./listener.ts\";\n\nexport interface PiServerOptions {\n\tlisteners: readonly PiServerListener[];\n\tmaxFrameLength?: number;\n\thandshakeTimeoutMs?: number;\n\tserverId?: string;\n\tonError?: (error: Error) => void;\n}\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type PromptInput = Omit<Extract<Command, { command: \"prompt\" }>, \"command\" | \"sessionId\">;\nexport type SteerInput = Omit<Extract<Command, { command: \"steer\" }>, \"command\" | \"sessionId\">;\n\nexport interface CreateSessionOptions {\n\t/** A collision-resistant ID assigned by PiServer. The service must persist this exact ID. */\n\tid: string;\n\tcwd?: string;\n\tname?: string;\n\tmodel?: ModelRef;\n\tthinkingLevel?: ThinkingLevel;\n}\n\nexport type PiSessionRuntimeEvent =\n\t| { type: \"snapshot\" }\n\t| { type: \"progress\"; progress: TranscriptProgress }\n\t| { type: \"error\"; error: PiServerError };\n\n/** One acquired durable session. Conflicting operations must reject rather than queue. */\nexport interface PiSessionRuntime {\n\tsnapshot(): MaybePromise<SessionSnapshot>;\n\tgetPhase(): SessionPhase;\n\tprompt(input: PromptInput): Promise<void>;\n\tsteer(input: SteerInput): Promise<void>;\n\tabort(): Promise<void>;\n\tsetModel(model: ModelRef): Promise<void>;\n\tsetThinking(thinkingLevel: ThinkingLevel): Promise<void>;\n\tsubscribe(listener: (event: PiSessionRuntimeEvent) => void): () => void;\n\tdispose(): Promise<void>;\n}\n\n/** Service boundary for durable sessions and exclusively acquired runtimes. */\nexport interface PiServerService {\n\tlistSessions(): Promise<SessionMetadata[]>;\n\tlistModels(): Promise<ModelMetadata[]>;\n\tcreateSession(options: CreateSessionOptions): Promise<PiSessionRuntime>;\n\topenSession(sessionId: string): Promise<PiSessionRuntime>;\n}\n\nexport type SessionRuntime = PiSessionRuntime;\nexport type SessionRuntimeEvent = PiSessionRuntimeEvent;\n"]}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@earendil-works/pi-server",
3
+ "version": "0.84.0",
4
+ "description": "experimental server package for pi",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./testing": {
14
+ "types": "./dist/testing/index.d.ts",
15
+ "import": "./dist/testing/index.js"
16
+ },
17
+ "./unix": {
18
+ "types": "./dist/transports/unix/index.d.ts",
19
+ "import": "./dist/transports/unix/index.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "CHANGELOG.md"
26
+ ],
27
+ "scripts": {
28
+ "clean": "shx rm -rf dist",
29
+ "dev": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput",
30
+ "build": "tsgo -p tsconfig.build.json",
31
+ "test": "vitest --run",
32
+ "typecheck": "tsgo -p tsconfig.test.json",
33
+ "prepublishOnly": "npm run clean && npm run build"
34
+ },
35
+ "keywords": [
36
+ "pi",
37
+ "server"
38
+ ],
39
+ "author": "Earendil Works",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/earendil-works/pi.git",
44
+ "directory": "packages/server"
45
+ },
46
+ "engines": {
47
+ "node": ">=22.19.0"
48
+ },
49
+ "dependencies": {
50
+ "@earendil-works/pi-ai": "^0.84.0",
51
+ "@earendil-works/pi-protocol": "^0.84.0"
52
+ },
53
+ "devDependencies": {
54
+ "shx": "0.4.0",
55
+ "vitest": "4.1.9"
56
+ }
57
+ }