@dendelion/paper-camp 0.13.2 → 0.14.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 (82) hide show
  1. package/dist/app/assets/index-BTh66TxZ.js +2 -0
  2. package/dist/app/assets/index-BTh66TxZ.js.map +1 -0
  3. package/dist/app/assets/{index-ChVvOU5G.js → index-C5as2mi1.js} +2 -2
  4. package/dist/app/assets/{index-ChVvOU5G.js.map → index-C5as2mi1.js.map} +1 -1
  5. package/dist/app/assets/{index-D7DjxVq7.js → index-CXl1uFWF.js} +2 -2
  6. package/dist/app/assets/{index-D7DjxVq7.js.map → index-CXl1uFWF.js.map} +1 -1
  7. package/dist/app/assets/{index-CPoqe3xq.js → index-D2zDC3YW.js} +2 -2
  8. package/dist/app/assets/{index-CPoqe3xq.js.map → index-D2zDC3YW.js.map} +1 -1
  9. package/dist/app/assets/{index-CvQKE4RC.js → index-DrOhvDGC.js} +2 -2
  10. package/dist/app/assets/{index-CvQKE4RC.js.map → index-DrOhvDGC.js.map} +1 -1
  11. package/dist/app/assets/{index-jTvzs7JN.js → index-SjRbcqaJ.js} +2 -2
  12. package/dist/app/assets/{index-jTvzs7JN.js.map → index-SjRbcqaJ.js.map} +1 -1
  13. package/dist/app/assets/main-BC7PxPmE.js +207 -0
  14. package/dist/app/assets/main-BC7PxPmE.js.map +1 -0
  15. package/dist/app/assets/{main-CZ1b3UwB.css → main-uLU_O3GC.css} +1 -1
  16. package/dist/app/assets/{sidebar-section-X7KA8eUz.js → sidebar-section-BlseNbG8.js} +2 -2
  17. package/dist/app/assets/{sidebar-section-X7KA8eUz.js.map → sidebar-section-BlseNbG8.js.map} +1 -1
  18. package/dist/app/index.html +2 -2
  19. package/dist/chunks/dev-port.CEt1H9LA.js +35 -0
  20. package/dist/chunks/dev-port.CEt1H9LA.js.map +1 -0
  21. package/dist/chunks/helpers.CUQjsQwc.js +9 -0
  22. package/dist/chunks/helpers.CUQjsQwc.js.map +1 -0
  23. package/dist/chunks/{scaffold.DTcLEZRV.js → scaffold.BL48Net9.js} +198 -180
  24. package/dist/chunks/{scaffold.DTcLEZRV.js.map → scaffold.BL48Net9.js.map} +1 -1
  25. package/dist/cli/index.js +6299 -6106
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/core/index.js +33 -32
  28. package/dist/core/parse/schemas.d.ts +8 -0
  29. package/dist/core/parse/schemas.d.ts.map +1 -1
  30. package/dist/core/thread.d.ts +8 -0
  31. package/dist/core/thread.d.ts.map +1 -1
  32. package/dist/core/thread.test.d.ts +2 -0
  33. package/dist/core/thread.test.d.ts.map +1 -0
  34. package/dist/toolbar/focus-panel.d.ts +7 -0
  35. package/dist/toolbar/focus-panel.d.ts.map +1 -0
  36. package/dist/toolbar/index.d.ts +2 -0
  37. package/dist/toolbar/index.d.ts.map +1 -0
  38. package/dist/toolbar/runs-panel.d.ts +12 -0
  39. package/dist/toolbar/runs-panel.d.ts.map +1 -0
  40. package/dist/toolbar/scout-panel.d.ts +10 -0
  41. package/dist/toolbar/scout-panel.d.ts.map +1 -0
  42. package/dist/toolbar/ship-panel.d.ts +6 -0
  43. package/dist/toolbar/ship-panel.d.ts.map +1 -0
  44. package/dist/toolbar/toolbar-element.d.ts +7 -0
  45. package/dist/toolbar/toolbar-element.d.ts.map +1 -0
  46. package/dist/toolbar/toolbar-idle.d.ts +4 -0
  47. package/dist/toolbar/toolbar-idle.d.ts.map +1 -0
  48. package/dist/toolbar/toolbar-idle.test.d.ts +2 -0
  49. package/dist/toolbar/toolbar-idle.test.d.ts.map +1 -0
  50. package/dist/toolbar/toolbar-link.d.ts +7 -0
  51. package/dist/toolbar/toolbar-link.d.ts.map +1 -0
  52. package/dist/toolbar/toolbar-shell.d.ts +15 -0
  53. package/dist/toolbar/toolbar-shell.d.ts.map +1 -0
  54. package/dist/toolbar/toolbar-shell.test.d.ts +2 -0
  55. package/dist/toolbar/toolbar-shell.test.d.ts.map +1 -0
  56. package/dist/toolbar/toolbar.d.ts +2 -0
  57. package/dist/toolbar/toolbar.d.ts.map +1 -0
  58. package/dist/toolbar/use-toolbar-shell.d.ts +8 -0
  59. package/dist/toolbar/use-toolbar-shell.d.ts.map +1 -0
  60. package/dist/toolbar.d.ts +1 -0
  61. package/dist/toolbar.js +27019 -0
  62. package/dist/toolbar.js.map +1 -0
  63. package/dist/types/index.d.ts +32 -2
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/dist/types/index.js +12 -10
  66. package/dist/types/index.js.map +1 -1
  67. package/dist/vite/index.d.ts +8 -0
  68. package/dist/vite/index.d.ts.map +1 -0
  69. package/dist/vite/index.js +48 -0
  70. package/dist/vite/index.js.map +1 -0
  71. package/dist/vite/index.test.d.ts +2 -0
  72. package/dist/vite/index.test.d.ts.map +1 -0
  73. package/dist/vite/proxy.d.ts +7 -0
  74. package/dist/vite/proxy.d.ts.map +1 -0
  75. package/dist/vite/proxy.test.d.ts +2 -0
  76. package/dist/vite/proxy.test.d.ts.map +1 -0
  77. package/dist/vite.d.ts +6 -0
  78. package/package.json +12 -2
  79. package/dist/app/assets/index-CSirjtoU.js +0 -2
  80. package/dist/app/assets/index-CSirjtoU.js.map +0 -1
  81. package/dist/app/assets/main-CezpONOg.js +0 -207
  82. package/dist/app/assets/main-CezpONOg.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{j as e}from"./main-CezpONOg.js";const a=({label:s,children:t,action:n})=>e.jsxs("div",{className:"mb-5",children:[e.jsxs("div",{className:"flex items-center justify-between mb-[0.35rem] px-3",children:[e.jsx("span",{className:"font-handwritten text-xs font-semibold leading-none opacity-[0.45]",children:s}),n]}),t]});export{a as S};
