@dendelion/paper-camp 0.2.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.
@@ -0,0 +1,132 @@
1
+ export type PlanStatus = 'idea' | 'planned' | 'in-progress' | 'review' | 'done' | 'dropped';
2
+ export declare const PLAN_STATUSES: PlanStatus[];
3
+ export interface LogEntry {
4
+ date: string;
5
+ text: string;
6
+ }
7
+ export type PlanKind = 'feat' | 'fix' | 'chore' | 'docs' | 'refactor';
8
+ export declare const PLAN_KINDS: PlanKind[];
9
+ export declare const AGENT_IDS: readonly ["claude-code", "opencode"];
10
+ export type AgentId = (typeof AGENT_IDS)[number];
11
+ export declare const AGENT_LABELS: Record<AgentId, string>;
12
+ export type DecisionStatus = 'decided' | 'superseded';
13
+ export type QuestionStatus = 'open' | 'resolved';
14
+ export interface PhaseItem {
15
+ done: boolean;
16
+ text: string;
17
+ description?: string;
18
+ source?: 'review';
19
+ }
20
+ /** Raw shape produced by the generic heading-block parser, before per-file validation. */
21
+ export interface RawEntry {
22
+ title: string;
23
+ fields: Record<string, string>;
24
+ body: string;
25
+ phases: PhaseItem[];
26
+ log?: LogEntry[];
27
+ clarifications?: LogEntry[];
28
+ }
29
+ export interface ParseWarning {
30
+ title: string;
31
+ message: string;
32
+ }
33
+ export interface ParseResult<T> {
34
+ entries: T[];
35
+ warnings: ParseWarning[];
36
+ }
37
+ export interface PlanEntry {
38
+ title: string;
39
+ status: PlanStatus;
40
+ kind?: PlanKind;
41
+ id?: string;
42
+ idea?: string;
43
+ agent?: AgentId;
44
+ created: string;
45
+ updated?: string;
46
+ tags: string[];
47
+ body: string;
48
+ phases: PhaseItem[];
49
+ log?: LogEntry[];
50
+ clarifications?: LogEntry[];
51
+ }
52
+ export interface DecisionEntry {
53
+ title: string;
54
+ date: string;
55
+ status: DecisionStatus;
56
+ supersededBy?: string;
57
+ body: string;
58
+ }
59
+ export interface OpenQuestionEntry {
60
+ title: string;
61
+ status: QuestionStatus;
62
+ raised: string;
63
+ resolvedBy?: string;
64
+ blocks?: string;
65
+ body: string;
66
+ }
67
+ export type ConsistencyIssueKind = 'dangling-resolved-by' | 'dangling-superseded-by' | 'blocked-plan-active';
68
+ export interface ConsistencyIssue {
69
+ kind: ConsistencyIssueKind;
70
+ section: 'decisions' | 'open-questions';
71
+ title: string;
72
+ message: string;
73
+ planId?: string;
74
+ }
75
+ export type IdeaStatus = 'planned' | 'done';
76
+ export interface IdeaEntry {
77
+ id: string | null;
78
+ title: string;
79
+ body: string;
80
+ status?: IdeaStatus;
81
+ }
82
+ export interface ProgressEntry {
83
+ date: string;
84
+ items: string[];
85
+ }
86
+ export interface EnvEntry {
87
+ key: string;
88
+ value: string;
89
+ }
90
+ export interface DefaultAgentsMap {
91
+ phase: AgentId;
92
+ planDraft: AgentId;
93
+ ideaExtend: AgentId;
94
+ }
95
+ export declare const DEFAULT_AGENTS: DefaultAgentsMap;
96
+ export interface PaperCampConfig {
97
+ version: string;
98
+ projectName: string;
99
+ initializedAt: string;
100
+ nextId?: Record<PlanKind, number>;
101
+ port?: number;
102
+ defaultAgents?: DefaultAgentsMap;
103
+ }
104
+ export type CheckStatus = 'stale' | 'running' | 'pass' | 'fail';
105
+ export interface CheckResult {
106
+ status: CheckStatus;
107
+ lastRun: string | null;
108
+ output: string;
109
+ }
110
+ export type CheckName = 'lint' | 'format' | 'test';
111
+ export interface GitStatusEntry {
112
+ path: string;
113
+ status: string;
114
+ staged: boolean;
115
+ }
116
+ export interface GitStatusResponse {
117
+ branch: string;
118
+ entries: GitStatusEntry[];
119
+ }
120
+ export type AgentTaskStatus = 'starting' | 'running' | 'stopping' | 'done' | 'error';
121
+ export type TaskKind = 'phase' | 'audit' | 'draft' | 'extend';
122
+ export interface AgentTaskState {
123
+ status: AgentTaskStatus;
124
+ taskKind: TaskKind;
125
+ planTitle: string;
126
+ planId?: string;
127
+ phaseIndex?: number;
128
+ ideaId?: string;
129
+ agentId: AgentId;
130
+ lines: string[];
131
+ }
132
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ const e = [
2
+ "idea",
3
+ "planned",
4
+ "in-progress",
5
+ "review",
6
+ "done",
7
+ "dropped"
8
+ ], o = ["feat", "fix", "chore", "docs", "refactor"], d = ["claude-code", "opencode"], c = {
9
+ "claude-code": "Claude Code",
10
+ opencode: "OpenCode"
11
+ }, n = {
12
+ phase: "opencode",
13
+ planDraft: "claude-code",
14
+ ideaExtend: "claude-code"
15
+ };
16
+ export {
17
+ d as AGENT_IDS,
18
+ c as AGENT_LABELS,
19
+ n as DEFAULT_AGENTS,
20
+ o as PLAN_KINDS,
21
+ e as PLAN_STATUSES
22
+ };
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/types/index.ts"],"sourcesContent":["export type PlanStatus = 'idea' | 'planned' | 'in-progress' | 'review' | 'done' | 'dropped';\n\nexport const PLAN_STATUSES: PlanStatus[] = [\n 'idea',\n 'planned',\n 'in-progress',\n 'review',\n 'done',\n 'dropped',\n];\n\nexport interface LogEntry {\n date: string;\n text: string;\n}\n\nexport type PlanKind = 'feat' | 'fix' | 'chore' | 'docs' | 'refactor';\n\nexport const PLAN_KINDS: PlanKind[] = ['feat', 'fix', 'chore', 'docs', 'refactor'];\n\nexport const AGENT_IDS = ['claude-code', 'opencode'] as const;\n\nexport type AgentId = (typeof AGENT_IDS)[number];\n\nexport const AGENT_LABELS: Record<AgentId, string> = {\n 'claude-code': 'Claude Code',\n opencode: 'OpenCode',\n};\n\nexport type DecisionStatus = 'decided' | 'superseded';\n\nexport type QuestionStatus = 'open' | 'resolved';\n\nexport interface PhaseItem {\n done: boolean;\n text: string;\n description?: string;\n source?: 'review';\n}\n\n/** Raw shape produced by the generic heading-block parser, before per-file validation. */\nexport interface RawEntry {\n title: string;\n fields: Record<string, string>;\n body: string;\n phases: PhaseItem[];\n log?: LogEntry[];\n clarifications?: LogEntry[];\n}\n\nexport interface ParseWarning {\n title: string;\n message: string;\n}\n\nexport interface ParseResult<T> {\n entries: T[];\n warnings: ParseWarning[];\n}\n\nexport interface PlanEntry {\n title: string;\n status: PlanStatus;\n kind?: PlanKind;\n id?: string;\n idea?: string;\n agent?: AgentId;\n created: string;\n updated?: string;\n tags: string[];\n body: string;\n phases: PhaseItem[];\n log?: LogEntry[];\n clarifications?: LogEntry[];\n}\n\nexport interface DecisionEntry {\n title: string;\n date: string;\n status: DecisionStatus;\n supersededBy?: string;\n body: string;\n}\n\nexport interface OpenQuestionEntry {\n title: string;\n status: QuestionStatus;\n raised: string;\n resolvedBy?: string;\n blocks?: string;\n body: string;\n}\n\nexport type ConsistencyIssueKind =\n | 'dangling-resolved-by'\n | 'dangling-superseded-by'\n | 'blocked-plan-active';\n\nexport interface ConsistencyIssue {\n kind: ConsistencyIssueKind;\n section: 'decisions' | 'open-questions';\n title: string;\n message: string;\n planId?: string;\n}\n\nexport type IdeaStatus = 'planned' | 'done';\n\nexport interface IdeaEntry {\n id: string | null;\n title: string;\n body: string;\n status?: IdeaStatus;\n}\n\nexport interface ProgressEntry {\n date: string;\n items: string[];\n}\n\nexport interface EnvEntry {\n key: string;\n value: string;\n}\n\nexport interface DefaultAgentsMap {\n phase: AgentId;\n planDraft: AgentId;\n ideaExtend: AgentId;\n}\n\nexport const DEFAULT_AGENTS: DefaultAgentsMap = {\n phase: 'opencode',\n planDraft: 'claude-code',\n ideaExtend: 'claude-code',\n};\n\nexport interface PaperCampConfig {\n version: string;\n projectName: string;\n initializedAt: string;\n nextId?: Record<PlanKind, number>;\n port?: number;\n defaultAgents?: DefaultAgentsMap;\n}\n\nexport type CheckStatus = 'stale' | 'running' | 'pass' | 'fail';\n\nexport interface CheckResult {\n status: CheckStatus;\n lastRun: string | null;\n output: string;\n}\n\nexport type CheckName = 'lint' | 'format' | 'test';\n\nexport interface GitStatusEntry {\n path: string;\n status: string;\n staged: boolean;\n}\n\nexport interface GitStatusResponse {\n branch: string;\n entries: GitStatusEntry[];\n}\n\nexport type AgentTaskStatus = 'starting' | 'running' | 'stopping' | 'done' | 'error';\n\nexport type TaskKind = 'phase' | 'audit' | 'draft' | 'extend';\n\nexport interface AgentTaskState {\n status: AgentTaskStatus;\n taskKind: TaskKind;\n planTitle: string;\n planId?: string;\n phaseIndex?: number;\n ideaId?: string;\n agentId: AgentId;\n lines: string[];\n}\n"],"names":["PLAN_STATUSES","PLAN_KINDS","AGENT_IDS","AGENT_LABELS","DEFAULT_AGENTS"],"mappings":"AAEO,MAAMA,IAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASaC,IAAyB,CAAC,QAAQ,OAAO,SAAS,QAAQ,UAAU,GAEpEC,IAAY,CAAC,eAAe,UAAU,GAItCC,IAAwC;AAAA,EACnD,eAAe;AAAA,EACf,UAAU;AACZ,GAwGaC,IAAmC;AAAA,EAC9C,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AACd;"}
@@ -0,0 +1,2 @@
1
+ export * from './types/index'
2
+ export {}
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@dendelion/paper-camp",
3
+ "version": "0.2.1",
4
+ "description": "Local-first, AI-native project management with retro aesthetics",
5
+ "type": "module",
6
+ "packageManager": "pnpm@10.12.1",
7
+ "bin": {
8
+ "paper-camp": "./dist/cli/index.js"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/core/index.js",
13
+ "types": "./dist/core/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "templates",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc && vite build && vite build --config vite.app.config.ts",
24
+ "build:app": "vite build --config vite.app.config.ts",
25
+ "dev": "vite --config vite.app.config.ts --port 3333",
26
+ "dev:lib": "vite",
27
+ "cli": "bun src/cli/index.ts",
28
+ "check-types": "tsc --noEmit",
29
+ "lint": "biome check .",
30
+ "lint:write": "biome check --write .",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest"
33
+ },
34
+ "keywords": [
35
+ "project-management",
36
+ "ai-native",
37
+ "local-first",
38
+ "retro-ui",
39
+ "cli",
40
+ "dashboard"
41
+ ],
42
+ "author": "Dendelion",
43
+ "license": "MIT",
44
+ "engines": {
45
+ "node": ">=18.0.0",
46
+ "bun": ">=1.0.0"
47
+ },
48
+ "peerDependencies": {
49
+ "react": "^18.0.0",
50
+ "react-dom": "^18.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@dendelion/paper-ui": "^0.2.0",
54
+ "@tanstack/react-router": "^1.58.3",
55
+ "clsx": "^2.1.1",
56
+ "commander": "^12.0.0",
57
+ "framer-motion": "^12.40.0",
58
+ "react-markdown": "^10.1.0",
59
+ "zod": "^4.4.3",
60
+ "zustand": "^4.5.0"
61
+ },
62
+ "devDependencies": {
63
+ "@biomejs/biome": "^1.9.3",
64
+ "@commitlint/cli": "^21.0.2",
65
+ "@commitlint/config-conventional": "^21.0.2",
66
+ "@types/node": "^20.0.0",
67
+ "@types/react": "^18.3.11",
68
+ "@types/react-dom": "^18.3.0",
69
+ "@vitejs/plugin-react-swc": "^3.7.1",
70
+ "autoprefixer": "^10.4.20",
71
+ "postcss": "^8.4.47",
72
+ "tailwindcss": "^3.4.14",
73
+ "typescript": "^5.6.3",
74
+ "vite": "^5.4.9",
75
+ "vite-plugin-dts": "^4.5.4",
76
+ "vite-tsconfig-paths": "^5.0.1",
77
+ "vitest": "^2.1.3"
78
+ }
79
+ }