@dendelion/paper-camp 0.44.0 → 0.45.1

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 (68) hide show
  1. package/dist/chunks/{daemon-state.Evil_jr0.js → daemon-state.BEsOWFz5.js} +79 -75
  2. package/dist/chunks/daemon-state.BEsOWFz5.js.map +1 -0
  3. package/dist/chunks/{dev-port.BLsETEnM.js → dev-port.CKE4LWyl.js} +2 -2
  4. package/dist/chunks/{dev-port.BLsETEnM.js.map → dev-port.CKE4LWyl.js.map} +1 -1
  5. package/dist/chunks/phase-progress.BCqVUFLp.js +4094 -0
  6. package/dist/chunks/phase-progress.BCqVUFLp.js.map +1 -0
  7. package/dist/cli/index.js +7353 -6320
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/core/assets.d.ts +11 -0
  10. package/dist/core/assets.d.ts.map +1 -0
  11. package/dist/core/batch-readiness.d.ts +43 -0
  12. package/dist/core/batch-readiness.d.ts.map +1 -0
  13. package/dist/core/batch-readiness.test.d.ts +2 -0
  14. package/dist/core/batch-readiness.test.d.ts.map +1 -0
  15. package/dist/core/batch-run.d.ts +106 -0
  16. package/dist/core/batch-run.d.ts.map +1 -0
  17. package/dist/core/batch-run.test.d.ts +2 -0
  18. package/dist/core/batch-run.test.d.ts.map +1 -0
  19. package/dist/core/capacity.d.ts +6 -2
  20. package/dist/core/capacity.d.ts.map +1 -1
  21. package/dist/core/corpus.d.ts +13 -1
  22. package/dist/core/corpus.d.ts.map +1 -1
  23. package/dist/core/doctor/checks/assets.d.ts +3 -0
  24. package/dist/core/doctor/checks/assets.d.ts.map +1 -0
  25. package/dist/core/doctor/checks/assets.test.d.ts +2 -0
  26. package/dist/core/doctor/checks/assets.test.d.ts.map +1 -0
  27. package/dist/core/doctor/checks/local-state.d.ts +3 -0
  28. package/dist/core/doctor/checks/local-state.d.ts.map +1 -0
  29. package/dist/core/doctor/checks/local-state.test.d.ts +2 -0
  30. package/dist/core/doctor/checks/local-state.test.d.ts.map +1 -0
  31. package/dist/core/doctor/doctor.d.ts +12 -0
  32. package/dist/core/doctor/doctor.d.ts.map +1 -1
  33. package/dist/core/doctor/rules.d.ts +31 -1
  34. package/dist/core/doctor/rules.d.ts.map +1 -1
  35. package/dist/core/entity-view.d.ts.map +1 -1
  36. package/dist/core/git-log.d.ts +4 -0
  37. package/dist/core/git-log.d.ts.map +1 -1
  38. package/dist/core/git-pr/pr-lookup.d.ts.map +1 -1
  39. package/dist/core/index.js +154 -149
  40. package/dist/core/local-paths.d.ts +17 -0
  41. package/dist/core/local-paths.d.ts.map +1 -0
  42. package/dist/core/machine-registry/machine-registry.d.ts +3 -0
  43. package/dist/core/machine-registry/machine-registry.d.ts.map +1 -1
  44. package/dist/core/night-health.d.ts.map +1 -1
  45. package/dist/core/parse/schemas.d.ts +4 -0
  46. package/dist/core/parse/schemas.d.ts.map +1 -1
  47. package/dist/core/project-config.d.ts +2 -0
  48. package/dist/core/project-config.d.ts.map +1 -1
  49. package/dist/core/readers.d.ts.map +1 -1
  50. package/dist/core/release-notes.d.ts +7 -1
  51. package/dist/core/release-notes.d.ts.map +1 -1
  52. package/dist/core/scaffold/scaffold.d.ts +1 -0
  53. package/dist/core/scaffold/scaffold.d.ts.map +1 -1
  54. package/dist/core/stats.d.ts +3 -0
  55. package/dist/core/stats.d.ts.map +1 -1
  56. package/dist/core/trail.d.ts +6 -0
  57. package/dist/core/trail.d.ts.map +1 -1
  58. package/dist/toolbar/toolbar.js +3341 -3257
  59. package/dist/toolbar/toolbar.js.map +1 -1
  60. package/dist/types/index.d.ts +51 -5
  61. package/dist/types/index.d.ts.map +1 -1
  62. package/dist/types/index.js +24 -19
  63. package/dist/types/index.js.map +1 -1
  64. package/dist/vite/index.js +1 -1
  65. package/package.json +2 -1
  66. package/dist/chunks/daemon-state.Evil_jr0.js.map +0 -1
  67. package/dist/chunks/needs.BmY0GqQY.js +0 -3630
  68. package/dist/chunks/needs.BmY0GqQY.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ import { AssetEntry } from '../types/index';
