@phyzess/pappra 0.1.0-beta.12 → 0.1.0-beta.14

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.
@@ -26,13 +26,8 @@ export declare function readClaudeSessionId(file: string): string | null;
26
26
  export declare function readPiSessionId(file: string): string | null;
27
27
  export declare function runNativePilot({ harness, profile, cwd, promptFile, evidenceDir, sessionId, resume, timeoutMs, maxBudgetUsd, outputName, phase, trustProject, extraDirs, clock, assignmentFile, capabilitiesFile, taskRoot, maxAgeMinutes, launchKind, discovery, }: PilotOptions): Promise<{
28
28
  reservation?: never;
29
- settlement?: never;
30
- reservation_id?: never;
31
29
  refused: boolean;
32
30
  admission: {
33
- owner_epoch?: never;
34
- detail?: never;
35
- state?: never;
36
31
  ok: false;
37
32
  reason: string;
38
33
  checks: Record<string, unknown>[];
@@ -41,6 +36,10 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
41
36
  required_skills?: never;
42
37
  required_tools?: never;
43
38
  preflight?: never;
39
+ state?: never;
40
+ detail?: never;
41
+ state_revision?: never;
42
+ owner_epoch?: never;
44
43
  attempt_state?: never;
45
44
  resources?: never;
46
45
  mode?: never;
@@ -51,12 +50,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
51
50
  capability_evidence?: never;
52
51
  assignment_digest?: never;
53
52
  input_revision?: never;
54
- state_revision?: never;
55
53
  } | {
56
- expected?: never;
57
- actual?: never;
58
- owner_epoch?: never;
59
- state?: never;
60
54
  ok: false;
61
55
  reason: string;
62
56
  checks: Record<string, unknown>[];
@@ -64,6 +58,11 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
64
58
  required_skills?: never;
65
59
  required_tools?: never;
66
60
  preflight?: never;
61
+ state?: never;
62
+ expected?: never;
63
+ actual?: never;
64
+ state_revision?: never;
65
+ owner_epoch?: never;
67
66
  attempt_state?: never;
68
67
  resources?: never;
69
68
  mode?: never;
@@ -74,19 +73,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
74
73
  capability_evidence?: never;
75
74
  assignment_digest?: never;
76
75
  input_revision?: never;
77
- state_revision?: never;
78
76
  } | {
79
- expected?: never;
80
- actual?: never;
81
- owner_epoch?: never;
82
- detail?: never;
83
- state?: never;
84
77
  ok: false;
85
78
  reason: string;
86
79
  checks: Record<string, unknown>[];
87
80
  required_skills?: never;
88
81
  required_tools?: never;
89
82
  preflight?: never;
83
+ state?: never;
84
+ detail?: never;
85
+ expected?: never;
86
+ actual?: never;
87
+ state_revision?: never;
88
+ owner_epoch?: never;
90
89
  attempt_state?: never;
91
90
  resources?: never;
92
91
  mode?: never;
@@ -97,11 +96,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
97
96
  capability_evidence?: never;
98
97
  assignment_digest?: never;
99
98
  input_revision?: never;
100
- state_revision?: never;
101
99
  } | {
102
- owner_epoch?: never;
103
- detail?: never;
104
- state?: never;
105
100
  ok: false;
106
101
  reason: string;
107
102
  checks: Record<string, unknown>[];
@@ -110,6 +105,10 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
110
105
  required_skills?: never;
111
106
  required_tools?: never;
112
107
  preflight?: never;
108
+ state?: never;
109
+ detail?: never;
110
+ state_revision?: never;
111
+ owner_epoch?: never;
113
112
  attempt_state?: never;
114
113
  resources?: never;
115
114
  mode?: never;
@@ -120,11 +119,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
120
119
  capability_evidence?: never;
121
120
  assignment_digest?: never;
122
121
  input_revision?: never;
123
- state_revision?: never;
124
122
  } | {
125
- owner_epoch?: never;
126
- detail?: never;
127
- state?: never;
128
123
  ok: false;
129
124
  reason: string;
130
125
  checks: Record<string, unknown>[];
@@ -138,6 +133,10 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
138
133
  required_skills?: never;
139
134
  required_tools?: never;
140
135
  preflight?: never;
136
+ state?: never;
137
+ detail?: never;
138
+ state_revision?: never;
139
+ owner_epoch?: never;
141
140
  attempt_state?: never;
142
141
  resources?: never;
143
142
  mode?: never;
@@ -148,10 +147,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
148
147
  capability_evidence?: never;
149
148
  assignment_digest?: never;
150
149
  input_revision?: never;
151
- state_revision?: never;
152
150
  } | {
153
- owner_epoch?: never;
154
- state?: never;
155
151
  ok: false;
156
152
  reason: string;
157
153
  checks: Record<string, unknown>[];
@@ -161,6 +157,9 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
161
157
  required_skills?: never;
162
158
  required_tools?: never;
163
159
  preflight?: never;
160
+ state?: never;
161
+ state_revision?: never;
162
+ owner_epoch?: never;
164
163
  attempt_state?: never;
165
164
  resources?: never;
166
165
  mode?: never;
@@ -171,19 +170,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
171
170
  capability_evidence?: never;
172
171
  assignment_digest?: never;
173
172
  input_revision?: never;
174
- state_revision?: never;
175
173
  } | {
176
- expected?: never;
177
- actual?: never;
178
- owner_epoch?: never;
179
- detail?: never;
180
- state?: never;
181
174
  ok: false;
182
175
  reason: string;
183
176
  checks: Record<string, unknown>[];
184
177
  required_skills: number;
185
178
  required_tools: number;
186
179
  preflight?: never;
180
+ state?: never;
181
+ detail?: never;
182
+ expected?: never;
183
+ actual?: never;
184
+ state_revision?: never;
185
+ owner_epoch?: never;
187
186
  attempt_state?: never;
188
187
  resources?: never;
189
188
  mode?: never;
@@ -194,13 +193,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
194
193
  capability_evidence?: never;
195
194
  assignment_digest?: never;
196
195
  input_revision?: never;
197
- state_revision?: never;
198
196
  } | {
199
- expected?: never;
200
- actual?: never;
201
- owner_epoch?: never;
202
- detail?: never;
203
- state?: never;
204
197
  required_skills?: never;
205
198
  required_tools?: never;
206
199
  ok: false;
@@ -213,9 +206,9 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
213
206
  warnings: never[];
214
207
  task_id?: never;
215
208
  assignment_id?: never;
209
+ attempt?: never;
216
210
  checked_at?: never;
217
211
  limits?: never;
218
- attempt?: never;
219
212
  } | {
220
213
  status: string;
221
214
  task_id: string;
@@ -227,6 +220,12 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
227
220
  warnings: import("../collab/preflight.js").Check[];
228
221
  limits: string[];
229
222
  };
223
+ state?: never;
224
+ detail?: never;
225
+ expected?: never;
226
+ actual?: never;
227
+ state_revision?: never;
228
+ owner_epoch?: never;
230
229
  attempt_state?: never;
231
230
  resources?: never;
232
231
  mode?: never;
@@ -237,12 +236,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
237
236
  capability_evidence?: never;
238
237
  assignment_digest?: never;
239
238
  input_revision?: never;
240
- state_revision?: never;
241
239
  } | {
242
- expected?: never;
243
- actual?: never;
244
- owner_epoch?: never;
245
- detail?: never;
246
240
  required_skills?: never;
247
241
  required_tools?: never;
248
242
  preflight?: never;
@@ -250,6 +244,11 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
250
244
  reason: string;
251
245
  checks: Record<string, unknown>[];
252
246
  state: string;
247
+ detail?: never;
248
+ expected?: never;
249
+ actual?: never;
250
+ state_revision?: never;
251
+ owner_epoch?: never;
253
252
  attempt_state?: never;
254
253
  resources?: never;
255
254
  mode?: never;
@@ -260,19 +259,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
260
259
  capability_evidence?: never;
261
260
  assignment_digest?: never;
262
261
  input_revision?: never;
263
- state_revision?: never;
264
262
  } | {
265
- owner_epoch?: never;
266
- detail?: never;
267
- state?: never;
268
263
  required_skills?: never;
269
264
  required_tools?: never;
270
265
  preflight?: never;
266
+ state?: never;
271
267
  ok: false;
272
268
  reason: string;
273
269
  checks: Record<string, unknown>[];
274
270
  expected: (string | null)[];
275
271
  actual: string;
272
+ detail?: never;
273
+ state_revision?: never;
274
+ owner_epoch?: never;
276
275
  attempt_state?: never;
277
276
  resources?: never;
278
277
  mode?: never;
@@ -283,20 +282,20 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
283
282
  capability_evidence?: never;
284
283
  assignment_digest?: never;
285
284
  input_revision?: never;
286
- state_revision?: never;
287
285
  } | {
288
- expected?: never;
289
- actual?: never;
290
- owner_epoch?: never;
291
- state?: never;
292
286
  required_skills?: never;
293
287
  required_tools?: never;
294
288
  preflight?: never;
289
+ state?: never;
295
290
  ok: false;
296
291
  reason: string;
297
292
  checks: Record<string, unknown>[];
298
293
  resources: Record<string, unknown>[];
299
294
  detail: string;
295
+ expected?: never;
296
+ actual?: never;
297
+ state_revision?: never;
298
+ owner_epoch?: never;
300
299
  attempt_state?: never;
301
300
  mode?: never;
302
301
  launch_kind?: never;
@@ -306,20 +305,20 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
306
305
  capability_evidence?: never;
307
306
  assignment_digest?: never;
308
307
  input_revision?: never;
309
- state_revision?: never;
310
308
  } | {
311
- owner_epoch?: never;
312
- detail?: never;
313
- state?: never;
314
309
  required_skills?: never;
315
310
  required_tools?: never;
316
311
  preflight?: never;
312
+ state?: never;
313
+ detail?: never;
317
314
  ok: false;
318
315
  reason: string;
319
316
  checks: Record<string, unknown>[];
320
317
  resources: Record<string, unknown>[];
321
318
  expected: number | undefined;
322
319
  actual: number;
320
+ state_revision?: never;
321
+ owner_epoch?: never;
323
322
  attempt_state?: never;
324
323
  mode?: never;
325
324
  launch_kind?: never;
@@ -329,20 +328,20 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
329
328
  capability_evidence?: never;
330
329
  assignment_digest?: never;
331
330
  input_revision?: never;
332
- state_revision?: never;
333
331
  } | {
334
- expected?: never;
335
- actual?: never;
336
- owner_epoch?: never;
337
- detail?: never;
338
- state?: never;
339
332
  required_skills?: never;
340
333
  required_tools?: never;
341
334
  preflight?: never;
335
+ state?: never;
336
+ detail?: never;
337
+ expected?: never;
338
+ actual?: never;
342
339
  ok: false;
343
340
  reason: string;
344
341
  checks: Record<string, unknown>[];
345
342
  resources: Record<string, unknown>[];
343
+ state_revision?: never;
344
+ owner_epoch?: never;
346
345
  attempt_state?: never;
347
346
  mode?: never;
348
347
  launch_kind?: never;
@@ -352,7 +351,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
352
351
  capability_evidence?: never;
353
352
  assignment_digest?: never;
354
353
  input_revision?: never;
355
- state_revision?: never;
356
354
  };
