@dendelion/paper-camp 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/app/assets/index-C0wWs5ba.js +2 -0
  2. package/dist/app/assets/index-C0wWs5ba.js.map +1 -0
  3. package/dist/app/assets/index-D-nmg_4I.js +2 -0
  4. package/dist/app/assets/index-D-nmg_4I.js.map +1 -0
  5. package/dist/app/assets/index-Djq8LvrZ.js +3 -0
  6. package/dist/app/assets/index-Djq8LvrZ.js.map +1 -0
  7. package/dist/app/assets/main-BA1w2y_E.css +1 -0
  8. package/dist/app/assets/main-DUy5DFoq.js +218 -0
  9. package/dist/app/assets/main-DUy5DFoq.js.map +1 -0
  10. package/dist/app/assets/sidebar-section-mXpllayv.js +2 -0
  11. package/dist/app/assets/sidebar-section-mXpllayv.js.map +1 -0
  12. package/dist/app/img/paper-logo.png +0 -0
  13. package/dist/app/img/paper-logo.svg +7 -0
  14. package/dist/app/index.html +7 -3
  15. package/dist/app/manifest.json +13 -0
  16. package/dist/chunks/{serializer.DiYtNSka.js → serializer.DqcFa2e1.js} +1778 -1397
  17. package/dist/chunks/serializer.DqcFa2e1.js.map +1 -0
  18. package/dist/cli/index.js +6743 -6301
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/core/env.d.ts +0 -5
  21. package/dist/core/env.d.ts.map +1 -1
  22. package/dist/core/git-pr/branch.d.ts +4 -0
  23. package/dist/core/git-pr/branch.d.ts.map +1 -0
  24. package/dist/core/git-pr/index.d.ts +4 -0
  25. package/dist/core/git-pr/index.d.ts.map +1 -0
  26. package/dist/core/git-pr/pr-lookup.d.ts +16 -0
  27. package/dist/core/git-pr/pr-lookup.d.ts.map +1 -0
  28. package/dist/core/git-pr/pr.d.ts +25 -0
  29. package/dist/core/git-pr/pr.d.ts.map +1 -0
  30. package/dist/core/{pr.test.d.ts.map → git-pr/pr.test.d.ts.map} +1 -1
  31. package/dist/core/git-pr/scopes.d.ts +2 -0
  32. package/dist/core/git-pr/scopes.d.ts.map +1 -0
  33. package/dist/core/index.d.ts +3 -3
  34. package/dist/core/index.d.ts.map +1 -1
  35. package/dist/core/index.js +77 -55
  36. package/dist/core/parse/entity.test.d.ts.map +1 -0
  37. package/dist/core/parse/frontmatter-schemas.d.ts +3 -0
  38. package/dist/core/parse/frontmatter-schemas.d.ts.map +1 -0
  39. package/dist/core/parse/frontmatter.test.d.ts.map +1 -0
  40. package/dist/core/parse/index.d.ts +3 -0
  41. package/dist/core/parse/index.d.ts.map +1 -0
  42. package/dist/core/parse/parser.d.ts +22 -0
  43. package/dist/core/parse/parser.d.ts.map +1 -0
  44. package/dist/core/parse/parser.test.d.ts.map +1 -0
  45. package/dist/core/parse/schemas.d.ts.map +1 -0
  46. package/dist/core/readers.d.ts +0 -19
  47. package/dist/core/readers.d.ts.map +1 -1
  48. package/dist/core/scaffold/index.d.ts +3 -0
  49. package/dist/core/scaffold/index.d.ts.map +1 -0
  50. package/dist/core/{scaffold.d.ts → scaffold/scaffold.d.ts} +0 -6
  51. package/dist/core/scaffold/scaffold.d.ts.map +1 -0
  52. package/dist/core/scaffold/scaffold.test.d.ts.map +1 -0
  53. package/dist/core/{templates.d.ts → scaffold/templates.d.ts} +0 -6
  54. package/dist/core/scaffold/templates.d.ts.map +1 -0
  55. package/dist/core/serialize/content-hash.d.ts +8 -0
  56. package/dist/core/serialize/content-hash.d.ts.map +1 -0
  57. package/dist/core/serialize/content-hash.test.d.ts.map +1 -0
  58. package/dist/core/serialize/index.d.ts +3 -0
  59. package/dist/core/serialize/index.d.ts.map +1 -0
  60. package/dist/core/{serializer.d.ts → serialize/serializer.d.ts} +2 -50
  61. package/dist/core/serialize/serializer.d.ts.map +1 -0
  62. package/dist/core/status/index.d.ts +2 -0
  63. package/dist/core/status/index.d.ts.map +1 -0
  64. package/dist/core/status/status.d.ts +8 -0
  65. package/dist/core/status/status.d.ts.map +1 -0
  66. package/dist/core/status/status.test.d.ts.map +1 -0
  67. package/dist/img/paper-logo.png +0 -0
  68. package/dist/img/paper-logo.svg +7 -0
  69. package/dist/manifest.json +13 -0
  70. package/dist/types/index.d.ts +36 -9
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/index.js.map +1 -1
  73. package/package.json +7 -2
  74. package/dist/app/assets/main-5JSkR2Qf.js +0 -182
  75. package/dist/app/assets/main-5JSkR2Qf.js.map +0 -1
  76. package/dist/app/assets/main-B8HU5n_F.css +0 -1
  77. package/dist/chunks/serializer.DiYtNSka.js.map +0 -1
  78. package/dist/core/branch.d.ts +0 -8
  79. package/dist/core/branch.d.ts.map +0 -1
  80. package/dist/core/content-hash.d.ts +0 -14
  81. package/dist/core/content-hash.d.ts.map +0 -1
  82. package/dist/core/content-hash.test.d.ts.map +0 -1
  83. package/dist/core/entity.test.d.ts.map +0 -1
  84. package/dist/core/frontmatter-schemas.d.ts +0 -11
  85. package/dist/core/frontmatter-schemas.d.ts.map +0 -1
  86. package/dist/core/frontmatter.test.d.ts.map +0 -1
  87. package/dist/core/parser.d.ts +0 -45
  88. package/dist/core/parser.d.ts.map +0 -1
  89. package/dist/core/parser.test.d.ts.map +0 -1
  90. package/dist/core/pr.d.ts +0 -27
  91. package/dist/core/pr.d.ts.map +0 -1
  92. package/dist/core/scaffold.d.ts.map +0 -1
  93. package/dist/core/scaffold.test.d.ts.map +0 -1
  94. package/dist/core/schemas.d.ts.map +0 -1
  95. package/dist/core/serializer.d.ts.map +0 -1
  96. package/dist/core/status.d.ts +0 -27
  97. package/dist/core/status.d.ts.map +0 -1
  98. package/dist/core/status.test.d.ts.map +0 -1
  99. package/dist/core/templates.d.ts.map +0 -1
  100. /package/dist/core/{pr.test.d.ts → git-pr/pr.test.d.ts} +0 -0
  101. /package/dist/core/{entity.test.d.ts → parse/entity.test.d.ts} +0 -0
  102. /package/dist/core/{frontmatter.test.d.ts → parse/frontmatter.test.d.ts} +0 -0
  103. /package/dist/core/{parser.test.d.ts → parse/parser.test.d.ts} +0 -0
  104. /package/dist/core/{schemas.d.ts → parse/schemas.d.ts} +0 -0
  105. /package/dist/core/{scaffold.test.d.ts → scaffold/scaffold.test.d.ts} +0 -0
  106. /package/dist/core/{content-hash.test.d.ts → serialize/content-hash.test.d.ts} +0 -0
  107. /package/dist/core/{status.test.d.ts → status/status.test.d.ts} +0 -0
