@phyzess/pappra 0.0.0-stage → 0.1.0-beta.2

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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -2
  3. package/THIRD_PARTY_NOTICES.md +16 -0
  4. package/assets/integrations/skills/pappra/SKILL.md +68 -0
  5. package/assets/integrations/skills/pappra/references/hosts.md +30 -0
  6. package/assets/integrations/skills/pappra/references/lifecycle.md +37 -0
  7. package/assets/integrations/skills/pappra/references/operations.md +14 -0
  8. package/assets/manifest.json +4 -0
  9. package/dist/app/collaboration.d.ts +170 -0
  10. package/dist/app/collaboration.js +1650 -0
  11. package/dist/app/doctor.d.ts +9 -0
  12. package/dist/app/doctor.js +1030 -0
  13. package/dist/app/init.d.ts +143 -0
  14. package/dist/app/init.js +1111 -0
  15. package/dist/cli/commands/code.d.ts +16 -0
  16. package/dist/cli/commands/code.js +127 -0
  17. package/dist/cli/commands/collaboration.d.ts +13 -0
  18. package/dist/cli/commands/collaboration.js +186 -0
  19. package/dist/cli/commands/continuity.d.ts +29 -0
  20. package/dist/cli/commands/continuity.js +133 -0
  21. package/dist/cli/commands/docs.d.ts +11 -0
  22. package/dist/cli/commands/docs.js +133 -0
  23. package/dist/cli/commands/doctor.d.ts +14 -0
  24. package/dist/cli/commands/doctor.js +57 -0
  25. package/dist/cli/commands/host.d.ts +13 -0
  26. package/dist/cli/commands/host.js +125 -0
  27. package/dist/cli/commands/init.d.ts +51 -0
  28. package/dist/cli/commands/init.js +668 -0
  29. package/dist/cli/main.d.ts +2 -0
  30. package/dist/cli/main.js +10 -0
  31. package/dist/cli/output.d.ts +4 -0
  32. package/dist/cli/output.js +1 -0
  33. package/dist/cli/run.d.ts +2 -0
  34. package/dist/cli/run.js +597 -0
  35. package/dist/code/budget.d.ts +14 -0
  36. package/dist/code/budget.js +39 -0
  37. package/dist/code/exec.d.ts +23 -0
  38. package/dist/code/exec.js +133 -0
  39. package/dist/code/identity.d.ts +13 -0
  40. package/dist/code/identity.js +214 -0
  41. package/dist/code/index.d.ts +6 -0
  42. package/dist/code/index.js +3 -0
  43. package/dist/code/providers/codegraph.d.ts +59 -0
  44. package/dist/code/providers/codegraph.js +567 -0
  45. package/dist/code/registration.d.ts +9 -0
  46. package/dist/code/registration.js +293 -0
  47. package/dist/code/service.d.ts +53 -0
  48. package/dist/code/service.js +633 -0
  49. package/dist/code/text.d.ts +3 -0
  50. package/dist/code/text.js +202 -0
  51. package/dist/collab/admission.d.ts +450 -0
  52. package/dist/collab/admission.js +797 -0
  53. package/dist/collab/canonical.d.ts +26 -0
  54. package/dist/collab/canonical.js +136 -0
  55. package/dist/collab/contracts.d.ts +73 -0
  56. package/dist/collab/contracts.js +76 -0
  57. package/dist/collab/envelope.d.ts +52 -0
  58. package/dist/collab/envelope.js +241 -0
  59. package/dist/collab/fingerprint.d.ts +7 -0
  60. package/dist/collab/fingerprint.js +58 -0
  61. package/dist/collab/handoff.d.ts +350 -0
  62. package/dist/collab/handoff.js +513 -0
  63. package/dist/collab/index.d.ts +9 -0
  64. package/dist/collab/index.js +8 -0
  65. package/dist/collab/lifecycle.d.ts +449 -0
  66. package/dist/collab/lifecycle.js +534 -0
  67. package/dist/collab/messages.d.ts +148 -0
  68. package/dist/collab/messages.js +583 -0
  69. package/dist/collab/notify.d.ts +47 -0
  70. package/dist/collab/notify.js +140 -0
  71. package/dist/collab/preflight.d.ts +31 -0
  72. package/dist/collab/preflight.js +271 -0
  73. package/dist/collab/resources.d.ts +119 -0
  74. package/dist/collab/resources.js +451 -0
  75. package/dist/collab/store.d.ts +143 -0
  76. package/dist/collab/store.js +606 -0
  77. package/dist/collab/types.d.ts +354 -0
  78. package/dist/collab/types.js +1 -0
  79. package/dist/collab/validation.d.ts +10 -0
  80. package/dist/collab/validation.js +303 -0
  81. package/dist/continuity/context.d.ts +24 -0
  82. package/dist/continuity/context.js +179 -0
  83. package/dist/continuity/index.d.ts +3 -0
  84. package/dist/continuity/index.js +1 -0
  85. package/dist/continuity/paths.d.ts +37 -0
  86. package/dist/continuity/paths.js +258 -0
  87. package/dist/continuity/service.d.ts +59 -0
  88. package/dist/continuity/service.js +1258 -0
  89. package/dist/hosts/claude/native.d.ts +79 -0
  90. package/dist/hosts/claude/native.js +853 -0
  91. package/dist/hosts/codex/native.d.ts +345 -0
  92. package/dist/hosts/codex/native.js +1528 -0
  93. package/dist/hosts/codex/protocol.d.ts +51 -0
  94. package/dist/hosts/codex/protocol.js +42 -0
  95. package/dist/hosts/detect.d.ts +28 -0
  96. package/dist/hosts/detect.js +73 -0
  97. package/dist/hosts/index.d.ts +10 -0
  98. package/dist/hosts/index.js +10 -0
  99. package/dist/hosts/integration/bundle.d.ts +16 -0
  100. package/dist/hosts/integration/bundle.js +81 -0
  101. package/dist/hosts/integration/hook-entry.d.ts +1 -0
  102. package/dist/hosts/integration/hook-entry.js +68 -0
  103. package/dist/hosts/integration/hook.d.ts +32 -0
  104. package/dist/hosts/integration/hook.js +781 -0
  105. package/dist/hosts/integration/pi-extension-runtime.d.ts +18 -0
  106. package/dist/hosts/integration/pi-extension-runtime.js +89 -0
  107. package/dist/hosts/integration/pi-template.d.ts +3 -0
  108. package/dist/hosts/integration/pi-template.js +5 -0
  109. package/dist/hosts/integration/service.d.ts +41 -0
  110. package/dist/hosts/integration/service.js +1381 -0
  111. package/dist/hosts/integration/support.d.ts +36 -0
  112. package/dist/hosts/integration/support.js +41 -0
  113. package/dist/hosts/integration/templates.d.ts +22 -0
  114. package/dist/hosts/integration/templates.js +70 -0
  115. package/dist/hosts/pi/protocol.d.ts +22 -0
  116. package/dist/hosts/pi/protocol.js +28 -0
  117. package/dist/hosts/pi/query-result.d.ts +22 -0
  118. package/dist/hosts/pi/query-result.js +710 -0
  119. package/dist/hosts/pi/rpc.d.ts +937 -0
  120. package/dist/hosts/pi/rpc.js +1621 -0
  121. package/dist/hosts/pilot.d.ts +485 -0
  122. package/dist/hosts/pilot.js +593 -0
  123. package/dist/index.d.ts +5 -0
  124. package/dist/index.js +4 -0
  125. package/dist/infra/fs.d.ts +27 -0
  126. package/dist/infra/fs.js +130 -0
  127. package/dist/infra/git.d.ts +60 -0
  128. package/dist/infra/git.js +358 -0
  129. package/dist/infra/owned-process-group.d.ts +173 -0
  130. package/dist/infra/owned-process-group.js +571 -0
  131. package/dist/install/apply.d.ts +65 -0
  132. package/dist/install/apply.js +663 -0
  133. package/dist/install/index.d.ts +5 -0
  134. package/dist/install/index.js +5 -0
  135. package/dist/install/ownership.d.ts +85 -0
  136. package/dist/install/ownership.js +430 -0
  137. package/dist/install/plan.d.ts +39 -0
  138. package/dist/install/plan.js +97 -0
  139. package/dist/install/rollback.d.ts +18 -0
  140. package/dist/install/rollback.js +544 -0
  141. package/dist/install/runtime.d.ts +76 -0
  142. package/dist/install/runtime.js +1145 -0
  143. package/dist/knowledge/catalog.d.ts +47 -0
  144. package/dist/knowledge/catalog.js +308 -0
  145. package/dist/knowledge/context.d.ts +28 -0
  146. package/dist/knowledge/context.js +61 -0
  147. package/dist/knowledge/index.d.ts +3 -0
  148. package/dist/knowledge/index.js +1 -0
  149. package/dist/knowledge/journal.d.ts +16 -0
  150. package/dist/knowledge/journal.js +109 -0
  151. package/dist/knowledge/lifecycle.d.ts +8 -0
  152. package/dist/knowledge/lifecycle.js +1001 -0
  153. package/dist/knowledge/paths.d.ts +37 -0
  154. package/dist/knowledge/paths.js +236 -0
  155. package/dist/knowledge/refs.d.ts +36 -0
  156. package/dist/knowledge/refs.js +267 -0
  157. package/dist/knowledge/service.d.ts +21 -0
  158. package/dist/knowledge/service.js +393 -0
  159. package/dist/knowledge/types.d.ts +171 -0
  160. package/dist/knowledge/types.js +1 -0
  161. package/dist/knowledge/write.d.ts +8 -0
  162. package/dist/knowledge/write.js +1223 -0
  163. package/dist/package-info.d.ts +6 -0
  164. package/dist/package-info.js +19 -0
  165. package/dist/schemas/code.d.ts +377 -0
  166. package/dist/schemas/code.js +145 -0
  167. package/dist/schemas/collaboration.d.ts +115 -0
  168. package/dist/schemas/collaboration.js +106 -0
  169. package/dist/schemas/continuity.d.ts +315 -0
  170. package/dist/schemas/continuity.js +199 -0
  171. package/dist/schemas/diagnostics.d.ts +28 -0
  172. package/dist/schemas/diagnostics.js +27 -0
  173. package/dist/schemas/doctor.d.ts +157 -0
  174. package/dist/schemas/doctor.js +75 -0
  175. package/dist/schemas/document.d.ts +644 -0
  176. package/dist/schemas/document.js +296 -0
  177. package/dist/schemas/errors.d.ts +177 -0
  178. package/dist/schemas/errors.js +176 -0
  179. package/dist/schemas/evidence.d.ts +24 -0
  180. package/dist/schemas/evidence.js +16 -0
  181. package/dist/schemas/host.d.ts +436 -0
  182. package/dist/schemas/host.js +201 -0
  183. package/dist/schemas/index.d.ts +15 -0
  184. package/dist/schemas/index.js +15 -0
  185. package/dist/schemas/init.d.ts +121 -0
  186. package/dist/schemas/init.js +94 -0
  187. package/dist/schemas/install.d.ts +213 -0
  188. package/dist/schemas/install.js +139 -0
  189. package/dist/schemas/machine.d.ts +43 -0
  190. package/dist/schemas/machine.js +96 -0
  191. package/dist/schemas/outcome.d.ts +23 -0
  192. package/dist/schemas/outcome.js +17 -0
  193. package/dist/schemas/paths.d.ts +19 -0
  194. package/dist/schemas/paths.js +63 -0
  195. package/dist/schemas/workspace.d.ts +120 -0
  196. package/dist/schemas/workspace.js +201 -0
  197. package/dist/workspace/config-file.d.ts +36 -0
  198. package/dist/workspace/config-file.js +237 -0
  199. package/dist/workspace/config.d.ts +28 -0
  200. package/dist/workspace/config.js +79 -0
  201. package/dist/workspace/discover.d.ts +34 -0
  202. package/dist/workspace/discover.js +195 -0
  203. package/dist/workspace/documents.d.ts +21 -0
  204. package/dist/workspace/documents.js +395 -0
  205. package/dist/workspace/ignore.d.ts +10 -0
  206. package/dist/workspace/ignore.js +48 -0
  207. package/dist/workspace/index.d.ts +7 -0
  208. package/dist/workspace/index.js +3 -0
  209. package/dist/workspace/repositories.d.ts +24 -0
  210. package/dist/workspace/repositories.js +411 -0
  211. package/dist/workspace/resolve.d.ts +24 -0
  212. package/dist/workspace/resolve.js +268 -0
  213. package/dist/workspace/types.d.ts +71 -0
  214. package/dist/workspace/types.js +1 -0
  215. package/dist/workspace/validation.d.ts +18 -0
  216. package/dist/workspace/validation.js +197 -0
  217. package/package.json +105 -4
  218. package/skills/pappra/SKILL.md +68 -0
  219. package/skills/pappra/references/hosts.md +30 -0
  220. package/skills/pappra/references/lifecycle.md +37 -0
  221. package/skills/pappra/references/operations.md +14 -0