2
+ export declare function mimeForAssetName(name: string): string;
3
+ export declare function sandboxCspForMime(mime: string): string | undefined;
4
+ /** A name must be exactly one path segment, so `..` and a slash are refused —
5
+ * both would otherwise escape `papercamp/assets/<id>/` (IDEA-322). */
6
+ export declare function isSafeAssetName(name: string): boolean;
7
+ export declare function ideaAssetsDir(assetsDir: string, id: string): string;
8
+ /** Lists one idea's folder under `papercamp/assets/<id>/` — the only source of
9
+ * truth for its files (IDEA-322); a missing folder is just no assets, not an error. */
10
+ export declare function listIdeaAssets(assetsDir: string, id: string): Promise<AssetEntry[]>;
11
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/core/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAyBjD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;sEACsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;uFACuF;AACvF,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBzF"}
@@ -0,0 +1,43 @@
1
+ import { PhaseItem, ResolvedNeed, ThreadMessage } from '../types/index';
2
+ export type BatchReadinessReason = 'needs' | 'manual-only' | 'open-question' | 'stale-base' | 'no-agent';
3
+ export type BatchReadiness = {
4
+ ready: true;
5
+ } | {
6
+ ready: false;
7
+ reason: BatchReadinessReason;
8
+ message: string;
9
+ };
10
+ /**
11
+ * Whether an idea/plan can be run unattended right now — `ready`, or the first
12
+ * reason it isn't, in the order IDEA-321 lists them. Callers resolve each input
13
+ * (needs, thread, git staleness, agent config) the same way `startRunAllPhases`
14
+ * and the run-order pass already do, so this stays a pure combinator over
15
+ * already-resolved facts rather than redoing any of that I/O.
16
+ */
17
+ export declare function batchReadiness(entity: {
18
+ resolvedNeeds?: ResolvedNeed[];
19
+ phases: PhaseItem[];
20
+ fixes?: PhaseItem[];
21
+ thread?: ThreadMessage[];
22
+ staleBase: string | null;
23
+ hasAgent: boolean;
24
+ }): BatchReadiness;
25
+ export interface BatchBacklogItem {
26
+ id: string;
27
+ title: string;
28
+ hasPhases: boolean;
29
+ }
30
+ /** Ideas that can't join the queue yet because their derived status is still `idea`:
31
+ * either no phases (draft them first) or phases under a stored `idea` status that
32
+ * the derivation couldn't promote (mark them planned). Oldest first, like the run
33
+ * order's own append rule. */
34
+ export declare function selectBatchBacklog(classified: {
35
+ id: string;
36
+ title: string;
37
+ created: string;
38
+ status?: string;
39
+ }[], entries: {
40
+ id: string;
41
+ phases: PhaseItem[];
42
+ }[]): BatchBacklogItem[];
43
+ //# sourceMappingURL=batch-readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-readiness.d.ts","sourceRoot":"","sources":["../../src/core/batch-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG7E,MAAM,MAAM,oBAAoB,GAC5B,OAAO,GACP,aAAa,GACb,eAAe,GACf,YAAY,GACZ,UAAU,CAAC;AAEf,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAUpE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,cAAc,CAwBjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;8BAG8B;AAC9B,wBAAgB,kBAAkB,CAChC,UAAU,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAC7E,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,EAAE,GAC7C,gBAAgB,EAAE,CAUpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=batch-readiness.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-readiness.test.d.ts","sourceRoot":"","sources":["../../src/core/batch-readiness.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ import { CheckName, RateLimitSnapshot } from '../types/index';
2
+ export interface BatchRunRules {
3
+ /** Add a run-order idea unblocked mid-batch by the one that just finished. */
4
+ pickupUnblocked: boolean;
5
+ /** Percent utilisation; defaults to the night settings' value when unset. */
6
+ ceiling?: number;
7
+ floor?: number;
8
+ onCeiling: 'wait' | 'stop';
9
+ /** Epoch ms — stop before starting the next idea once past this. */
10
+ stopAtMs?: number;
11
+ maxIdeas?: number;
12
+ maxCostUsd?: number;
13
+ /** Cut `idea/IDEA-N` from freshly fetched main for each idea instead of committing
14
+ * straight to main — for a project that ships through PRs (IDEA-321). */
15
+ branchPerIdea?: boolean;
16
+ }
17
+ export declare const DEFAULT_BATCH_RUN_RULES: BatchRunRules;
18
+ export type BatchRunItemOutcome = 'queued' | 'running' | 'review' | 'needs-you' | 'needs-human' | 'failed-clean' | 'failed-dirty' | 'red-checks' | 'auth' | 'conflict' | 'skipped' | 'stopped';
19
+ export interface BatchRunItem {
20
+ id: string;
21
+ title: string;
22
+ outcome: BatchRunItemOutcome;
23
+ reason?: string;
24
+ /** The per-idea run-all task id, once it has started. */
25
+ taskId?: string;
26
+ }
27
+ export type BatchRunPauseReason = {
28
+ kind: 'capacity-ceiling';
29
+ resetsAt?: number;
30
+ } | {
31
+ kind: 'capacity-floor';
32
+ } | {
33
+ kind: 'failed-dirty';
34
+ id: string;
35
+ } | {
36
+ kind: 'red-checks';
37
+ id: string;
38
+ } | {
39
+ kind: 'auth';
40
+ id: string;
41
+ } | {
42
+ kind: 'conflict';
43
+ id: string;
44
+ conflictPrompt: string;
45
+ };
46
+ export type BatchRunStatus = 'running' | 'paused' | 'done' | 'interrupted';
47
+ export interface BatchRunState {
48
+ taskId: string;
49
+ startedAt: string;
50
+ updatedAt: string;
51
+ rules: BatchRunRules;
52
+ /** Checks already red when the batch started — fixed for every idea in the run,
53
+ * rather than each idea recomputing its own baseline (IDEA-321). */
54
+ toleratedRed: CheckName[];
55
+ /** The ids ticked when the batch was started, in run order. */
56
+ initialIds: string[];
57
+ items: BatchRunItem[];
58
+ ideasRun: number;
59
+ costUsd: number;
60
+ status: BatchRunStatus;
61
+ pause?: BatchRunPauseReason;
62
+ }
63
+ /** Best-effort, like the other `.local` caches: a write failure must not fail the
64
+ * batch run that triggered it — worst case a restart loses the latest snapshot. */
65
+ export declare function writeBatchRunState(root: string, state: BatchRunState): Promise<void>;
66
+ export declare function readBatchRunState(root: string): Promise<BatchRunState | null>;
67
+ export declare function clearBatchRunState(root: string): Promise<void>;
68
+ /** A daemon restart mid-batch leaves nothing in memory to finish the run, so the
69
+ * persisted state is marked `interrupted` — distinct from `paused`, which the batch
70
+ * itself chose — and the app offers *Resume* either way (IDEA-321). */
71
+ export declare function markBatchRunInterrupted(root: string): Promise<boolean>;
72
+ export type CapacityGateResult = {
73
+ open: true;
74
+ } | {
75
+ open: false;
76
+ reason: 'ceiling';
77
+ resetsAt?: number;
78
+ } | {
79
+ open: false;
80
+ reason: 'floor';
81
+ };
82
+ /** The night gate (`evaluateNightGate`), slimmed to the two rate-limit checks the
83
+ * batch cares about — no dashboard-idle or time-window reason, since the user
84
+ * started this themselves (IDEA-321). */
85
+ export declare function evaluateBatchCapacityGate(input: {
86
+ snapshot: RateLimitSnapshot | null;
87
+ ceiling: number;
88
+ floor: number;
89
+ }): CapacityGateResult;
90
+ export type BudgetStopResult = {
91
+ stop: false;
92
+ } | {
93
+ stop: true;
94
+ reason: 'clock' | 'max-ideas' | 'max-cost';
95
+ };
96
+ /** The clock/count/cost limits set in the batch sheet — checked before starting the
97
+ * next idea, so a limit crossed mid-idea still lets that idea finish. */
98
+ export declare function evaluateBatchBudget(input: {
99
+ now: number;
100
+ stopAtMs?: number;
101
+ ideasRun: number;
102
+ maxIdeas?: number;
103
+ costUsd: number;
104
+ maxCostUsd?: number;
105
+ }): BudgetStopResult;
106
+ //# sourceMappingURL=batch-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-run.d.ts","sourceRoot":"","sources":["../../src/core/batch-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=batch-run.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-run.test.d.ts","sourceRoot":"","sources":["../../src/core/batch-run.test.ts"],"names":[],"mappings":""}
@@ -5,6 +5,10 @@ export interface CapacityRecord {
5
5
  capturedAt: string;
6
6
  source: CapacitySource;
7
7
  }
