buildpartner 0.3.3 → 0.3.5
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.
- package/dist/bin/cli.js +6 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/api-client.d.ts +13 -9
- package/dist/src/api-client.js +14 -31
- package/dist/src/api-client.js.map +1 -1
- package/dist/src/commands/log-session.d.ts +3 -6
- package/dist/src/commands/log-session.js +10 -149
- package/dist/src/commands/log-session.js.map +1 -1
- package/dist/src/commands/reset.d.ts +1 -0
- package/dist/src/commands/reset.js +130 -0
- package/dist/src/commands/reset.js.map +1 -0
- package/dist/src/commands/setup.js +83 -398
- package/dist/src/commands/setup.js.map +1 -1
- package/dist/src/commands/sync.d.ts +6 -0
- package/dist/src/commands/sync.js +32 -0
- package/dist/src/commands/sync.js.map +1 -0
- package/dist/src/mcp/catch-up.d.ts +6 -0
- package/dist/src/mcp/catch-up.js +28 -0
- package/dist/src/mcp/catch-up.js.map +1 -0
- package/dist/src/mcp/server.d.ts +13 -0
- package/dist/src/mcp/server.js +71 -81
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/subscription-gate.d.ts +2 -2
- package/dist/src/mcp/subscription-gate.js +4 -9
- package/dist/src/mcp/subscription-gate.js.map +1 -1
- package/dist/src/mcp/tools/get-profile.js +7 -70
- package/dist/src/mcp/tools/get-profile.js.map +1 -1
- package/dist/src/mcp/tools/get-stats.d.ts +8 -34
- package/dist/src/mcp/tools/get-stats.js +7 -97
- package/dist/src/mcp/tools/get-stats.js.map +1 -1
- package/dist/src/mcp/tools/get-suggestions.js +10 -121
- package/dist/src/mcp/tools/get-suggestions.js.map +1 -1
- package/dist/src/mcp/tools/log-highlight.d.ts +2 -10
- package/dist/src/mcp/tools/log-highlight.js +5 -19
- package/dist/src/mcp/tools/log-highlight.js.map +1 -1
- package/dist/src/mcp/tools/quest.d.ts +3 -77
- package/dist/src/mcp/tools/quest.js +6 -70
- package/dist/src/mcp/tools/quest.js.map +1 -1
- package/dist/src/readers/extract-signals.d.ts +23 -0
- package/dist/src/readers/extract-signals.js +50 -0
- package/dist/src/readers/extract-signals.js.map +1 -0
- package/dist/src/readers/session-reader.d.ts +0 -14
- package/dist/src/readers/session-reader.js +3 -122
- package/dist/src/readers/session-reader.js.map +1 -1
- package/dist/src/readers/session-sync.d.ts +24 -0
- package/dist/src/readers/session-sync.js +113 -0
- package/dist/src/readers/session-sync.js.map +1 -0
- package/dist/src/store/local-store.d.ts +12 -60
- package/dist/src/store/local-store.js +16 -113
- package/dist/src/store/local-store.js.map +1 -1
- package/dist/src/store/quest-store.d.ts +5 -68
- package/dist/src/store/quest-store.js +9 -277
- package/dist/src/store/quest-store.js.map +1 -1
- package/dist/src/store/status-store.d.ts +5 -68
- package/dist/src/store/status-store.js +8 -281
- package/dist/src/store/status-store.js.map +1 -1
- package/package.json +1 -1
- package/skills/bp-open-dashboard/SKILL.md +1 -1
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Quest store - now only holds quest definitions for setup recommendations.
|
|
3
|
+
* All quest state management is server-side via /api/buildpartner/check-status.
|
|
4
|
+
*/
|
|
2
5
|
export type QuestPath = "core" | "builder" | "storyteller" | "systems-thinker";
|
|
3
6
|
export interface Quest {
|
|
4
7
|
id: string;
|
|
@@ -7,71 +10,5 @@ export interface Quest {
|
|
|
7
10
|
prompt: string;
|
|
8
11
|
path: QuestPath;
|
|
9
12
|
order: number;
|
|
10
|
-
status: QuestStatus;
|
|
11
|
-
completed_at?: string;
|
|
12
|
-
}
|
|
13
|
-
export interface QuestState {
|
|
14
|
-
quests: Record<string, {
|
|
15
|
-
status: QuestStatus;
|
|
16
|
-
completed_at?: string;
|
|
17
|
-
}>;
|
|
18
|
-
detected_path?: string;
|
|
19
13
|
}
|
|
20
|
-
export
|
|
21
|
-
skill_first_runs: Record<string, boolean>;
|
|
22
|
-
quests_initialized: boolean;
|
|
23
|
-
environment?: string;
|
|
24
|
-
}
|
|
25
|
-
export declare const QUEST_DEFINITIONS: Omit<Quest, "status" | "completed_at">[];
|
|
26
|
-
export declare const COMING_SOON_QUESTS: {
|
|
27
|
-
id: string;
|
|
28
|
-
title: string;
|
|
29
|
-
path: QuestPath;
|
|
30
|
-
description: string;
|
|
31
|
-
}[];
|
|
32
|
-
export declare function readQuests(): QuestState;
|
|
33
|
-
export declare function writeQuests(state: QuestState): void;
|
|
34
|
-
export declare function initializeQuests(): void;
|
|
35
|
-
export declare function completeQuest(questId: string): Quest | null;
|
|
36
|
-
export declare function getActiveQuest(): Quest | null;
|
|
37
|
-
export declare function getQuestProgress(): {
|
|
38
|
-
completed: number;
|
|
39
|
-
total: number;
|
|
40
|
-
allDone: boolean;
|
|
41
|
-
core: {
|
|
42
|
-
completed: number;
|
|
43
|
-
total: number;
|
|
44
|
-
};
|
|
45
|
-
builder: {
|
|
46
|
-
completed: number;
|
|
47
|
-
total: number;
|
|
48
|
-
};
|
|
49
|
-
storyteller: {
|
|
50
|
-
completed: number;
|
|
51
|
-
total: number;
|
|
52
|
-
};
|
|
53
|
-
systemsThinker: {
|
|
54
|
-
completed: number;
|
|
55
|
-
total: number;
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
export declare function getQuestsForPath(path: QuestPath): Quest[];
|
|
59
|
-
/**
|
|
60
|
-
* Try to auto-complete a quest based on which skill just ran.
|
|
61
|
-
*/
|
|
62
|
-
export declare function tryAutoCompleteQuest(skillName: string): {
|
|
63
|
-
completed_quest: string;
|
|
64
|
-
next_quest: {
|
|
65
|
-
id: string;
|
|
66
|
-
title: string;
|
|
67
|
-
description: string;
|
|
68
|
-
prompt: string;
|
|
69
|
-
} | null;
|
|
70
|
-
message: string;
|
|
71
|
-
} | null;
|
|
72
|
-
export declare function readAppState(): AppState;
|
|
73
|
-
export declare function writeAppState(state: AppState): void;
|
|
74
|
-
export declare function isFirstSkillRun(skillName: string): boolean;
|
|
75
|
-
export declare function markSkillRun(skillName: string): void;
|
|
76
|
-
export declare function setEnvironment(env: string): void;
|
|
77
|
-
export declare function getEnvironment(): string;
|
|
14
|
+
export declare const QUEST_DEFINITIONS: Quest[];
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Quest store - now only holds quest definitions for setup recommendations.
|
|
3
|
+
* All quest state management is server-side via /api/buildpartner/check-status.
|
|
4
|
+
*/
|
|
5
5
|
import { skillCommand } from "../constants.js";
|
|
6
|
-
const QUEST_PATH = join(homedir(), ".buildpartner", "quests.json");
|
|
7
|
-
const STATE_PATH = join(homedir(), ".buildpartner", "state.json");
|
|
8
|
-
// --- Quest Definitions ---
|
|
9
6
|
export const QUEST_DEFINITIONS = [
|
|
10
|
-
// Core quests
|
|
7
|
+
// Core quests
|
|
11
8
|
{
|
|
12
9
|
id: "run-first-skill",
|
|
13
10
|
title: "Run Your First Skill",
|
|
@@ -25,10 +22,10 @@ export const QUEST_DEFINITIONS = [
|
|
|
25
22
|
order: 2,
|
|
26
23
|
},
|
|
27
24
|
{
|
|
28
|
-
id: "
|
|
29
|
-
title: "
|
|
30
|
-
description:
|
|
31
|
-
prompt: "
|
|
25
|
+
id: "review-claude-md",
|
|
26
|
+
title: "Review Your CLAUDE.md",
|
|
27
|
+
description: `Run ${skillCommand("enhance-claude-md")} to get data-backed rules for your CLAUDE.md.`,
|
|
28
|
+
prompt: skillCommand("enhance-claude-md"),
|
|
32
29
|
path: "core",
|
|
33
30
|
order: 3,
|
|
34
31
|
},
|
|
@@ -40,270 +37,5 @@ export const QUEST_DEFINITIONS = [
|
|
|
40
37
|
path: "core",
|
|
41
38
|
order: 4,
|
|
42
39
|
},
|
|
43
|
-
// Builder path (code-heavy users)
|
|
44
|
-
{
|
|
45
|
-
id: "builder-create-skill",
|
|
46
|
-
title: "Create a Custom Skill",
|
|
47
|
-
description: 'Tell Claude: "Create a skill called daily-log that asks what I worked on today."',
|
|
48
|
-
prompt: 'Create a skill called daily-log that asks what I worked on today and saves it to knowledge/daily-logs/ with today\'s date.',
|
|
49
|
-
path: "builder",
|
|
50
|
-
order: 1,
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
id: "builder-parallel-sessions",
|
|
54
|
-
title: "Run Parallel Sessions",
|
|
55
|
-
description: "Open 2 Claude Code sessions at once. One builds, one tests. 2x output.",
|
|
56
|
-
prompt: "Open a second terminal and start a Claude Code session for tests while this one builds.",
|
|
57
|
-
path: "builder",
|
|
58
|
-
order: 2,
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
id: "builder-improve-skill",
|
|
62
|
-
title: "Improve a Skill",
|
|
63
|
-
description: 'Tell Claude: "Make this skill better based on how I\'ve been using it."',
|
|
64
|
-
prompt: "Review my /daily-log skill and improve it based on how I've been using it.",
|
|
65
|
-
path: "builder",
|
|
66
|
-
order: 3,
|
|
67
|
-
},
|
|
68
|
-
// Storyteller path (content-heavy users)
|
|
69
|
-
{
|
|
70
|
-
id: "storyteller-life-story",
|
|
71
|
-
title: "Tell Your Life Story",
|
|
72
|
-
description: `Run ${skillCommand("life-story")}. The deeper your context, the better every skill works for you.`,
|
|
73
|
-
prompt: skillCommand("life-story"),
|
|
74
|
-
path: "storyteller",
|
|
75
|
-
order: 1,
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: "storyteller-content-consult",
|
|
79
|
-
title: "Get Content Feedback",
|
|
80
|
-
description: `Run ${skillCommand("consult")} with a title, hook, or script. Get expert packaging frameworks applied to YOUR content.`,
|
|
81
|
-
prompt: `${skillCommand("consult")} How do I package my content so people actually click?`,
|
|
82
|
-
path: "storyteller",
|
|
83
|
-
order: 2,
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
id: "storyteller-weekly-recap",
|
|
87
|
-
title: "Review Your Week",
|
|
88
|
-
description: `Run ${skillCommand("recap-week")} to see what you created and what to add to your playbook.`,
|
|
89
|
-
prompt: skillCommand("recap-week"),
|
|
90
|
-
path: "storyteller",
|
|
91
|
-
order: 3,
|
|
92
|
-
},
|
|
93
|
-
// Systems Thinker path (automation-heavy users)
|
|
94
|
-
{
|
|
95
|
-
id: "systems-coach-review",
|
|
96
|
-
title: "Get a Setup Review",
|
|
97
|
-
description: `Run ${skillCommand("coach")} to analyze your MCP servers, tools, and workflows.`,
|
|
98
|
-
prompt: skillCommand("coach"),
|
|
99
|
-
path: "systems-thinker",
|
|
100
|
-
order: 1,
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
id: "systems-launch-strategy",
|
|
104
|
-
title: "Plan a Launch",
|
|
105
|
-
description: `Run ${skillCommand("consult")} with your product idea. Get viral launch frameworks applied to your project.`,
|
|
106
|
-
prompt: `${skillCommand("consult")} How do I launch this product to get maximum traction?`,
|
|
107
|
-
path: "systems-thinker",
|
|
108
|
-
order: 2,
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
id: "systems-automate-workflow",
|
|
112
|
-
title: "Automate a Workflow",
|
|
113
|
-
description: "Ask Claude to create a hook or skill that automates something you do manually.",
|
|
114
|
-
prompt: "Help me automate something I do manually. What repetitive task from my recent sessions could be a hook or skill?",
|
|
115
|
-
path: "systems-thinker",
|
|
116
|
-
order: 3,
|
|
117
|
-
},
|
|
118
|
-
];
|
|
119
|
-
// Coming soon teasers (not playable yet)
|
|
120
|
-
export const COMING_SOON_QUESTS = [
|
|
121
|
-
{ id: "builder-deploy", title: "Ship to Production", path: "builder", description: "Deploy something you built. Coming soon." },
|
|
122
|
-
{ id: "builder-mcp-server", title: "Build an MCP Server", path: "builder", description: "Create your own MCP server for Claude Code. Coming soon." },
|
|
123
|
-
{ id: "storyteller-brand-voice", title: "Define Your Brand Voice", path: "storyteller", description: "Create a brand voice document Claude follows. Coming soon." },
|
|
124
|
-
{ id: "storyteller-repurpose", title: "Repurpose Content", path: "storyteller", description: "Turn one piece of content into 5 formats. Coming soon." },
|
|
125
|
-
{ id: "systems-schedule-agent", title: "Schedule an Agent", path: "systems-thinker", description: "Set up a Claude agent that runs on a schedule. Coming soon." },
|
|
126
|
-
{ id: "systems-build-pipeline", title: "Build a Pipeline", path: "systems-thinker", description: "Connect 3+ tools into an automated pipeline. Coming soon." },
|
|
127
40
|
];
|
|
128
|
-
// Skill-to-quest auto-completion mapping (a skill can complete multiple quests)
|
|
129
|
-
const SKILL_QUEST_MAP = {
|
|
130
|
-
"bp-coach": ["run-first-skill", "systems-coach-review"],
|
|
131
|
-
"bp-flex-socials": ["run-first-skill"],
|
|
132
|
-
"bp-recap-week": ["run-first-skill", "storyteller-weekly-recap"],
|
|
133
|
-
"bp-interview": ["build-training-data"],
|
|
134
|
-
"bp-life-story": ["build-training-data", "storyteller-life-story"],
|
|
135
|
-
"bp-consult": ["consult-an-expert", "storyteller-content-consult", "systems-launch-strategy"],
|
|
136
|
-
"bp-enhance-claude-md": ["run-first-skill"],
|
|
137
|
-
"bp-log-experience": ["build-training-data"],
|
|
138
|
-
"bp-full-audit": ["run-first-skill", "systems-coach-review"],
|
|
139
|
-
"bp-improve-skill": ["builder-improve-skill"],
|
|
140
|
-
};
|
|
141
|
-
// --- Quest State ---
|
|
142
|
-
export function readQuests() {
|
|
143
|
-
try {
|
|
144
|
-
return JSON.parse(readFileSync(QUEST_PATH, "utf-8"));
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
return { quests: {} };
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
export function writeQuests(state) {
|
|
151
|
-
ensureDir();
|
|
152
|
-
writeFileSync(QUEST_PATH, JSON.stringify(state, null, 2) + "\n");
|
|
153
|
-
}
|
|
154
|
-
export function initializeQuests() {
|
|
155
|
-
const state = readQuests();
|
|
156
|
-
if (Object.keys(state.quests).length > 0)
|
|
157
|
-
return;
|
|
158
|
-
state.quests = {};
|
|
159
|
-
const coreQuests = QUEST_DEFINITIONS.filter((q) => q.path === "core");
|
|
160
|
-
const pathQuests = QUEST_DEFINITIONS.filter((q) => q.path !== "core");
|
|
161
|
-
// Core quests: first is active, rest locked
|
|
162
|
-
for (let i = 0; i < coreQuests.length; i++) {
|
|
163
|
-
state.quests[coreQuests[i].id] = { status: i === 0 ? "active" : "locked" };
|
|
164
|
-
}
|
|
165
|
-
// Path quests: all locked until core is done
|
|
166
|
-
for (const q of pathQuests) {
|
|
167
|
-
state.quests[q.id] = { status: "locked" };
|
|
168
|
-
}
|
|
169
|
-
writeQuests(state);
|
|
170
|
-
}
|
|
171
|
-
export function completeQuest(questId) {
|
|
172
|
-
const state = readQuests();
|
|
173
|
-
const questEntry = state.quests[questId];
|
|
174
|
-
if (!questEntry || questEntry.status === "completed")
|
|
175
|
-
return null;
|
|
176
|
-
questEntry.status = "completed";
|
|
177
|
-
questEntry.completed_at = new Date().toISOString();
|
|
178
|
-
const def = QUEST_DEFINITIONS.find((q) => q.id === questId);
|
|
179
|
-
if (!def)
|
|
180
|
-
return null;
|
|
181
|
-
// Unlock next quest in same path
|
|
182
|
-
const samePath = QUEST_DEFINITIONS.filter((q) => q.path === def.path);
|
|
183
|
-
const currentIndex = samePath.findIndex((q) => q.id === questId);
|
|
184
|
-
if (currentIndex >= 0 && currentIndex < samePath.length - 1) {
|
|
185
|
-
const nextId = samePath[currentIndex + 1].id;
|
|
186
|
-
if (state.quests[nextId]?.status === "locked") {
|
|
187
|
-
state.quests[nextId].status = "active";
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
// If all core quests are done, unlock first quest of each path
|
|
191
|
-
const coreQuests = QUEST_DEFINITIONS.filter((q) => q.path === "core");
|
|
192
|
-
const allCoreDone = coreQuests.every((q) => state.quests[q.id]?.status === "completed");
|
|
193
|
-
if (allCoreDone) {
|
|
194
|
-
for (const path of ["builder", "storyteller", "systems-thinker"]) {
|
|
195
|
-
const firstInPath = QUEST_DEFINITIONS.find((q) => q.path === path && q.order === 1);
|
|
196
|
-
if (firstInPath && state.quests[firstInPath.id]?.status === "locked") {
|
|
197
|
-
state.quests[firstInPath.id].status = "active";
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
writeQuests(state);
|
|
202
|
-
return { ...def, status: "completed", completed_at: questEntry.completed_at };
|
|
203
|
-
}
|
|
204
|
-
export function getActiveQuest() {
|
|
205
|
-
const state = readQuests();
|
|
206
|
-
// Prioritize core quests first
|
|
207
|
-
for (const def of QUEST_DEFINITIONS.filter((q) => q.path === "core")) {
|
|
208
|
-
if (state.quests[def.id]?.status === "active") {
|
|
209
|
-
return { ...def, status: "active" };
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
// Then path quests
|
|
213
|
-
for (const def of QUEST_DEFINITIONS.filter((q) => q.path !== "core")) {
|
|
214
|
-
if (state.quests[def.id]?.status === "active") {
|
|
215
|
-
return { ...def, status: "active" };
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return null;
|
|
219
|
-
}
|
|
220
|
-
export function getQuestProgress() {
|
|
221
|
-
const state = readQuests();
|
|
222
|
-
const count = (path) => {
|
|
223
|
-
const quests = QUEST_DEFINITIONS.filter((q) => q.path === path);
|
|
224
|
-
const done = quests.filter((q) => state.quests[q.id]?.status === "completed").length;
|
|
225
|
-
return { completed: done, total: quests.length };
|
|
226
|
-
};
|
|
227
|
-
const core = count("core");
|
|
228
|
-
const builder = count("builder");
|
|
229
|
-
const storyteller = count("storyteller");
|
|
230
|
-
const systemsThinker = count("systems-thinker");
|
|
231
|
-
const total = QUEST_DEFINITIONS.length;
|
|
232
|
-
const completed = core.completed + builder.completed + storyteller.completed + systemsThinker.completed;
|
|
233
|
-
return { completed, total, allDone: completed === total, core, builder, storyteller, systemsThinker };
|
|
234
|
-
}
|
|
235
|
-
export function getQuestsForPath(path) {
|
|
236
|
-
const state = readQuests();
|
|
237
|
-
return QUEST_DEFINITIONS
|
|
238
|
-
.filter((q) => q.path === path)
|
|
239
|
-
.map((def) => ({
|
|
240
|
-
...def,
|
|
241
|
-
status: state.quests[def.id]?.status || "locked",
|
|
242
|
-
completed_at: state.quests[def.id]?.completed_at,
|
|
243
|
-
}));
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Try to auto-complete a quest based on which skill just ran.
|
|
247
|
-
*/
|
|
248
|
-
export function tryAutoCompleteQuest(skillName) {
|
|
249
|
-
const questIds = SKILL_QUEST_MAP[skillName];
|
|
250
|
-
if (!questIds)
|
|
251
|
-
return null;
|
|
252
|
-
const state = readQuests();
|
|
253
|
-
// Try to complete the first active quest that matches
|
|
254
|
-
for (const questId of questIds) {
|
|
255
|
-
const entry = state.quests[questId];
|
|
256
|
-
if (!entry || entry.status !== "active")
|
|
257
|
-
continue;
|
|
258
|
-
const completed = completeQuest(questId);
|
|
259
|
-
if (!completed)
|
|
260
|
-
continue;
|
|
261
|
-
const next = getActiveQuest();
|
|
262
|
-
// Check if core just finished
|
|
263
|
-
const coreQuests = QUEST_DEFINITIONS.filter((q) => q.path === "core");
|
|
264
|
-
const allCoreDone = coreQuests.every((q) => readQuests().quests[q.id]?.status === "completed");
|
|
265
|
-
const pathsJustUnlocked = completed.path === "core" && allCoreDone;
|
|
266
|
-
return {
|
|
267
|
-
completed_quest: completed.title,
|
|
268
|
-
next_quest: next ? { id: next.id, title: next.title, description: next.description, prompt: next.prompt } : null,
|
|
269
|
-
message: pathsJustUnlocked
|
|
270
|
-
? `Quest complete: "${completed.title}"! Core quests done. You've unlocked 3 paths: Builder, Storyteller, Systems Thinker. Type /quest to pick your path.`
|
|
271
|
-
: next
|
|
272
|
-
? `Quest complete: "${completed.title}"! Next: "${next.title}" - ${next.description}`
|
|
273
|
-
: `Quest complete: "${completed.title}"! All quests done. You're a BuildPartner expert.`,
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
return null;
|
|
277
|
-
}
|
|
278
|
-
// --- App State ---
|
|
279
|
-
export function readAppState() {
|
|
280
|
-
try {
|
|
281
|
-
return JSON.parse(readFileSync(STATE_PATH, "utf-8"));
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
return { skill_first_runs: {}, quests_initialized: false };
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
export function writeAppState(state) {
|
|
288
|
-
ensureDir();
|
|
289
|
-
writeFileSync(STATE_PATH, JSON.stringify(state, null, 2) + "\n");
|
|
290
|
-
}
|
|
291
|
-
export function isFirstSkillRun(skillName) {
|
|
292
|
-
const state = readAppState();
|
|
293
|
-
return !state.skill_first_runs[skillName];
|
|
294
|
-
}
|
|
295
|
-
export function markSkillRun(skillName) {
|
|
296
|
-
const state = readAppState();
|
|
297
|
-
state.skill_first_runs[skillName] = true;
|
|
298
|
-
writeAppState(state);
|
|
299
|
-
}
|
|
300
|
-
export function setEnvironment(env) {
|
|
301
|
-
const state = readAppState();
|
|
302
|
-
state.environment = env;
|
|
303
|
-
writeAppState(state);
|
|
304
|
-
}
|
|
305
|
-
export function getEnvironment() {
|
|
306
|
-
const state = readAppState();
|
|
307
|
-
return state.environment || "terminal";
|
|
308
|
-
}
|
|
309
41
|
//# sourceMappingURL=quest-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quest-store.js","sourceRoot":"","sources":["../../../src/store/quest-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quest-store.js","sourceRoot":"","sources":["../../../src/store/quest-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAa/C,MAAM,CAAC,MAAM,iBAAiB,GAAY;IACxC,cAAc;IACd;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,QAAQ,YAAY,CAAC,OAAO,CAAC,qDAAqD;QAC/F,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;KACT;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,QAAQ,YAAY,CAAC,WAAW,CAAC,qDAAqD;QACnG,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;QACjC,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;KACT;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,OAAO,YAAY,CAAC,mBAAmB,CAAC,+CAA+C;QACpG,MAAM,EAAE,YAAY,CAAC,mBAAmB,CAAC;QACzC,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;KACT;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,QAAQ,YAAY,CAAC,SAAS,CAAC,mEAAmE;QAC/G,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC;QAC/B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;KACT;CACF,CAAC"}
|
|
@@ -1,73 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
uses_since_improved: number;
|
|
6
|
-
}
|
|
7
|
-
export interface StatusData {
|
|
8
|
-
installed_at: string;
|
|
9
|
-
improve_skill: {
|
|
10
|
-
last_ran: string | null;
|
|
11
|
-
skills_used_since: string[];
|
|
12
|
-
total_skill_uses_since: number;
|
|
13
|
-
};
|
|
14
|
-
log_experience: {
|
|
15
|
-
last_ran: string | null;
|
|
16
|
-
sessions_since: number;
|
|
17
|
-
days_since: number;
|
|
18
|
-
};
|
|
19
|
-
skills: Record<string, SkillStatus>;
|
|
20
|
-
last_reminded: Record<string, string>;
|
|
21
|
-
}
|
|
22
|
-
export interface ConsumptionEvent {
|
|
23
|
-
skill: string;
|
|
24
|
-
timestamp: string;
|
|
25
|
-
environment?: string;
|
|
26
|
-
session_context?: string;
|
|
27
|
-
reset?: string;
|
|
28
|
-
skill_improved?: string;
|
|
29
|
-
training_topic?: string;
|
|
30
|
-
training_version?: string;
|
|
31
|
-
tier?: string;
|
|
32
|
-
}
|
|
33
|
-
export interface Reminder {
|
|
34
|
-
type: "improve_skill" | "log_experience" | "skill_stale" | "update_available";
|
|
35
|
-
message: string;
|
|
36
|
-
priority: "high" | "medium" | "low";
|
|
37
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Status store - now only handles version checking.
|
|
3
|
+
* All other bookkeeping (consumption, quests, reminders) moved to server.
|
|
4
|
+
*/
|
|
38
5
|
export interface VersionInfo {
|
|
39
6
|
current: string;
|
|
40
7
|
latest: string | null;
|
|
41
8
|
update_available: boolean;
|
|
42
9
|
}
|
|
43
|
-
export declare function
|
|
44
|
-
export declare function writeStatus(status: StatusData): void;
|
|
45
|
-
export declare function initializeStatus(): void;
|
|
46
|
-
export declare function logConsumption(event: ConsumptionEvent): void;
|
|
47
|
-
export declare function readConsumption(): ConsumptionEvent[];
|
|
48
|
-
export declare function checkStatus(skillName: string, sessionContext?: string): Promise<{
|
|
49
|
-
reminders: Reminder[];
|
|
50
|
-
version: VersionInfo;
|
|
51
|
-
quest_completed?: {
|
|
52
|
-
completed_quest: string;
|
|
53
|
-
next_quest: {
|
|
54
|
-
id: string;
|
|
55
|
-
title: string;
|
|
56
|
-
description: string;
|
|
57
|
-
prompt: string;
|
|
58
|
-
} | null;
|
|
59
|
-
message: string;
|
|
60
|
-
};
|
|
61
|
-
}>;
|
|
62
|
-
export declare function resetStatus(type: "improve_skill" | "log_experience", skillImproved?: string): {
|
|
63
|
-
success: boolean;
|
|
64
|
-
};
|
|
65
|
-
export declare function incrementSessionCounter(): void;
|
|
66
|
-
export declare function getConsumptionMetrics(): {
|
|
67
|
-
total_skill_runs: number;
|
|
68
|
-
runs_by_skill: Record<string, number>;
|
|
69
|
-
runs_by_day: Record<string, number>;
|
|
70
|
-
runs_by_environment: Record<string, number>;
|
|
71
|
-
environment_percentage: Record<string, number>;
|
|
72
|
-
recent_events: ConsumptionEvent[];
|
|
73
|
-
};
|
|
10
|
+
export declare function getVersionInfo(): Promise<VersionInfo>;
|