@@ -1,9 +1,4 @@
1
1
  import { EnvEntry } from '../types/index';
2
- /** Parses `KEY=value` lines, skipping comments and blank lines. */
3
2
  export declare function parseEnv(content: string): EnvEntry[];
4
- /**
5
- * Replaces matched-key lines in place, drops keys no longer present, and appends
6
- * new keys at the end — preserving comments and the ordering of every untouched line.
7
- */
8
3
  export declare function applyEnvEntries(content: string, entries: EnvEntry[]): string;
9
4
  //# sourceMappingURL=env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/core/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA2B/C,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAOpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAuB5E"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/core/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA2B/C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAOpD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAuB5E"}
@@ -0,0 +1,4 @@
1
+ /** Matches the `kind/id-slug` convention that `branchEntityId`/`getFeatureBranchPlanId`
2
+ * parse back out — shared so branch creation and PR resolution target the same name. */
3
+ export declare function branchName(id: string | undefined, type: string | undefined, title: string): string | undefined;
4
+ //# sourceMappingURL=branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/branch.ts"],"names":[],"mappings":"AAAA;wFACwF;AACxF,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CAQpB"}
@@ -0,0 +1,4 @@
1
+ export * from './pr';
2
+ export * from './branch';
3
+ export * from './scopes';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { PrInfo, ReviewThread } from '../../types/index';
2
+ export declare function resolveEntityIdFromPrRef(body: string | null | undefined, branch: string | null | undefined): string | null;
3
+ export declare function parsePrUrl(url: string): {
4
+ owner: string;
5
+ repo: string;
6
+ number: string;
7
+ } | null;
8
+ /** Best-effort: resolves `[]` on any failure rather than throwing. */
9
+ export declare function fetchUnresolvedThreads(root: string, url: string): Promise<ReviewThread[]>;
10
+ /** Best-effort: returns `false` on any failure — a failed resolve must not fail the push that triggered it. */
11
+ export declare function resolveReviewThread(root: string, threadId: string): Promise<boolean>;
12
+ export declare function replyToReviewThread(root: string, threadId: string, body: string): Promise<boolean>;
13
+ /** `undefined` means the lookup couldn't resolve at all; callers fall back to stored status. */
14
+ export declare function resolvePrsByEntity(root: string, ttlMs?: number): Promise<Map<string, PrInfo> | undefined>;
15
+ export declare function clearPrCache(): void;
16
+ //# sourceMappingURL=pr-lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-lookup.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/pr-lookup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAkB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA2C9E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,MAAM,GAAG,IAAI,CAKf;AA8BD,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;AA0HD,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;AA4ED,gGAAgG;AAChG,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,SAAkB,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAQ1C;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -0,0 +1,25 @@
1
+ import { ConsistencyIssue, EntityType, PhaseItem } from '../../types/index';
2
+ export { clearPrCache, fetchUnresolvedThreads, replyToReviewThread, resolvePrsByEntity, resolveReviewThread, } from './pr-lookup';
3
+ export interface ResolvedPlanForPr {
4
+ id: string;
5
+ kind?: EntityType;
6
+ tags: string[];
7
+ phases: PhaseItem[];
8
+ }
9
+ export declare function resolvePlanForPrRef(root: string, ref: string): Promise<ResolvedPlanForPr | undefined>;
10
+ export declare function renderPlanPhasesIntoBody(body: string, phases: PhaseItem[]): string;
11
+ export type SyncPlanPhasesResult = 'updated' | 'unchanged' | 'unresolved';
12
+ export declare function syncPlanPhasesToPr(root: string, ref: string): Promise<SyncPlanPhasesResult>;
13
+ export declare function derivePrLabels(plan: Pick<ResolvedPlanForPr, 'kind' | 'tags'>): string[];
14
+ export type SyncPrLabelsResult = 'updated' | 'unchanged' | 'unresolved';
15
+ export declare function syncPrLabelsToPr(root: string, ref: string): Promise<SyncPrLabelsResult>;
16
+ export type SyncPrReadinessResult = 'ready' | 'closed' | 'unchanged' | 'unresolved';
17
+ export declare function syncPrReadinessToPr(root: string, ref: string): Promise<SyncPrReadinessResult>;
18
+ interface AuditSummary {
19
+ audited: string;
20
+ stale: boolean;
21
+ }
22
+ export declare function renderConsistencyComment(issues: ConsistencyIssue[], audit?: AuditSummary): string;
23
+ export type SyncConsistencyCommentResult = 'created' | 'updated' | 'unchanged' | 'unresolved';
24
+ export declare function syncConsistencyCommentToPr(root: string, ref: string): Promise<SyncConsistencyCommentResult>;
25
+ //# sourceMappingURL=pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/pr.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAe,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAY9F,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AA2DrB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AA0BD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAKxC;AAMD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAOlF;AAeD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAE1E,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAUjG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,EAAE,CAOvF;AAyDD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAExE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoB7F;AA0BD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,qBAAqB,CAAC,CAgBhC;AAKD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBjG;AAiDD,MAAM,MAAM,4BAA4B,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAE9F,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,4BAA4B,CAAC,CAuCvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pr.test.d.ts","sourceRoot":"","sources":["../../src/core/pr.test.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"pr.test.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/pr.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const COMMIT_SCOPES: Set<string>;
2
+ //# sourceMappingURL=scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../../src/core/git-pr/scopes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,aAmBxB,CAAC"}
@@ -1,8 +1,8 @@
1
1
  export * from './env';