2
- //# sourceMappingURL=sidebar-section-X7KA8eUz.js.map
1
+ import{j as e}from"./main-BC7PxPmE.js";const a=({label:s,children:t,action:n})=>e.jsxs("div",{className:"mb-5",children:[e.jsxs("div",{className:"flex items-center justify-between mb-[0.35rem] px-3",children:[e.jsx("span",{className:"font-handwritten text-xs font-semibold leading-none opacity-[0.45]",children:s}),n]}),t]});export{a as S};
2
+ //# sourceMappingURL=sidebar-section-BlseNbG8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-section-X7KA8eUz.js","sources":["../../../src/app/features/plans/components/sidebar-section.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\ninterface SidebarSectionProps {\n label: string;\n children: ReactNode;\n action?: ReactNode;\n}\n\nexport const SidebarSection = ({ label, children, action }: SidebarSectionProps) => {\n return (\n <div className=\"mb-5\">\n <div className=\"flex items-center justify-between mb-[0.35rem] px-3\">\n <span className=\"font-handwritten text-xs font-semibold leading-none opacity-[0.45]\">\n {label}\n </span>\n {action}\n </div>\n {children}\n </div>\n );\n};\n"],"names":["SidebarSection","label","children","action","jsxs","jsx"],"mappings":"uCAQO,MAAMA,EAAiB,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,OAAAC,KAE9CC,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sDACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,qEACb,SAAAJ,EACH,EACCE,CAAA,EACH,EACCD,CAAA,EACH"}
1
+ {"version":3,"file":"sidebar-section-BlseNbG8.js","sources":["../../../src/app/features/plans/components/sidebar-section.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\ninterface SidebarSectionProps {\n label: string;\n children: ReactNode;\n action?: ReactNode;\n}\n\nexport const SidebarSection = ({ label, children, action }: SidebarSectionProps) => {\n return (\n <div className=\"mb-5\">\n <div className=\"flex items-center justify-between mb-[0.35rem] px-3\">\n <span className=\"font-handwritten text-xs font-semibold leading-none opacity-[0.45]\">\n {label}\n </span>\n {action}\n </div>\n {children}\n </div>\n );\n};\n"],"names":["SidebarSection","label","children","action","jsxs","jsx"],"mappings":"uCAQO,MAAMA,EAAiB,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,OAAAC,KAE9CC,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sDACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,qEACb,SAAAJ,EACH,EACCE,CAAA,EACH,EACCD,CAAA,EACH"}
@@ -13,8 +13,8 @@
13
13
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
14
14
  <link href="https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet" />