8
- export declare function writeCapacity(root: string, snapshot: RateLimitSnapshot, source: CapacitySource): Promise<void>;
9
- export declare function readCapacity(root: string): Promise<CapacityRecord | null>;
8
+ export declare function writeCapacity(snapshot: RateLimitSnapshot, source: CapacitySource): Promise<void>;
9
+ export declare function readCapacity(): Promise<CapacityRecord | null>;
10
+ /** Called by the IDEA-320 migration for each project that still has its own
11
+ * `papercamp/capacity.json` — the account's limits are the same everywhere, so
12
+ * whichever project's copy has the newest `capturedAt` wins the one machine file. */
13
+ export declare function adoptCapacityRecord(value: unknown): Promise<boolean>;
10
14
  //# sourceMappingURL=capacity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../src/core/capacity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB;AAkBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAS/E"}
1
+ {"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../src/core/capacity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB;AAkBD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CASnE;AAED;;qFAEqF;AACrF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E"}
@@ -22,7 +22,19 @@ export declare function readCorpus(root: string, opts?: {
22
22
  }): Promise<CorpusSnapshot>;
23
23
  export declare function readMaybe(path: string): Promise<string>;
24
24
  export declare function fileExists(path: string): Promise<boolean>;
25
- export declare const campFile: (root: string, name: string) => string;
25
+ export { GITATTRIBUTES_BLOCK_BODY, GITATTRIBUTES_BLOCK_END, GITATTRIBUTES_BLOCK_START, localFile, PLAN_NAMES, planFile, } from './local-paths';
26
+ export interface LocalStateDrift {
27
+ /** Files tracked by git under `papercamp/` whose top-level name isn't part of
28
+ * `PLAN_NAMES` — the committed-but-should-be-local drift IDEA-320 migrates away. */
29
+ trackedOutsidePlan: string[];
30
+ hasLocalGitignore: boolean;
31
+ hasGitattributesBlock: boolean;
32
+ }
33
+ export declare function localStateDriftCount(drift: LocalStateDrift | null): number;
34
+ /** Also used at daemon mount (for the projects page's drift total) and by `paper-camp
35
+ * doctor`/the git card, so the three checks live in one place next to what they check.
36
+ * `null` outside a git repo (nothing committed yet to drift, nothing to check). */
37
+ export declare function readLocalStateDrift(root: string): Promise<LocalStateDrift | null>;
26
38
  export type EntityFileInput = Parameters<typeof formatEntityFile>[0];