2
- export * from './parser';
3
2
  export * from './readers';
4
- export * from './schemas';
3
+ export * from './parse';
4
+ export * from './git-pr';
5
5
  export * from './scaffold';
6
- export * from './serializer';
6
+ export * from './serialize';
7
7
  export * from '../types/index';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -1,60 +1,82 @@
1
- import { A as e, P as t, a as r, b as n, c as i, d as o, e as p, f as m, g as E, h as d, i as l, j as S, k as c, l as P, m as f, n as F, o as y, p as I, q as A, r as g, s as h, t as N, u as T, v as D, w as _, x as u, y as C, z as O, B as L, C as v, D as G, E as Q, F as x, G as R, H as k, I as z, J as B, K as U, L as j, M as w, N as K, O as M, Q as V, R as W, S as b, T as q, U as H, V as J } from "../chunks/serializer.DiYtNSka.js";
2
- import { AGENT_IDS as Y, AGENT_LABELS as Z, AGENT_OPTIONS as $, DEFAULT_AGENTS as aa, PLAN_KINDS as sa, PLAN_STATUSES as ea, coerceAgentConfig as ta } from "../types/index.js";
1
+ import { A as e, C as r, a as n, P as t, S as i, b as o, c as l, d as E, e as d, f as m, g as P, h as p, i as S, j as c, k as T, l as y, m as f, n as h, o as I, p as g, q as F, r as N, s as C, t as _, u as A, v, w as L, x as O, y as u, z as D, B as R, D as G, E as U, F as b, G as B, H as M, I as Q, J as k, K as w, L as x, M as z, N as K, O as W, Q as j, R as H, T as J, U as V, V as Y, W as q, X, Y as Z, Z as $, _ as aa, $ as sa, a0 as ea, a1 as ra, a2 as na, a3 as ta, a4 as ia, a5 as oa, a6 as la, a7 as Ea, a8 as da, a9 as ma, aa as Pa, ab as pa, ac as Sa, ad as ca, ae as Ta, af as ya } from "../chunks/serializer.DqcFa2e1.js";
2
+ import { AGENT_IDS as ha, AGENT_LABELS as Ia, AGENT_OPTIONS as ga, DEFAULT_AGENTS as Fa, PLAN_KINDS as Na, PLAN_STATUSES as Ca, coerceAgentConfig as _a } from "../types/index.js";
3
3
  export {
4
- Y as AGENT_IDS,
5
- Z as AGENT_LABELS,
6
- $ as AGENT_OPTIONS,
4
+ ha as AGENT_IDS,
5
+ Ia as AGENT_LABELS,
6
+ ga as AGENT_OPTIONS,
7
7
  e as AlreadyInitializedError,
8
- aa as DEFAULT_AGENTS,
8
+ r as CLAUDE_SETTINGS_JSON,
9
+ n as COMMIT_SCOPES,
10
+ Fa as DEFAULT_AGENTS,
9
11
  t as PAPER_CAMP_VERSION,
10
- sa as PLAN_KINDS,
11
- ea as PLAN_STATUSES,
12
- r as agentConfigSchema,
13
- n as appendBlock,
14
- i as applyEnvEntries,
15
- o as archiveEntityFile,
16
- p as assignEntityId,
17
- m as assignPlanId,
18
- ta as coerceAgentConfig,
19
- E as dateString,
20
- d as decisionFieldsSchema,
21
- l as entityFrontmatterSchema,
22
- S as entityToIdea,
23
- c as entityToPlan,
24
- P as findConsistencyIssues,
25
- f as formatDecisionEntry,
26
- F as formatEntitiesIndex,
27
- y as formatEntityFile,
28
- I as formatIdeaFile,
29
- A as formatOpenQuestionEntry,
30
- g as formatOpenQuestions,
31
- h as formatPlanEntry,
32
- N as formatPlanFile,
33
- T as formatPlans,
34
- D as formatProgressEntry,
35
- _ as ideaFrontmatterSchema,
36
- u as initProject,
37
- C as openQuestionFieldsSchema,
38
- O as paperCampConfigSchema,
39
- L as parseDecisions,
40
- v as parseEntityFile,
41
- G as parseEnv,
42
- Q as parseFrontmatter,
43
- x as parseIdeaFile,
44
- R as parseIdeas,
45
- k as parseOpenQuestions,
46
- z as parsePlanFile,
47
- B as parsePlans,
48
- U as parseProgress,
49
- j as parseRawEntries,
50
- w as planFieldsSchema,
51
- K as planFrontmatterSchema,
52
- M as prependProgressItem,
53
- V as readEntities,
54
- W as readEntitiesWithDerivedStatus,
55
- b as readNoteEntries,
56
- q as readWorkEntries,
57
- H as serializeFrontmatter,
58
- J as todayDateString
12
+ Na as PLAN_KINDS,
13
+ Ca as PLAN_STATUSES,
14
+ i as SKILL_MD_CONTENT,
15
+ o as SUGGESTION_ENTRY_RE,
16
+ l as agentConfigSchema,
17
+ E as appendBlock,
18
+ d as applyEnvEntries,
19
+ m as archiveEntityFile,
20
+ P as assignEntityId,
21
+ p as assignPlanId,
22
+ S as branchName,
23
+ c as clearPrCache,
24
+ _a as coerceAgentConfig,
25
+ T as computePlanContentHash,
26
+ y as dateString,
27
+ f as decisionFieldsSchema,
28
+ h as derivePrLabels,
29
+ I as entityFrontmatterSchema,
30
+ g as entityToIdea,
31
+ F as entityToPlan,
32
+ N as fetchUnresolvedThreads,
33
+ C as findConsistencyIssues,
34
+ _ as formatDecisionEntry,
35
+ A as formatEntitiesIndex,
36
+ v as formatEntityFile,
37
+ L as formatIdeaFile,
38
+ O as formatOpenQuestionEntry,
39
+ u as formatOpenQuestions,
40
+ D as formatPlanEntry,
41
+ R as formatPlanFile,
42
+ G as formatPlans,
43
+ U as formatProgressEntry,
44
+ b as ideaFrontmatterSchema,
45
+ B as initProject,
46
+ M as openQuestionFieldsSchema,
47
+ Q as paperCampConfigSchema,
48
+ k as parseDecisions,
49
+ w as parseEntityFile,
50
+ x as parseEnv,
51
+ z as parseFrontmatter,
52
+ K as parseIdeaFile,
53
+ W as parseIdeas,
54
+ j as parseOpenQuestions,
55
+ H as parsePlanFile,
56
+ J as parsePlans,
57
+ V as parseProgress,
58
+ Y as parseRawEntries,
59
+ q as parseSuggestions,
60
+ X as parseTaskLog,
61
+ Z as planFieldsSchema,
62
+ $ as planFrontmatterSchema,
63
+ aa as prependProgressItem,
64
+ sa as readEntities,
65
+ ea as readEntitiesWithDerivedStatus,
66
+ ra as readNoteEntries,
67
+ na as readWorkEntries,
68
+ ta as removeSuggestionLine,
69
+ ia as renderConsistencyComment,
70
+ oa as renderPlanPhasesIntoBody,
71
+ la as replyToReviewThread,
72
+ Ea as resolvePlanForPrRef,
73
+ da as resolvePrsByEntity,
74
+ ma as resolveReviewThread,
75
+ Pa as serializeFrontmatter,
76
+ pa as syncConsistencyCommentToPr,
77
+ Sa as syncPlanPhasesToPr,
78
+ ca as syncPrLabelsToPr,
79
+ Ta as syncPrReadinessToPr,
80
+ ya as todayDateString
59
81
  };