@@ -0,0 +1,36 @@
1
+ import type { HostLifecycleEvent, HostName } from '../../schemas/host.js';
2
+ export declare const HOST_SUPPORT: {
3
+ readonly pi: {
4
+ readonly surface: 'pi-extension';
5
+ readonly version: '1.3.0';
6
+ readonly events: {
7
+ readonly startup: 'session_start';
8
+ readonly resume: 'session_start';
9
+ readonly compact: 'session_before_compact';
10
+ readonly 'checkpoint-request': 'pappra-checkpoint';
11
+ };
12
+ };
13
+ readonly codex: {
14
+ readonly surface: 'codex-hooks';
15
+ readonly version: '0.163.0';
16
+ readonly events: {
17
+ readonly startup: 'SessionStart';
18
+ readonly resume: 'SessionStart';
19
+ readonly compact: null;
20
+ readonly 'checkpoint-request': null;
21
+ };
22
+ };
23
+ readonly claude: {
24
+ readonly surface: 'claude-hooks';
25
+ readonly version: '2.1.292';
26
+ readonly events: {
27
+ readonly startup: 'SessionStart';
28
+ readonly resume: 'SessionStart';
29
+ readonly compact: 'PostCompact';
30
+ readonly 'checkpoint-request': null;
31
+ };
32
+ };
33
+ };
34
+ export declare function nativeEventFor(host: HostName, event: HostLifecycleEvent): string | null;
35
+ export declare function isSupportedVersion(host: HostName, version: string | null): boolean;
36
+ export declare function surfaceFor(host: HostName): (typeof HOST_SUPPORT)[HostName]['surface'];
@@ -0,0 +1,41 @@
1
+ export const HOST_SUPPORT = {
2
+ pi: {
3
+ surface: 'pi-extension',
4
+ version: '1.3.0',
5
+ events: {
6
+ startup: 'session_start',
7
+ resume: 'session_start',
8
+ compact: 'session_before_compact',
9
+ 'checkpoint-request': 'pappra-checkpoint',
10
+ },
11
+ },
12
+ codex: {
13
+ surface: 'codex-hooks',
14
+ version: '0.163.0',
15
+ events: {
16
+ startup: 'SessionStart',
17
+ resume: 'SessionStart',
18
+ compact: null,
19
+ 'checkpoint-request': null,
20
+ },
21
+ },
22
+ claude: {
23
+ surface: 'claude-hooks',
24
+ version: '2.1.292',
25
+ events: {
26
+ startup: 'SessionStart',
27
+ resume: 'SessionStart',
28
+ compact: 'PostCompact',
29
+ 'checkpoint-request': null,
30
+ },
31
+ },
32
+ };
33
+ export function nativeEventFor(host, event) {
34
+ return HOST_SUPPORT[host].events[event];
35
+ }
36
+ export function isSupportedVersion(host, version) {
37
+ return version === HOST_SUPPORT[host].version;
38
+ }
39
+ export function surfaceFor(host) {
40
+ return HOST_SUPPORT[host].surface;
41
+ }
@@ -0,0 +1,22 @@
1
+ import type { HostName, HostLifecycleEvent } from '../../schemas/host.js';
2
+ export declare const PAPPRA_MANAGED_MARKER = "pappra-managed";
3
+ export interface RenderedHostTemplate {
4
+ readonly path: string;
5
+ readonly bytes: Buffer;
6
+ readonly kind: 'extension' | 'hook';
7
+ }
8
+ export declare function renderHookCommand(host: HostName, event: HostLifecycleEvent, runtimeEntry: string): string;
9
+ interface HookEntry {
10
+ readonly hooks: readonly {
11
+ readonly type: 'command';
12
+ readonly command: string;
13
+ readonly timeout: number;
14
+ }[];
15
+ }
16
+ export declare function renderHookConfigPatch(host: 'codex' | 'claude', runtimeEntry: string): {
17
+ readonly hooks: Record<string, readonly HookEntry[]>;
18
+ };
19
+ export declare function renderHostTemplate(host: HostName, runtimeEntry: string): RenderedHostTemplate;
20
+ export declare function hostConfigRelativePath(host: HostName): 'settings.json' | 'hooks.json' | null;
21
+ export declare function hostConfigName(host: HostName): string;
22
+ export {};
@@ -0,0 +1,70 @@
1
+ import { pathToFileURL } from 'node:url';
2
+ import { basename, dirname } from 'node:path';
3
+ export const PAPPRA_MANAGED_MARKER = 'pappra-managed';
4
+ function shellQuote(value) {
5
+ return `'${value.replaceAll("'", "'\\''")}'`;
6
+ }
7
+ export function renderHookCommand(host, event, runtimeEntry) {
8
+ return `${shellQuote(process.execPath)} ${shellQuote(runtimeEntry)} ${shellQuote(host)} ${shellQuote(event)} # ${PAPPRA_MANAGED_MARKER}`;
9
+ }
10
+ export function renderHookConfigPatch(host, runtimeEntry) {
11
+ const entry = (event) => ({
12
+ hooks: [
13
+ {
14
+ type: 'command',
15
+ command: renderHookCommand(host, event, runtimeEntry),
16
+ timeout: 1,
17
+ },
18
+ ],
19
+ });
20
+ return host === 'claude'
21
+ ? {
22
+ hooks: {
23
+ SessionStart: [entry('startup')],
24
+ PostCompact: [entry('compact')],
25
+ },
26
+ }
27
+ : {
28
+ hooks: {
29
+ SessionStart: [entry('startup')],
30
+ },
31
+ };
32
+ }
33
+ export function renderHostTemplate(host, runtimeEntry) {
34
+ if (host === 'pi') {
35
+ const runtimeUrl = pathToFileURL(`${dirname(runtimeEntry)}/pi-extension-runtime.js`).href;
36
+ const source = `/**
37
+ * Generated Pappra Pi extension. It registers bounded local lifecycle handlers;
38
+ * it does not start processes, models, network requests or background work.
39
+ */
40
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
41
+ import { createPiExtension } from ${JSON.stringify(runtimeUrl)};
42
+
43
+ export default function (pi: ExtensionAPI): void {
44
+ createPiExtension(pi);
45
+ }
46
+ `;
47
+ return {
48
+ path: 'templates/pi/entry.ts',
49
+ bytes: Buffer.from(source),
50
+ kind: 'extension',
51
+ };
52
+ }
53
+ const patch = renderHookConfigPatch(host, runtimeEntry);
54
+ return {
55
+ path: `templates/${host}/hooks.json`,
56
+ bytes: Buffer.from(`${JSON.stringify(patch, null, 2)}\n`),
57
+ kind: 'hook',
58
+ };
59
+ }
60
+ export function hostConfigRelativePath(host) {
61
+ if (host === 'claude')
62
+ return 'settings.json';
63
+ if (host === 'codex')
64
+ return 'hooks.json';
65
+ return null;
66
+ }
67
+ export function hostConfigName(host) {
68
+ const path = hostConfigRelativePath(host);
69
+ return path === null ? 'pi-extension' : basename(path);
70
+ }
@@ -0,0 +1,22 @@
1
+ export interface PiData {
2
+ [key: string]: unknown;
3
+ sessionId?: string;
4
+ sessionFile?: string;
5
+ isStreaming?: boolean;
6
+ isCompacting?: boolean;
7
+ pendingMessageCount?: number;
8
+ messageCount?: number;
9
+ disposition?: string;
10
+ steering?: unknown[];
11
+ followUp?: unknown[];
12
+ }
13
+ export interface PiRecord {
14
+ [key: string]: unknown;
15
+ type: string;
16
+ id?: string;
17
+ command?: string;
18
+ success?: boolean;
19
+ error?: string;
20
+ data?: PiData;
21
+ }
22
+ export declare function isPiRecord(value: unknown): value is PiRecord;
@@ -0,0 +1,28 @@
1
+ import { object } from '../../collab/validation.js';
2
+ export function isPiRecord(value) {
3
+ if (!object(value) || typeof value['type'] !== 'string')
4
+ return false;
5
+ for (const key of ['id', 'command', 'error'])
6
+ if (value[key] !== undefined && typeof value[key] !== 'string')
7
+ return false;
8
+ if (value['success'] !== undefined && typeof value['success'] !== 'boolean')
9
+ return false;
10
+ const data = value['data'];
11
+ if (data === undefined)
12
+ return true;
13
+ if (!object(data))
14
+ return false;
15
+ for (const key of ['sessionId', 'sessionFile', 'disposition'])
16
+ if (data[key] !== undefined && typeof data[key] !== 'string')
17
+ return false;
18
+ for (const key of ['isStreaming', 'isCompacting'])
19
+ if (data[key] !== undefined && typeof data[key] !== 'boolean')
20
+ return false;
21
+ for (const key of ['pendingMessageCount', 'messageCount'])
22
+ if (data[key] !== undefined && typeof data[key] !== 'number')
23
+ return false;
24
+ for (const key of ['steering', 'followUp'])
25
+ if (data[key] !== undefined && !Array.isArray(data[key]))
26
+ return false;
27
+ return true;
28
+ }
@@ -0,0 +1,22 @@
1
+ export interface QueryOptions {
2
+ session: string;
3
+ cwd: string;
4
+ expectedSession: string;
5
+ taskId: string;
6
+ assignmentId: string;
7
+ attempt: number;
8
+ inputDigest: string;
9
+ output?: string;
10
+ evidenceDir?: string;
11
+ piBin?: string;
12
+ timeoutMs?: number;
13
+ graceMs?: number;
14
+ }
15
+ export interface RecoveryResult {
16
+ schema: string;
17
+ status: string;
18
+ blockers: string[];
19
+ recovered?: unknown;
20
+ [key: string]: unknown;
21
+ }
22
+ export declare function queryPiResult(options: QueryOptions): Promise<RecoveryResult>;