15
15
  <title>Paper Camp</title>
16
- <script type="module" crossorigin src="/assets/main-CezpONOg.js"></script>
17
- <link rel="stylesheet" crossorigin href="/assets/main-CZ1b3UwB.css">
16
+ <script type="module" crossorigin src="/assets/main-BC7PxPmE.js"></script>
17
+ <link rel="stylesheet" crossorigin href="/assets/main-uLU_O3GC.css">
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>
@@ -0,0 +1,35 @@
1
+ import { readFile as s } from "node:fs/promises";
2
+ import { resolve as f } from "node:path";
3
+ async function u(t) {
4
+ const o = await s(f(t, "papercamp", "config.json"), "utf-8").catch(() => null);
5
+ if (o)
6
+ try {
7
+ return JSON.parse(o);
8
+ } catch {
9
+ return;
10
+ }
11
+ }
12
+ async function b(t) {
13
+ const o = await u(t), n = o == null ? void 0 : o.port;
14
+ return typeof n == "number" && Number.isFinite(n) ? n : void 0;
15
+ }
16
+ async function p(t) {
17
+ var i, c;
18
+ const o = await u(t), n = o == null ? void 0 : o.integration;
19
+ if (!n) return;
20
+ const r = (i = n.toolbar) == null ? void 0 : i.enabled, e = (c = n.toolbar) == null ? void 0 : c.allowProduction, a = n.route;
21
+ return {
22
+ enabled: typeof r == "boolean" ? r : void 0,
23
+ allowProduction: typeof e == "boolean" ? e : void 0,
24
+ route: typeof a == "string" ? a : void 0
25
+ };
26
+ }
27
+ function v(t, o) {
28
+ return t ? Number(t) : o ?? 3333;
29
+ }
30
+ export {
31
+ p as a,
32
+ v as b,
33
+ b as r
34
+ };
35
+ //# sourceMappingURL=dev-port.CEt1H9LA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-port.CEt1H9LA.js","sources":["../../src/cli/dev-port.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\nasync function readConfigJson(root: string): Promise<Record<string, unknown> | undefined> {\n const raw = await readFile(resolve(root, 'papercamp', 'config.json'), 'utf-8').catch(() => null);\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nexport async function readConfigPort(root: string): Promise<number | undefined> {\n const parsed = await readConfigJson(root);\n const port = parsed?.port;\n return typeof port === 'number' && Number.isFinite(port) ? port : undefined;\n}\n\nexport interface IntegrationDevConfig {\n enabled?: boolean;\n allowProduction?: boolean;\n route?: string;\n}\n\nexport async function readConfigIntegration(\n root: string,\n): Promise<IntegrationDevConfig | undefined> {\n const parsed = await readConfigJson(root);\n const integration = parsed?.integration as\n | { toolbar?: { enabled?: unknown; allowProduction?: unknown }; route?: unknown }\n | undefined;\n if (!integration) return undefined;\n const enabled = integration.toolbar?.enabled;\n const allowProduction = integration.toolbar?.allowProduction;\n const route = integration.route;\n return {\n enabled: typeof enabled === 'boolean' ? enabled : undefined,\n allowProduction: typeof allowProduction === 'boolean' ? allowProduction : undefined,\n route: typeof route === 'string' ? route : undefined,\n };\n}\n\nexport function resolveDevPort(explicitPort: string | undefined, configPort: number | undefined) {\n return explicitPort ? Number(explicitPort) : (configPort ?? 3333);\n}\n"],"names":["readConfigJson","root","raw","readFile","resolve","readConfigPort","parsed","port","readConfigIntegration","integration","enabled","_a","allowProduction","_b","route","resolveDevPort","explicitPort","configPort"],"mappings":";;AAGA,eAAeA,EAAeC,GAA4D;AACxF,QAAMC,IAAM,MAAMC,EAASC,EAAQH,GAAM,aAAa,aAAa,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAC/F,MAAKC;AACL,QAAI;AACF,aAAO,KAAK,MAAMA,CAAG;AAAA,IACvB,QAAQ;AACN;AAAA,IACF;AACF;AAEA,eAAsBG,EAAeJ,GAA2C;AAC9E,QAAMK,IAAS,MAAMN,EAAeC,CAAI,GAClCM,IAAOD,KAAA,gBAAAA,EAAQ;AACrB,SAAO,OAAOC,KAAS,YAAY,OAAO,SAASA,CAAI,IAAIA,IAAO;AACpE;AAQA,eAAsBC,EACpBP,GAC2C;;AAC3C,QAAMK,IAAS,MAAMN,EAAeC,CAAI,GAClCQ,IAAcH,KAAA,gBAAAA,EAAQ;AAG5B,MAAI,CAACG,EAAa;AAClB,QAAMC,KAAUC,IAAAF,EAAY,YAAZ,gBAAAE,EAAqB,SAC/BC,KAAkBC,IAAAJ,EAAY,YAAZ,gBAAAI,EAAqB,iBACvCC,IAAQL,EAAY;AAC1B,SAAO;AAAA,IACL,SAAS,OAAOC,KAAY,YAAYA,IAAU;AAAA,IAClD,iBAAiB,OAAOE,KAAoB,YAAYA,IAAkB;AAAA,IAC1E,OAAO,OAAOE,KAAU,WAAWA,IAAQ;AAAA,EAAA;AAE/C;AAEO,SAASC,EAAeC,GAAkCC,GAAgC;AAC/F,SAAOD,IAAe,OAAOA,CAAY,IAAKC,KAAc;AAC9D;"}
@@ -0,0 +1,9 @@
1
+ const o = (e) => e.kind === "question" && (e.state ?? "open") === "open", n = (e, t) => (e.date ?? "").localeCompare(t.date ?? ""), i = (e) => e.map((t) => ({ plan: t, questions: (t.thread ?? []).filter(o) })).filter((t) => t.questions.length > 0).map((t) => ({ plan: t.plan, questions: [...t.questions].sort(n) })).sort((t, s) => n(t.questions[0], s.questions[0])), a = (e, t) => {
2
+ if (e)
3
+ return e.find((s) => s.status === "in-progress" || s.status === "review");
4
+ };
5
+ export {
6
+ i as c,
7
+ a as f
8
+ };
9
+ //# sourceMappingURL=helpers.CUQjsQwc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.CUQjsQwc.js","sources":["../../src/app/features/plans/helpers/helpers.ts"],"sourcesContent":["import type { AgentTaskState, PhaseItem, PlanEntry, ThreadMessage } from '@/types/index';\n\nexport const relativeDate = (dateStr: string): string => {\n const date = new Date(dateStr);\n if (Number.isNaN(date.getTime())) return dateStr;\n const days = Math.floor((Date.now() - date.getTime()) / 86400000);\n if (days <= 0) return 'today';\n if (days === 1) return 'yesterday';\n if (days < 7) return `${days}d ago`;\n if (days < 30) return `${Math.floor(days / 7)}w ago`;\n if (days < 365) return `${Math.floor(days / 30)}mo ago`;\n return `${Math.floor(days / 365)}y ago`;\n};\n\nconst itemProgress = (items: PhaseItem[]) => {\n if (items.length === 0) return null;\n const done = items.filter((p) => p.done).length;\n return { done, total: items.length, pct: Math.round((done / items.length) * 100) };\n};\n\nexport const phaseProgress = (plan: PlanEntry) => itemProgress(plan.phases);\n\nexport const phasePercentage = (plan: PlanEntry): number | null => phaseProgress(plan)?.pct ?? null;\n\n// One bar for the whole plan: phases and fixes counted together.\nexport const combinedProgress = (plan: PlanEntry) =>\n itemProgress([...plan.phases, ...(plan.fixes ?? [])]);\n\nexport const runningTaskForPlan = (\n planId: string | undefined,\n agentStatus: AgentTaskState[],\n): AgentTaskState | undefined =>\n planId\n ? agentStatus.find((t) => t.planId === planId && t.status !== 'done' && t.status !== 'error')\n : undefined;\n\n/** Overlays a live agent task onto the stored/derived status for display only —\n * frontmatter and the derived status used for filtering/sorting stay untouched. */\nexport const effectiveStatus = (\n plan: PlanEntry,\n agentStatus: AgentTaskState[],\n): PlanEntry['status'] => {\n if (plan.status === 'done' || plan.status === 'dropped') return plan.status;\n return runningTaskForPlan(plan.id, agentStatus) ? 'in-progress' : plan.status;\n};\n\nexport interface OpenQuestionGroup {\n plan: PlanEntry;\n questions: ThreadMessage[];\n}\n\nconst isOpenQuestion = (message: ThreadMessage): boolean =>\n message.kind === 'question' && (message.state ?? 'open') === 'open';\n\nconst byDateAscending = (a: ThreadMessage, b: ThreadMessage): number =>\n (a.date ?? '').localeCompare(b.date ?? '');\n\n/** Every plan carrying at least one open parked question, oldest-first within\n * a plan and groups ordered by their oldest question — mirrors the\n * question/state filter core/stats.ts's countThreadNotes uses for the same count. */\nexport const collectOpenQuestions = (plans: PlanEntry[]): OpenQuestionGroup[] =>\n plans\n .map((plan) => ({ plan, questions: (plan.thread ?? []).filter(isOpenQuestion) }))\n .filter((group) => group.questions.length > 0)\n .map((group) => ({ plan: group.plan, questions: [...group.questions].sort(byDateAscending) }))\n .sort((a, b) => byDateAscending(a.questions[0], b.questions[0]));\n\nexport const findFocusPlan = (\n plans: PlanEntry[] | undefined,\n activePlanTitle?: string | null,\n): PlanEntry | undefined => {\n if (!plans) return undefined;\n if (activePlanTitle) {\n const selected = plans.find((p) => p.title === activePlanTitle);\n if (selected) return selected;\n }\n return plans.find((p) => p.status === 'in-progress' || p.status === 'review');\n};\n"],"names":["isOpenQuestion","message","byDateAscending","a","b","collectOpenQuestions","plans","plan","group","findFocusPlan","activePlanTitle","p"],"mappings":"AAmDA,MAAMA,IAAiB,CAACC,MACtBA,EAAQ,SAAS,eAAeA,EAAQ,SAAS,YAAY,QAEzDC,IAAkB,CAACC,GAAkBC,OACxCD,EAAE,QAAQ,IAAI,cAAcC,EAAE,QAAQ,EAAE,GAK9BC,IAAuB,CAACC,MACnCA,EACG,IAAI,CAACC,OAAU,EAAE,MAAAA,GAAM,YAAYA,EAAK,UAAU,CAAA,GAAI,OAAOP,CAAc,EAAA,EAAI,EAC/E,OAAO,CAACQ,MAAUA,EAAM,UAAU,SAAS,CAAC,EAC5C,IAAI,CAACA,OAAW,EAAE,MAAMA,EAAM,MAAM,WAAW,CAAC,GAAGA,EAAM,SAAS,EAAE,KAAKN,CAAe,EAAA,EAAI,EAC5F,KAAK,CAACC,GAAGC,MAAMF,EAAgBC,EAAE,UAAU,CAAC,GAAGC,EAAE,UAAU,CAAC,CAAC,CAAC,GAEtDK,IAAgB,CAC3BH,GACAI,MAC0B;AAC1B,MAAKJ;AAKL,WAAOA,EAAM,KAAK,CAACK,MAAMA,EAAE,WAAW,iBAAiBA,EAAE,WAAW,QAAQ;AAC9E;"}