60
82
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.test.d.ts","sourceRoot":"","sources":["../../../src/core/parse/entity.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { dateString, planFrontmatterSchema, ideaFrontmatterSchema, } from './schemas';
2
+ export type { PlanFrontmatter, IdeaFrontmatter } from './schemas';
3
+ //# sourceMappingURL=frontmatter-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter-schemas.d.ts","sourceRoot":"","sources":["../../../src/core/parse/frontmatter-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.test.d.ts","sourceRoot":"","sources":["../../../src/core/parse/frontmatter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './parser';
2
+ export * from './schemas';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/parse/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { ConsistencyIssue, DecisionEntry, EntityEntry, IdeaEntry, OpenQuestionEntry, ParseResult, ParseWarning, PlanEntry, ProgressEntry, RawEntry, SuggestionEntry, TaskLogEntry } from '../../types/index';
3
+ export declare function parseRawEntries(markdown: string): RawEntry[];
4
+ export declare function parsePlans(markdown: string): ParseResult<PlanEntry>;
5
+ export declare function parseDecisions(markdown: string): ParseResult<DecisionEntry>;
6
+ export declare function parseOpenQuestions(markdown: string): ParseResult<OpenQuestionEntry>;
7
+ export declare function parseFrontmatter<T>(content: string, schema: z.ZodType<T>): {
8
+ data: T | null;
9
+ body: string;
10
+ warnings: ParseWarning[];
11
+ };
12
+ export declare function parseEntityFile(content: string): ParseResult<EntityEntry>;
13
+ export declare function parsePlanFile(content: string): ParseResult<PlanEntry>;
14
+ export declare function parseIdeaFile(content: string): ParseResult<IdeaEntry>;
15
+ export declare function parseIdeas(markdown: string): IdeaEntry[];
16
+ export declare function findConsistencyIssues(decisions: DecisionEntry[], openQuestions: OpenQuestionEntry[], plans: PlanEntry[]): ConsistencyIssue[];
17
+ export declare function parseProgress(markdown: string): ProgressEntry[];
18
+ /** tasks.log is JSON Lines — one TaskLogEntry per line. Skip lines that fail to parse rather than fail the whole read (a truncated last line from a crash shouldn't hide the rest). */
19
+ export declare function parseTaskLog(raw: string): TaskLogEntry[];
20
+ export declare const SUGGESTION_ENTRY_RE: RegExp;
21
+ export declare function parseSuggestions(markdown: string): SuggestionEntry[];
22
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/core/parse/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,SAAS,EAET,iBAAiB,EACjB,WAAW,EACX,YAAY,EAEZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,mBAAmB,CAAC;AA4H3B,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAwC5D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAqCnE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,CAwB3E;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAyBnF;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACnB;IAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAyC5D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CA+CzE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAwCrE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAuBrE;AAMD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAYxD;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,EAAE,EAC1B,aAAa,EAAE,iBAAiB,EAAE,EAClC,KAAK,EAAE,SAAS,EAAE,GACjB,gBAAgB,EAAE,CA0CpB;AAKD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAwB/D;AAED,uLAAuL;AACvL,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAUxD;AAED,eAAO,MAAM,mBAAmB,QAAkD,CAAC;AAGnF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CASpE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.d.ts","sourceRoot":"","sources":["../../../src/core/parse/parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/core/parse/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;kBAO7B,CAAC;AAEF,eAAO,MAAM,UAAU,aAAiE,CAAC;AAIzF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;iBAS3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;iBAI/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;iBAKnC,CAAC;AAKH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;iBAgB9B,CAAC;AAIL,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+ChC,CAAC;AAEL,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBhC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -1,29 +1,10 @@
1
1
  import { EntityEntry, IdeaEntry, ParseResult, PlanEntry, PrInfo } from '../types/index';