27
39
  export declare function entityFileInput(entry: EntityEntry, overrides?: Partial<EntityFileInput>): EntityFileInput;
28
40
  export declare function writeEntityFile(root: string, path: string, input: EntityFileInput): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../src/core/corpus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../src/core/corpus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { DoctorCheck } from '../doctor';
2
+ export declare const assetChecks: DoctorCheck[];
3
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../../src/core/doctor/checks/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AA2E/D,eAAO,MAAM,WAAW,EAAE,WAAW,EAIpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assets.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.test.d.ts","sourceRoot":"","sources":["../../../../src/core/doctor/checks/assets.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { DoctorCheck } from '../doctor';
2
+ export declare const localStateChecks: DoctorCheck[];
3
+ //# sourceMappingURL=local-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-state.d.ts","sourceRoot":"","sources":["../../../../src/core/doctor/checks/local-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAqC7C,eAAO,MAAM,gBAAgB,EAAE,WAAW,EAIzC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=local-state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-state.test.d.ts","sourceRoot":"","sources":["../../../../src/core/doctor/checks/local-state.test.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  import { PaperCampConfig } from '../../types/index';
2
+ import { LocalStateDrift } from '../corpus';
2
3
  import { DoctorFinding } from './finding';
3
4
  export interface DoctorEntityFile {
4
5
  id: string;
@@ -6,6 +7,14 @@ export interface DoctorEntityFile {
6
7
  content: string;
7
8
  archived: boolean;
8
9
  }
10
+ export interface DoctorAssetFile {
11
+ name: string;
12
+ size: number;
13
+ }
14
+ export interface DoctorAssetFolder {
15
+ id: string;
16
+ files: DoctorAssetFile[];
17
+ }
9
18
  export interface DoctorContext {
10
19
  files: DoctorEntityFile[];
11
20
  config: PaperCampConfig | null;
@@ -14,6 +23,9 @@ export interface DoctorContext {
14
23
  hasOpencodeJsonEntry?: boolean;
15
24
  draftPrWorkflowContent?: string | null;
16
25
  pullRequestTemplateContent?: string | null;
26
+ localStateDrift?: LocalStateDrift | null;
27
+ assetFolders?: DoctorAssetFolder[];
28
+ assetMaxBytes?: number;
17
29
  }
18
30
  export type DoctorCheck = (context: DoctorContext) => DoctorFinding[];
19
31
  export declare const DOCTOR_CHECKS: DoctorCheck[];
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,aAAa,EAAE,CAAC;AAEtE,eAAO,MAAM,aAAa,EAAE,WAAW,EAItC,CAAC;AAyEF,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAuCvF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,CAEvE;AAED,wBAAsB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAE9E"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAOjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,aAAa,EAAE,CAAC;AAEtE,eAAO,MAAM,aAAa,EAAE,WAAW,EAMtC,CAAC;AAgGF,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2CvF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,CAEvE;AAED,wBAAsB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAE9E"}
@@ -1,5 +1,5 @@
1
1
  export type DoctorSeverity = 'error' | 'warning';
2
- export type DoctorCategory = 'metadata' | 'structural' | 'tooling';
2
+ export type DoctorCategory = 'metadata' | 'structural' | 'tooling' | 'local-state' | 'assets';
3
3
  export interface DoctorRule {
4
4
  id: string;
5
5
  category: DoctorCategory;
@@ -86,6 +86,36 @@ export declare const DOCTOR_RULES: readonly [{
86
86
  readonly category: "tooling";
87
87
  readonly severity: "warning";
88
88
  readonly summary: "desk.ci.draftPr is on but the workflow or PR template file has no paper-camp template header, so it looks hand-written — paper-camp will not overwrite it.";
89
+ }, {
90
+ readonly id: "local-state-tracked-outside-plan";
91
+ readonly category: "local-state";
92
+ readonly severity: "warning";
93
+ readonly summary: "A file under papercamp/ is tracked by git but is not part of the committed plan (ideas/, config.json, suggestions.md, chat.md, about.md, assets/) — run `paper-camp doctor --fix` to move it to papercamp/.local/ or the account config dir and untrack it.";
94
+ }, {
95
+ readonly id: "local-state-missing-local-gitignore";
96
+ readonly category: "local-state";
97
+ readonly severity: "warning";
98
+ readonly summary: "papercamp/.local/.gitignore is missing, so nothing under papercamp/.local/ is protected from being committed — run `paper-camp doctor --fix` to create it.";
99
+ }, {
100
+ readonly id: "local-state-missing-gitattributes-block";
101
+ readonly category: "local-state";
102
+ readonly severity: "warning";
103
+ readonly summary: ".gitattributes has no paper-camp managed block, so two clones appending to papercamp/chat.md will conflict on pull instead of merging — run `paper-camp doctor --fix` to add it.";
104
+ }, {
105
+ readonly id: "asset-orphan-folder";
106
+ readonly category: "assets";
107
+ readonly severity: "warning";
108
+ readonly summary: "A folder under papercamp/assets/ has an id that matches no entity in the corpus — dead files left behind by a dropped or renamed idea.";
109
+ }, {
110
+ readonly id: "asset-oversized";
111
+ readonly category: "assets";
112
+ readonly severity: "warning";
113
+ readonly summary: "A file under papercamp/assets/<ID>/ is over the configured per-file limit (config.json assets.maxFileSizeMb, default 5MB).";
114
+ }, {
115
+ readonly id: "asset-dangling-link";
116
+ readonly category: "assets";
117
+ readonly severity: "warning";
118
+ readonly summary: "An idea links to `assets/<name>` or `../assets/<ID>/<name>` but no such file exists under papercamp/assets/.";
89
119
  }];
90
120
  export type DoctorRuleId = (typeof DOCTOR_RULES)[number]['id'];
91
121
  export declare const DOCTOR_RULES_BY_ID: Record<DoctorRuleId, DoctorRule>;
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/rules.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6GiB,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAE3B,CAAC"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/rules.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE9F,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuJiB,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAE3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"entity-view.d.ts","sourceRoot":"","sources":["../../src/core/entity-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,SAAS,EAET,MAAM,EACP,MAAM,gBAAgB,CAAC;AASxB;uGACuG;AACvG,wBAAgB,YAAY,CAC1B,CAAC,EAAE,WAAW,EACd,EAAE,CAAC,EAAE,MAAM,EACX,gBAAgB,UAAQ,EACxB,eAAe,UAAQ,GACtB,SAAS,CAgCX;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,CAYtD"}
1
+ {"version":3,"file":"entity-view.d.ts","sourceRoot":"","sources":["../../src/core/entity-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,SAAS,EAET,MAAM,EACP,MAAM,gBAAgB,CAAC;AASxB;uGACuG;AACvG,wBAAgB,YAAY,CAC1B,CAAC,EAAE,WAAW,EACd,EAAE,CAAC,EAAE,MAAM,EACX,gBAAgB,UAAQ,EACxB,eAAe,UAAQ,GACtB,SAAS,CAiCX;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,CAatD"}
@@ -29,6 +29,10 @@ export interface GitLogPage {
29
29
  upstream: string | null;
30
30
  hasMore: boolean;
31
31
  }
32
+ export declare function splitPrefix(subject: string): {
33
+ prefix: string;
34
+ subject: string;
35
+ };
32
36
  /** Exported for direct testing against `git log`'s %x1f/%x1e-separated output
33
37
  * without needing a full repo fixture for every case. */
34
38
  export declare function parseGitLogOutput(output: string, upstream: string | null, unpushed: Set<string>): GitLogCommit[];
@@ -1 +1 @@
1
- {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../src/core/git-log.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,aAAa,QAAsB,CAAC;AAIjD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED;6FAC6F;AAC7F,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQzE;AAwBD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AASD;;;6DAG6D;AAC7D,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAapF;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAoCD;yDACyD;AACzD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GACpB,YAAY,EAAE,CAqBhB;AAkBD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgB9D;AAED,qDAAqD;AACrD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAWrE;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAK,GACZ,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
1
+ {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../src/core/git-log.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,aAAa,QAAsB,CAAC;AAIjD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED;6FAC6F;AAC7F,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQzE;AAwBD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AASD;;;6DAG6D;AAC7D,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAapF;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAQD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGhF;AAyBD;yDACyD;AACzD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GACpB,YAAY,EAAE,CAqBhB;AAkBD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgB9D;AAED,qDAAqD;AACrD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAWrE;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAK,GACZ,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pr-lookup.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/pr-lookup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAkB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuF9E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,MAAM,GAAG,IAAI,CAKf;AA2BD;;;2BAG2B;AAC3B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK9F;AA+HD,sEAAsE;AACtE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkB/F;AAgBD,+GAA+G;AAC/G,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1F;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;IACjD,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;mFACmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuBD;qEACqE;AACrE,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED;;yEAEyE;AACzE,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAO3B;AA+CD;wEACwE;AACxE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,SAAkB,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CA2B1C;AAED;mFACmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAE3E;AAED;;;WAGW;AACX,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACzC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CAUpC;AAED;wEACwE;AACxE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU5E;AAED;;;;+EAI+E;AAC/E,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D"}
1
+ {"version":3,"file":"pr-lookup.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/pr-lookup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAkB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAwF9E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,MAAM,GAAG,IAAI,CAKf;AA2BD;;;2BAG2B;AAC3B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK9F;AA+HD,sEAAsE;AACtE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkB/F;AAgBD,+GAA+G;AAC/G,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1F;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;IACjD,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;mFACmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuBD;qEACqE;AACrE,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED;;yEAEyE;AACzE,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAO3B;AA+CD;wEACwE;AACxE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,SAAkB,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CA2B1C;AAED;mFACmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAE3E;AAED;;;WAGW;AACX,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACzC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CAUpC;AAED;wEACwE;AACxE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU5E;AAED;;;;+EAI+E;AAC/E,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D"}