357
355
  reason: string;
358
356
  process?: never;
@@ -363,19 +361,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
363
361
  stdoutFile?: never;
364
362
  stderrFile?: never;
365
363
  nativeEvidence?: never;
366
- } | {
367
- settlement?: never;
368
364
  reservation_id?: never;
365
+ settlement?: never;
366
+ } | {
369
367
  refused: boolean;
370
368
  admission: {
371
- reason?: never;
372
- expected?: never;
373
- actual?: never;
374
- detail?: never;
375
- state?: never;
376
369
  required_skills?: never;
377
370
  required_tools?: never;
378
371
  preflight?: never;
372
+ state?: never;
373
+ detail?: never;
374
+ expected?: never;
375
+ actual?: never;
376
+ reason?: never;
379
377
  ok: true;
380
378
  checks: Record<string, unknown>[];
381
379
  state_revision: number;
@@ -405,12 +403,13 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
405
403
  stdoutFile?: never;
406
404
  stderrFile?: never;
407
405
  nativeEvidence?: never;
406
+ reservation_id?: never;
407
+ settlement?: never;
408
408
  } | {
409
409
  reason?: never;
410
410
  reservation?: never;
411
- admission?: never;
412
411
  refused?: never;
413
- reservation_id?: never;
412
+ admission?: never;
414
413
  execution: null;
415
414
  evidenceError: string;
416
415
  settlement: {
@@ -436,12 +435,12 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
436
435
  stdoutFile?: never;
437
436
  stderrFile?: never;
438
437
  nativeEvidence?: never;
438
+ reservation_id?: never;
439
439
  } | {
440
440
  reason?: never;
441
441
  reservation?: never;
442
- admission?: never;
443
442
  refused?: never;
444
- reservation_id?: never;
443
+ admission?: never;
445
444
  process?: never;
446
445
  execution: Record<string, unknown> | null;
447
446
  evidenceError: string;
@@ -459,11 +458,12 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
459
458
  stdoutFile?: never;
460
459
  stderrFile?: never;
461
460
  nativeEvidence?: never;
461
+ reservation_id?: never;
462
462
  } | {
463
463
  reason?: never;
464
464
  reservation?: never;
465
- admission?: never;
466
465
  refused?: never;
466
+ admission?: never;
467
467
  process?: never;
468
468
  evidenceError?: never;
469
469
  execution: Record<string, unknown>;
@@ -0,0 +1,30 @@
1
+ import type { Diagnostic } from '../schemas/diagnostics.js';
2
+ import type { DocumentKind } from '../schemas/document.js';
3
+ export interface DocumentScanCandidate {
4
+ readonly path: string;
5
+ readonly kind: DocumentKind;
6
+ readonly visibility: 'private' | 'shareable';
7
+ }
8
+ export interface DocumentScanResult {
9
+ readonly ok: boolean;
10
+ readonly schema: 'pappra/docs-scan/1';
11
+ readonly mode: 'plan' | 'apply';
12
+ readonly workspaceRoot: string;
13
+ readonly candidates: readonly DocumentScanCandidate[];
14
+ readonly registered: readonly unknown[];
15
+ readonly skipped: number;
16
+ readonly nextActions: readonly string[];
17
+ readonly diagnostics: readonly Diagnostic[];
18
+ }
19
+ export type DocumentScanFailure = {
20
+ readonly ok: false;
21
+ readonly message: string;
22
+ } | DocumentScanResult;
23
+ export declare function classifyScannedDocumentKind(path: string): DocumentKind;
24
+ /**
25
+ * Registers documents discovered under the configured knowledge sources.
26
+ * Without apply this is read-only and reports the candidates.
27
+ */
28
+ export declare function scanDiscoveredDocuments(root: string, options: {
29
+ readonly apply: boolean;
30
+ }): Promise<DocumentScanFailure>;
@@ -0,0 +1,91 @@
1
+ import { discoverWorkspace } from '../workspace/discover.js';
2
+ import { KnowledgeService } from './index.js';
3
+ export function classifyScannedDocumentKind(path) {
4
+ const lower = path.toLowerCase();
5
+ if (lower.endsWith('agents.md') || lower.endsWith('claude.md'))
6
+ return 'rule';
7
+ if (lower.includes('/research/'))
8
+ return 'research';
9
+ if (lower.includes('/adr/') || lower.includes('decision'))
10
+ return 'decision';
11
+ if (lower.includes('review') || lower.includes('retro'))
12
+ return 'review';
13
+ if (lower.includes('plan'))
14
+ return 'plan';
15
+ return 'architecture';
16
+ }
17
+ /**
18
+ * Registers documents discovered under the configured knowledge sources.
19
+ * Without apply this is read-only and reports the candidates.
20
+ */
21
+ export async function scanDiscoveredDocuments(root, options) {
22
+ const discovery = await discoverWorkspace(root);
23
+ const config = discovery.config;
24
+ if (config === null) {
25
+ return {
26
+ ok: false,
27
+ message: 'docs scan requires a valid .pappra/workspace.json; run pappra init first.',
28
+ };
29
+ }
30
+ const service = new KnowledgeService(root);
31
+ const listed = await service.list({ includePrivate: true });
32
+ const registered = new Set(listed.records.flatMap((record) => record.location.kind === 'workspace' ? [record.location.path] : []));
33
+ const sources = config.knowledge.sources;
34
+ const visibility = config.knowledge.taskVisibility === 'shared' ? 'shareable' : 'private';
35
+ const candidates = [];
36
+ for (const document of discovery.documents ?? []) {
37
+ const path = document.workspaceRelativePath;
38
+ if (path === null)
39
+ continue;
40
+ if (!sources.some((source) => path === source || path.startsWith(`${source}/`))) {
41
+ continue;
42
+ }
43
+ if (registered.has(path))
44
+ continue;
45
+ candidates.push({
46
+ path,
47
+ kind: classifyScannedDocumentKind(path),
48
+ visibility,
49
+ });
50
+ }
51
+ const diagnostics = [...listed.diagnostics];
52
+ if (!options.apply) {
53
+ return {
54
+ ok: true,
55
+ schema: 'pappra/docs-scan/1',
56
+ mode: 'plan',
57
+ workspaceRoot: root,
58
+ candidates,
59
+ registered: [],
60
+ skipped: candidates.length,
61
+ nextActions: [
62
+ 'Rerun with apply: true to register these documents in the knowledge catalog.',
63
+ ],
64
+ diagnostics,
65
+ };
66
+ }
67
+ const registeredNow = [];
68
+ for (const candidate of candidates) {
69
+ const result = await service.register({
70
+ location: { kind: 'workspace', path: candidate.path },
71
+ kind: candidate.kind,
72
+ maturity: 'draft',
73
+ owner: 'human',
74
+ visibility: candidate.visibility,
75
+ });
76
+ diagnostics.push(...result.diagnostics);
77
+ if (result.ok)
78
+ registeredNow.push(result.record);
79
+ }
80
+ return {
81
+ ok: diagnostics.every((entry) => entry.severity !== 'error'),
82
+ schema: 'pappra/docs-scan/1',
83
+ mode: 'apply',
84
+ workspaceRoot: root,
85
+ candidates,
86
+ registered: registeredNow,
87
+ skipped: candidates.length - registeredNow.length,
88
+ nextActions: [],
89
+ diagnostics,
90
+ };
91
+ }
@@ -0,0 +1,11 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const MCP_SERVER_NAME = "pappra";
3
+ export interface PappraMcpServerOptions {
4
+ readonly root: string;
5
+ }
6
+ /**
7
+ * Builds the stdio MCP server for one workspace. Tools are read-only here; write
8
+ * operations are added separately and must stay behind apply/confirm gates.
9
+ */
10
+ export declare function createPappraMcpServer(options: PappraMcpServerOptions): McpServer;
11
+ export declare function runMcpServer(root: string): Promise<void>;