2
- /**
3
- * Reads every entity from the unified directory, including its `archive/`
4
- * subdirectory (done/dropped entities live there). Excludes index.md.
5
- */
6
2
  export declare function readEntities(ideasDir: string): Promise<ParseResult<EntityEntry> & {
7
3
  fileCount: number;
8
4
  }>;
9
- /**
10
- * PlanEntry view of a work entity (anything that isn't a note): `kind` is the
11
- * entity's `type`. Lets the plan-shaped pipeline (API responses, prompts, UI)
12
- * keep working until the UI morphs to entities directly.
13
- *
14
- * `status` is derived from phases + PR state rather than read straight off
15
- * `e.status` — see `deriveStatus`. `pr` is the entity's resolved PR (or
16
- * `undefined`); `prLookupResolved` is whether the PR listing succeeded (a
17
- * failed/absent lookup falls back to the stored override). Note this only
18
- * affects the *view*: `e.status` itself stays the raw stored override, so
19
- * round-tripping an `EntityEntry` back to disk never persists a derived value.
20
- */
21
5
  export declare function entityToPlan(e: EntityEntry, pr?: PrInfo, prLookupResolved?: boolean): PlanEntry;
22
- /** IdeaEntry view of a note entity, for the note-shaped API/UI surface. */
23
6
  export declare function entityToIdea(e: EntityEntry): IdeaEntry;
24
7
  export declare function readEntitiesWithDerivedStatus(ideasDir: string): Promise<ParseResult<EntityEntry>>;
25
- /** All work entities (non-notes) in PlanEntry shape — the `/api/plans` view. */
26
8
  export declare function readWorkEntries(ideasDir: string): Promise<ParseResult<PlanEntry>>;
27
- /** All note entities in IdeaEntry shape — the `/api/ideas` view. */
28
9
  export declare function readNoteEntries(ideasDir: string): Promise<ParseResult<IdeaEntry>>;
29
10
  //# sourceMappingURL=readers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/core/readers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,WAAW,EAEX,SAAS,EAET,MAAM,EACP,MAAM,gBAAgB,CAAC;AAgCxB;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,UAAQ,GAAG,SAAS,CAmB7F;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,CAStD;AAiBD,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAOnC;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAQvF;AAED,oEAAoE;AACpE,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAMvF"}
1
+ {"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/core/readers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,WAAW,EAEX,SAAS,EAET,MAAM,EACP,MAAM,gBAAgB,CAAC;AAqBxB,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB3D;AAKD,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,UAAQ,GAAG,SAAS,CAmB7F;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,CAStD;AAWD,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAOnC;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAQvF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAMvF"}
@@ -0,0 +1,3 @@
1
+ export * from './scaffold';
2
+ export * from './templates';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/scaffold/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -6,11 +6,5 @@ export interface InitOptions {
6
6
  projectName: string;
7
7
  intent?: string;
8
8
  }
9
- /**
10
- * Scaffolds papercamp/config.json and papercamp/ directory structure.
11
- * Creates per-file plan/idea directories and index files, plus monolithic
12
- * files for the remaining sections (progress, decisions, open-questions).
13
- * Never overwrites existing files.
14
- */
15
9
  export declare function initProject(targetDir: string, options: InitOptions): Promise<void>;
16
10
  //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/core/scaffold/scaffold.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,SAAS,EAAE,MAAM;CAG9B;AAaD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCxF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.test.d.ts","sourceRoot":"","sources":["../../../src/core/scaffold/scaffold.test.ts"],"names":[],"mappings":""}
