@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,57 @@
1
+ import { runDoctor } from '../../app/doctor.js';
2
+ function printHuman(output, report) {
3
+ output.stdout(`Pappra doctor ${report.generatedAt}\n`);
4
+ output.stdout(`Workspace: ${report.workspace.root ?? '(not registered)'}\n`);
5
+ output.stdout(`Runtime target: ${report.runtime.targetVersion ?? '(none)'}; machine: ${report.runtime.machineRuntime?.version ?? '(none)'}; passive state: ${report.runtime.passiveStatus ?? '(unknown)'}\n`);
6
+ for (const check of report.checks) {
7
+ output.stdout(`\n[${check.status.toUpperCase()}] ${check.id}: ${check.title}\n`);
8
+ output.stdout(` ${check.summary}\n`);
9
+ output.stdout(` source: ${check.source}\n`);
10
+ if (check.coverage !== null)
11
+ output.stdout(` coverage: ${check.coverage}\n`);
12
+ for (const action of check.nextActions) {
13
+ output.stdout(` next: ${action}\n`);
14
+ }
15
+ }
16
+ output.stdout(`\nSummary: ${report.summary.status} (exit ${report.summary.exitCode}); ` +
17
+ `ok=${report.summary.counts.ok}, warning=${report.summary.counts.warning}, ` +
18
+ `error=${report.summary.counts.error}, unknown=${report.summary.counts.unknown}, ` +
19
+ `partial=${report.summary.counts.partial}, unsupported=${report.summary.counts.unsupported}\n`);
20
+ if (report.scope.notChecked.length > 0) {
21
+ output.stdout(`Not checked: ${report.scope.notChecked.join(', ')}\n`);
22
+ }
23
+ }
24
+ /**
25
+ * Runs one read-only doctor report. JSON mode writes exactly one JSON document
26
+ * to stdout and never opens prompts or emits progress logs.
27
+ */
28
+ export async function runDoctorCommand(options, output) {
29
+ try {
30
+ const report = await runDoctor({
31
+ root: options.root,
32
+ ...(options.dataDir === undefined ? {} : { dataDir: options.dataDir }),
33
+ ...(options.homeDir === undefined ? {} : { homeDir: options.homeDir }),
34
+ ...(options.pathEnv === undefined ? {} : { pathEnv: options.pathEnv }),
35
+ });
36
+ if (options.json) {
37
+ output.stdout(`${JSON.stringify(report)}\n`);
38
+ }
39
+ else {
40
+ printHuman(output, report);
41
+ }
42
+ return report.summary.exitCode;
43
+ }
44
+ catch (error) {
45
+ const message = error instanceof Error ? error.message : String(error);
46
+ if (options.json) {
47
+ output.stdout(`${JSON.stringify({ ok: false, command: 'doctor', code: 'doctor_failed', message })}\n`);
48
+ }
49
+ else {
50
+ output.stderr(`pappra doctor: ${message}\n`);
51
+ }
52
+ return 1;
53
+ }
54
+ }
55
+ export const doctorUsage = 'pappra doctor [--root <path>] [--json]\n\n' +
56
+ 'Read-only workspace, runtime, install-state, host, and tool diagnostics.\n' +
57
+ 'Doctor never installs, repairs, indexes, starts hosts/models, or removes locks/runtimes.\n';
@@ -0,0 +1,13 @@
1
+ import type { HostName } from '../../schemas/host.js';
2
+ import type { CliOutput } from '../output.js';
3
+ export declare const hostUsage: string;
4
+ export interface HostCommandOptions {
5
+ readonly cwd: string;
6
+ readonly json: boolean;
7
+ readonly action: 'detect' | 'describe' | 'plan' | 'install' | 'verify' | null;
8
+ readonly host: HostName | null;
9
+ readonly hostRoot: string | null;
10
+ readonly hostVersion: string | null;
11
+ readonly apply: boolean;
12
+ }
13
+ export declare function runHostCommand(options: HostCommandOptions, output: CliOutput): Promise<number>;
@@ -0,0 +1,125 @@
1
+ import { homedir } from 'node:os';
2
+ import { resolve } from 'node:path';
3
+ import { HostIntegrationService } from '../../hosts/integration/service.js';
4
+ export const hostUsage = 'pappra host <detect|describe|plan|install|verify> --host <pi|codex|claude>\n' +
5
+ ' [--host-root <dir>] [--host-version <version>] [--apply] [--json]';
6
+ function printDiagnostics(output, diagnostics) {
7
+ for (const entry of diagnostics) {
8
+ if (typeof entry === 'object' &&
9
+ entry !== null &&
10
+ 'message' in entry &&
11
+ typeof entry.message === 'string') {
12
+ if ('hint' in entry && typeof entry.hint === 'string') {
13
+ output.stderr(`${entry.message} Hint: ${entry.hint}\n`);
14
+ }
15
+ else {
16
+ output.stderr(`${entry.message}\n`);
17
+ }
18
+ }
19
+ }
20
+ }
21
+ function diagnosticStatus(status) {
22
+ return status === 'planned' ||
23
+ status === 'applied' ||
24
+ status === 'unchanged' ||
25
+ status === 'verified' ||
26
+ status === 'duplicate'
27
+ ? 0
28
+ : 1;
29
+ }
30
+ export async function runHostCommand(options, output) {
31
+ if (options.action === null || options.host === null) {
32
+ output.stderr('pappra: host requires an action and --host.\n');
33
+ return 2;
34
+ }
35
+ const service = new HostIntegrationService({
36
+ root: options.cwd,
37
+ homeDir: homedir(),
38
+ pathEnv: process.env.PATH ?? '',
39
+ hostVersion: options.hostVersion,
40
+ observedAt: new Date().toISOString(),
41
+ });
42
+ const hostRoot = options.hostRoot === null
43
+ ? undefined
44
+ : resolve(options.cwd, options.hostRoot);
45
+ const target = {
46
+ ...(hostRoot === undefined ? {} : { hostRoot }),
47
+ ...(options.hostVersion === null
48
+ ? {}
49
+ : { hostVersion: options.hostVersion }),
50
+ };
51
+ if (options.action === 'detect' || options.action === 'describe') {
52
+ const capabilities = service.describe(options.host);
53
+ if (options.json) {
54
+ output.stdout(`${JSON.stringify(capabilities)}\n`);
55
+ }
56
+ else {
57
+ output.stdout(`Host: ${capabilities.host} ${capabilities.version ?? '(unknown)'}\n`);
58
+ output.stdout(`Surface: ${capabilities.surface}\n`);
59
+ output.stdout(`Executable: ${capabilities.executablePath ?? 'missing'}\n`);
60
+ output.stdout(`Reload required: ${capabilities.reloadRequired ? 'yes' : 'no'}\n`);
61
+ output.stdout(`Trust required: ${capabilities.trustRequired ? 'yes' : 'no'}\n`);
62
+ for (const capability of capabilities.capabilities) {
63
+ output.stdout(` ${capability.event}: ${capability.state}${capability.nativeEvent === null ? '' : ` (${capability.nativeEvent})`}\n`);
64
+ }
65
+ }
66
+ return 0;
67
+ }
68
+ if (options.action === 'plan') {
69
+ try {
70
+ const plan = await service.plan(options.host, target);
71
+ if (options.json) {
72
+ output.stdout(`${JSON.stringify(plan)}\n`);
73
+ }
74
+ else {
75
+ output.stdout(`Host: ${plan.host} @ ${plan.hostRoot}\n`);
76
+ output.stdout(`Bundle: ${plan.bundleDigest}\n`);
77
+ for (const file of plan.files) {
78
+ output.stdout(` ${file.operation} ${file.path}\n`);
79
+ }
80
+ printDiagnostics(output, plan.diagnostics);
81
+ }
82
+ return 0;
83
+ }
84
+ catch (error) {
85
+ const message = error instanceof Error ? error.message : String(error);
86
+ if (options.json) {
87
+ output.stdout(`${JSON.stringify({ ok: false, command: 'host', code: 'host_plan_failed', message })}\n`);
88
+ }
89
+ else {
90
+ output.stderr(`pappra host: ${message}\n`);
91
+ }
92
+ return 1;
93
+ }
94
+ }
95
+ if (options.action === 'install') {
96
+ const result = await service.install(options.host, {
97
+ ...target,
98
+ apply: options.apply,
99
+ });
100
+ if (options.json) {
101
+ output.stdout(`${JSON.stringify(result)}\n`);
102
+ }
103
+ else {
104
+ output.stdout(`Status: ${result.status}\n`);
105
+ for (const file of result.appliedFiles)
106
+ output.stdout(` applied ${file}\n`);
107
+ for (const path of result.residualPaths)
108
+ output.stdout(` residual ${path}\n`);
109
+ printDiagnostics(output, result.diagnostics);
110
+ }
111
+ return diagnosticStatus(result.status);
112
+ }
113
+ const result = await service.verify(options.host, target);
114
+ if (options.json) {
115
+ output.stdout(`${JSON.stringify(result)}\n`);
116
+ }
117
+ else {
118
+ output.stdout(`Status: ${result.status}\n`);
119
+ for (const check of result.checks) {
120
+ output.stdout(` [${check.status}] ${check.id}: ${check.detail}\n`);
121
+ }
122
+ printDiagnostics(output, result.diagnostics);
123
+ }
124
+ return diagnosticStatus(result.status);
125
+ }
@@ -0,0 +1,51 @@
1
+ import type { Diagnostic } from '../../schemas/diagnostics.js';
2
+ import { type InitChoices } from '../../schemas/init.js';
3
+ import { type RuntimeInstallResult } from '../../install/runtime.js';
4
+ import { type InitContext } from '../../app/init.js';
5
+ import type { CliOutput } from '../output.js';
6
+ export interface SelectOption {
7
+ readonly value: string;
8
+ readonly label: string;
9
+ readonly hint?: string;
10
+ }
11
+ export interface WizardUi {
12
+ intro(message: string): void;
13
+ outro(message: string): void;
14
+ note(message: string, title: string): void;
15
+ text(message: string, initialValue?: string): Promise<string | symbol>;
16
+ select(message: string, options: readonly SelectOption[], initialValue?: string): Promise<string | symbol>;
17
+ multiselect(message: string, options: readonly SelectOption[], initialValues?: readonly string[]): Promise<readonly string[] | symbol>;
18
+ confirm(message: string, initialValue?: boolean): Promise<boolean | symbol>;
19
+ cancel(message: string): void;
20
+ }
21
+ export declare const clackWizardUi: WizardUi;
22
+ /**
23
+ * UI-only selection collection. All validation and plan generation remains in
24
+ * the app service; cancelling this function never writes to the workspace.
25
+ */
26
+ export declare function collectInitChoices(context: InitContext, ui: WizardUi): Promise<InitChoices | null>;
27
+ export interface InitCommandOptions {
28
+ readonly cwd: string;
29
+ readonly configPath: string | null;
30
+ readonly apply: boolean;
31
+ readonly json: boolean;
32
+ readonly installRuntime?: boolean;
33
+ readonly runtimeTarball?: string | null;
34
+ readonly runtimeVersion?: string | null;
35
+ }
36
+ export interface RuntimeFlowResult {
37
+ readonly ok: boolean;
38
+ readonly completion: boolean;
39
+ readonly runtime: RuntimeInstallResult | null;
40
+ readonly diagnostics: readonly Diagnostic[];
41
+ }
42
+ export interface InitCommandDeps {
43
+ readonly ui?: WizardUi;
44
+ readonly interactive?: boolean;
45
+ }
46
+ /**
47
+ * CLI command entry. In JSON mode no prompt is ever opened and stdout contains
48
+ * exactly one JSON document. Interactive selection is injected for tests.
49
+ */
50
+ export declare function runInitCommand(options: InitCommandOptions, output: CliOutput, deps?: InitCommandDeps): Promise<number>;
51
+ export declare const initUsage: string;