@@ -1,9 +1,3 @@
1
- /**
2
- * Static file contents scaffolded by `paper-camp init` for the Claude Code
3
- * native integration: the discoverable skill and the SessionStart/PostToolUse
4
- * hook wiring. Kept in one place so `init`'s no-clobber writes stay simple
5
- * string dumps.
6
- */
7
1
  export declare const SKILL_MD_CONTENT = "---\nname: paper-camp\ndescription: Work inside a project that has a papercamp/ folder \u2014 its unified idea entities (each holding its plan as a section), decisions log, open questions, and progress log. Use this whenever the working directory contains papercamp/ (papercamp/ideas/, papercamp/decisions.md, papercamp/open-questions.md, papercamp/progress.md), and especially before starting, continuing, or completing any plan phase, drafting an idea, logging a decision, or answering \"what are we working on / what's next\".\n---\n\n# Paper Camp\n\nPaper Camp is this project's planning methodology: plans, ideas, decisions, and\nopen questions live as markdown files under `papercamp/`, and an append-only\n`papercamp/progress.md` is the changelog. This skill tells you how to read that\nstate before acting and how to keep it honest as you work.\n\nIf a `papercamp` MCP server is connected in this session, prefer its tools\n(list/get plans, update phase, append progress, etc.) over raw file access \u2014\nthey enforce the same guards (id allocation, branch conflicts) that the file\ngrammar below assumes. Everything in this skill still applies conceptually;\nonly the mechanism changes.\n\n## Before doing any work\n\nRead, in this order, whatever exists:\n\n1. `papercamp/ideas/index.md` \u2014 every entity's id/title/type/status/tags, at\n a glance. Ideas and plans are one thing: an entity is an *idea* for its\n whole life, and its plan is a `### Phases` section inside the same file.\n2. The specific entity file at `papercamp/ideas/<ID>.md` (e.g. `IDEA-43.md`)\n for the work you're about to do \u2014 YAML frontmatter (`id`, `title`,\n `type`, `status`, `tags`, ...) plus prose rationale, then optionally a\n `### Phases` list of `- [ ]`/`- [x]` checkboxes with an indented\n description under each. Done/dropped entities live in\n `papercamp/ideas/archive/`.\n3. `papercamp/decisions.md` \u2014 settled calls that constrain your approach.\n Don't re-litigate a logged decision without flagging it to the user first.\n4. `papercamp/open-questions.md` \u2014 unresolved questions that might block or\n redirect the work you're about to start.\n5. The last handful of entries in `papercamp/progress.md` for recent context\n on what just happened.\n\nSkip files that don't exist yet (a fresh project may have empty logs).\n\n## While working\n\n- Work one plan phase at a time unless told otherwise \u2014 don't cascade into\n later phases just because they look quick.\n- If a phase's boundary or intent is unclear, ask before continuing.\n- Prose in plans and ideas is more current than your memory of past\n conversations. If they conflict, the files win \u2014 say so and resync.\n\n## Keep the project current as you go\n\n- **Plan phases**: when you finish a phase, flip its checkbox from `- [ ]` to\n `- [x]` in the plan's frontmatter file. Change only that line \u2014 don't touch\n other phases or prose.\n- **Plan status**: keep the plan's `status:` frontmatter honest\n (`planned` / `in-progress` / `review` / `done`). When every phase is\n checked, set status to `review` \u2014 never `done`. `done` is a human-only\n promotion after review; an agent finishing the last phase does not close\n the plan itself.\n- **Progress log**: add one bullet describing what you did under today's\n `## YYYY-MM-DD` heading at the top of `papercamp/progress.md` (newest day\n first; create the heading if today's isn't there yet). Be specific enough\n that a future read of the log alone explains what changed and why, without\n needing to re-read the diff.\n- **Decisions / open questions**: if you settle something ambiguous while\n working, log it in `papercamp/decisions.md`; if you surface a question you\n can't resolve yourself, add it to `papercamp/open-questions.md` rather than\n guessing silently.\n\n## What this skill deliberately does not do\n\nIt does not maintain a separate \"current focus\" file \u2014 that's derived at\nsession start from live plan/progress data, not hand-maintained here. It does\nnot define the file formats in full; treat the existing files under\n`papercamp/` as the grammar reference (mirror their structure exactly rather\nthan inventing a new shape).\n";
8
2
  export declare const CLAUDE_SETTINGS_JSON: string;
9
3
  //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/core/scaffold/templates.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,0pIA2E5B,CAAC;AAIF,eAAO,MAAM,oBAAoB,QAmB5B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { PhaseItem } from '../../types/index';
2
+ interface PlanContentInput {
3
+ body: string;
4
+ phases: PhaseItem[];
5
+ }
6
+ export declare function computePlanContentHash(plan: PlanContentInput): string;
7
+ export {};
8
+ //# sourceMappingURL=content-hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-hash.d.ts","sourceRoot":"","sources":["../../../src/core/serialize/content-hash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAWrE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-hash.test.d.ts","sourceRoot":"","sources":["../../../src/core/serialize/content-hash.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './serializer';
2
+ export * from './content-hash';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/serialize/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -1,13 +1,5 @@
1
- import { EntityEntry, LogEntry, PhaseItem } from '../types/index';
1
+ import { EntityEntry, LogEntry, PhaseItem, SuggestionEntry } from '../../types/index';
2
2
  export declare function todayDateString(): string;
3
- /**
4
- * Mints the next `<KIND>-<N>` plan ID from the persistent counter in `papercamp/config.json`,
5
- * incrementing and writing it back. Calls are chained through a module-level promise so two
6
- * near-simultaneous calls within this process never read the same counter value and mint a
7
- * duplicate ID — this does not protect against a concurrent call from a separate process (e.g.
8
- * the CLI racing the dev server), which is an accepted gap for a local single-user tool.
9
- * Returns undefined if the config file is missing or has no `nextId` counters yet.
10
- */
11
3
  export declare function assignPlanId(configPath: string, kind: string): Promise<string | undefined>;
12
4
  interface NewPlanInput {
13
5
  title: string;
@@ -43,18 +35,9 @@ interface NewOpenQuestionInput {
43
35
  }
44
36
  export declare function formatOpenQuestionEntry(input: NewOpenQuestionInput): string;
45
37
  export declare function formatProgressEntry(date: string, items: string[]): string;
46
- /**
47
- * Prepends a single bullet under today's `## YYYY-MM-DD` heading at the top of a
48
- * progress.md file, creating the heading if today's isn't already there (newest
49
- * day stays first). Shared by the agent's progress hook and the PostToolUse
50
- * new-file logger so both write the same grammar.
51
- */
52
38
  export declare function prependProgressItem(progressPath: string, item: string): Promise<void>;
53
- /** Serializes an array of plan entries back to a plans.md file. */
54
39
  export declare function formatPlans(entries: NewPlanInput[]): string;
55
- /** Serializes an array of open-question entries back to an open-questions.md file. */
56
40
  export declare function formatOpenQuestions(entries: NewOpenQuestionInput[]): string;
57
- /** Appends a pre-formatted block to a papercamp file, separated by a single blank line. */
58
41
  export declare function appendBlock(filePath: string, block: string): Promise<void>;
59
42
  export declare function serializeFrontmatter(data: Record<string, unknown>): string;
60
43
  interface NewPlanFileInput {
@@ -74,19 +57,6 @@ interface NewPlanFileInput {
74
57
  log?: LogEntry[];
75
58
  clarifications?: LogEntry[];
76
59
  }
77
- /**
78
- * Serializes a plan entry as a standalone file with YAML frontmatter.
79
- * Output format:
80
- * ---
81
- * id: FEAT-24
82
- * kind: feat
83
- * ...
84
- * ---
85
- * body...
86
- *
87
- * ### Phases
88
- * ...
89
- */
90
60
  export declare function formatPlanFile(input: NewPlanFileInput): string;
91
61
  interface NewEntityFileInput {
92
62
  id: string;
@@ -105,18 +75,7 @@ interface NewEntityFileInput {
105
75
  log?: LogEntry[];
106
76
  clarifications?: LogEntry[];
107
77
  }
108
- /**
109
- * Serializes a unified entity file (FEAT-42 phases 7+) — same body sections as
110
- * formatPlanFile (Clarifications/Phases/Log), but `type` instead of `kind`, no
111
- * `idea:` backlink, and no `## id: title` body heading (title lives in
112
- * frontmatter only).
113
- */
114
78
  export declare function formatEntityFile(input: NewEntityFileInput): string;
115
- /**
116
- * Mints the next lifetime IDEA-N entity id from the unified `nextId.idea`
117
- * counter — the single id space every entity lives in after the FEAT-42
118
- * migration. Same chaining/guarantees as assignPlanId (which it delegates to).
119
- */
120
79
  export declare function assignEntityId(configPath: string): Promise<string | undefined>;
121
80
  interface NewIdeaFileInput {
122
81
  id: string;
@@ -126,16 +85,9 @@ interface NewIdeaFileInput {
126
85
  body?: string;
127
86
  log?: LogEntry[];
128
87
  }
129
- /**
130
- * Serializes an idea entry as a standalone file with YAML frontmatter.
131
- */
132
88
  export declare function formatIdeaFile(input: NewIdeaFileInput): string;
133
- /**
134
- * Moves an entity from papercamp/ideas/<id>.md to papercamp/ideas/archive/<id>.md.
135
- * This is a pure file move — no parse-and-re-serialize step.
136
- * Returns true if the file was moved, false if no file exists for this entity.
137
- */
138
89
  export declare function archiveEntityFile(root: string, entityId: string): Promise<boolean>;
90
+ export declare function removeSuggestionLine(markdown: string, target: SuggestionEntry): string;
139
91
  export declare function formatEntitiesIndex(entities: EntityEntry[]): string;
140
92
  export {};
141
93
  //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../src/core/serialize/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './status';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/status/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { EntityStatus, PhaseItem, PrInfo } from '../../types/index';
2
+ export interface StatusDerivationInput {
3
+ kind?: 'note';
4
+ status?: EntityStatus;
5
+ phases: PhaseItem[];
6
+ }
7
+ export declare function deriveStatus(entity: StatusDerivationInput, pr: PrInfo | undefined, prLookupResolved: boolean): EntityStatus | undefined;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/core/status/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAQD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,qBAAqB,EAC7B,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,gBAAgB,EAAE,OAAO,GACxB,YAAY,GAAG,SAAS,CAgB1B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.d.ts","sourceRoot":"","sources":["../../../src/core/status/status.test.ts"],"names":[],"mappings":""}
Binary file
@@ -0,0 +1,7 @@
1
+ <svg width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M201.427 36.2582C179.697 28.0042 105.826 34.7081 71.2201 41.9871C65.7942 43.1853 53.6755 49.4749 48.6082 65.0481C42.274 84.5147 55.7421 133.811 57.5116 174.027C59.2811 214.244 53.7059 250.946 75.0958 270.152C92.2076 285.517 104.181 277.507 135.964 276.109C167.747 274.71 229.263 272.004 231.889 238.31C234.242 208.109 221.342 162.022 222.353 114.967C223.365 67.9123 228.589 46.5758 201.427 36.2582Z" fill="#FFD24B"/>
3
+ <path d="M132.817 20.6735C164.075 18.6446 194.755 14.5996 227.534 23.6671C234.799 26.6221 242.562 31.7678 246.636 39.8024C250.711 47.7237 251.209 56.0534 251.342 63.6894C251.327 79.0716 249.647 93.5512 248.908 108.225C246.054 148.899 256.649 188.784 253.676 232.608C252.073 249.127 237.005 259.354 224.736 263.57C199.557 272.22 174.18 271.817 149.619 271.866C139.299 271.75 129.255 272.85 118.138 273.367C107.266 274.521 92.489 269.973 84.7914 261.111C58.118 229.39 72.0942 191.892 70.6915 159.739C71.6006 125.079 62.4206 90.6157 67.1708 53.7931C67.5308 52.2123 67.9894 50.6156 68.597 49.0736C72.997 37.8252 82.365 28.2338 94.7502 25.6519L94.7747 25.6473C107.358 23.3309 120.106 21.8473 132.817 20.6735ZM223.737 32.4893C196.722 24.0984 163.677 26.1147 133.278 27.1435C120.68 27.8144 107.995 28.7723 95.5966 30.5044C85.9061 32.9392 77.7702 41.5456 74.4985 51.2893C74.0877 52.4692 73.7604 53.7772 73.5089 55.1226C70.3974 88.568 80.4744 123.958 80.62 159.739C82.0071 192.64 72.738 231.022 93.2309 252.491C105.593 267.236 127.75 258.118 149.619 259.036C173.875 258.879 198.712 258.732 220.211 251.241C231.015 247.368 239.819 240.602 240.738 231.023C243.753 192.085 233.662 149.684 237.291 107.462C237.598 79.4423 251.392 42.3988 223.737 32.4893Z" fill="black"/>
4
+ <path d="M132.757 75.2872C156.24 74.0458 179.785 73.9824 203.392 75.0978C205.078 75.1775 206.765 75.2636 208.452 75.3553C209.068 75.3893 209.67 75.6244 210.127 76.0515C210.584 76.4782 210.86 77.0559 210.892 77.6679C210.925 78.28 210.712 78.8844 210.303 79.357C209.893 79.8298 209.32 80.1264 208.711 80.2253C207.043 80.4943 205.375 80.758 203.706 81.015C180.349 84.6132 156.929 87.0323 133.447 88.2737C126.737 88.6284 119.982 88.1173 113.181 86.7405C111.481 86.3963 109.778 85.9979 108.072 85.5455C107.512 85.3948 106.967 85.132 106.555 84.7165C106.142 84.3014 105.895 83.7741 105.866 83.2202C105.836 82.6664 106.027 82.1166 106.393 81.6604C106.759 81.2038 107.272 80.8844 107.813 80.6755C109.461 80.0458 111.113 79.4698 112.767 78.9483C119.385 76.8621 126.048 75.6419 132.757 75.2872Z" fill="black"/>
5
+ <path d="M183.027 103.651C189.806 103.296 196.631 103.807 203.502 105.184C205.219 105.528 206.94 105.927 208.664 106.379C209.23 106.53 209.78 106.793 210.196 107.208C210.613 107.623 210.863 108.151 210.893 108.704C210.922 109.258 210.73 109.808 210.36 110.264C209.99 110.721 209.472 111.04 208.925 111.249C207.26 111.879 205.591 112.455 203.92 112.976C197.234 115.063 190.502 116.283 183.724 116.638C159.999 117.879 136.212 117.942 112.361 116.827C110.658 116.747 108.953 116.661 107.249 116.569C106.627 116.535 106.019 116.3 105.557 115.873C105.095 115.446 104.816 114.869 104.783 114.257C104.751 113.645 104.965 113.04 105.379 112.568C105.793 112.095 106.372 111.798 106.988 111.699C108.672 111.43 110.358 111.167 112.043 110.91C135.641 107.311 159.303 104.892 183.027 103.651Z" fill="black"/>
6
+ <path d="M125.839 136.816C143.039 135.693 160.316 135.768 177.669 137.041C178.909 137.132 180.149 137.229 181.389 137.332C181.998 137.384 182.593 137.621 183.048 138.047C183.504 138.474 183.782 139.049 183.821 139.66C183.859 140.27 183.657 140.876 183.26 141.358C182.862 141.841 182.302 142.153 181.705 142.283C180.488 142.547 179.271 142.804 178.053 143.055C161.006 146.573 143.882 148.893 126.682 150.015C121.768 150.336 116.797 149.777 111.77 148.337C110.513 147.977 109.253 147.563 107.989 147.093C107.453 146.891 106.933 146.609 106.537 146.197C106.141 145.786 105.901 145.28 105.867 144.746C105.833 144.212 106.007 143.679 106.348 143.219C106.688 142.76 107.168 142.413 107.674 142.142C108.867 141.512 110.064 140.937 111.265 140.417C116.067 138.337 120.925 137.136 125.839 136.816Z" fill="black"/>
7
+ </svg>
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "Paper Camp",
3
+ "short_name": "Paper Camp",
4
+ "description": "Local-first, AI-native project management",
5
+ "start_url": "/",
6
+ "display": "standalone",
7
+ "background_color": "#FDFCF8",
8
+ "theme_color": "#FDFCF8",
9
+ "icons": [
10
+ { "src": "/img/paper-logo.svg", "type": "image/svg+xml", "sizes": "any" },
11
+ { "src": "/img/paper-logo.png", "type": "image/png", "sizes": "300x300" }
12
+ ]
13
+ }