projectstore-claude 0.30.12 โ 0.30.14
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/node_modules/projectstore/.claude-plugin/marketplace.json +1 -1
- package/node_modules/projectstore/.claude-plugin/plugin.json +1 -1
- package/node_modules/projectstore/agents/planner.md +10 -1
- package/node_modules/projectstore/commands/story.md +22 -1
- package/node_modules/projectstore/package.json +1 -1
- package/node_modules/projectstore/scripts/tokens.mjs +25 -16
- package/package.json +2 -2
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"name": "projectstore",
|
|
13
13
|
"displayName": "projectstore",
|
|
14
14
|
"description": "๐ Your agent runs the project through a verified loop: task โ artifact (ADR ยท spec ยท epic ยท story) โ adversarial critic โ backlog โ planner โ reviewer โ done. Plain markdown in an Obsidian-friendly vault, every write approved by you โ and any model can pick the project up tomorrow.",
|
|
15
|
-
"version": "0.30.
|
|
15
|
+
"version": "0.30.14",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "Evgenii Konev",
|
|
18
18
|
"email": "ekonev@smartandpoint.com",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore",
|
|
3
3
|
"displayName": "projectstore",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.14",
|
|
5
5
|
"description": "Your agent runs the project through a verified loop: task โ artifact (ADR / spec / epic / story) โ adversarial critic โ backlog โ planner โ reviewer โ done. Plain markdown in git โ any model can pick the project up tomorrow.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Evgenii Konev @ SmartAndPoint",
|
|
@@ -85,8 +85,17 @@ generic best practice โ cite the real files and patterns you found.
|
|
|
85
85
|
8. **Proposed `code_refs`** โ the paths/globs this epic (and story) will own once
|
|
86
86
|
implemented, ready for `/projectstore:codemap set`. You PROPOSE; the command
|
|
87
87
|
writes after approval.
|
|
88
|
+
9. **Open questions** โ at most five decisions the user must make that the
|
|
89
|
+
code and the vault cannot answer, the one that changes the plan most
|
|
90
|
+
first. One per line:
|
|
91
|
+
`Q<n>. <the question> Options: (a) โฆ (b) โฆ Recommend (b): <why>`, with two to four options. The
|
|
92
|
+
recommendation is one of the options, so it can be recorded as the answer
|
|
93
|
+
when the user skips the question. "None" is the normal case. With more than
|
|
94
|
+
five, return five, say how many you left out, and say the story is
|
|
95
|
+
probably too big: suggest how to split it. You ask the user nothing; the
|
|
96
|
+
plan step puts these to the user in one round.
|
|
88
97
|
|
|
89
98
|
Rules: be concrete and cite real paths / symbols; if the task is ambiguous or has
|
|
90
|
-
two plausible homes, say so and recommend one with the tradeoff. No code
|
|
99
|
+
two plausible homes, say so in Open questions (item 9) and recommend one with the tradeoff. No code
|
|
91
100
|
generation beyond tiny illustrative snippets. You are read-only โ never write
|
|
92
101
|
code or vault files.
|
|
@@ -100,11 +100,32 @@ the two cannot collide).
|
|
|
100
100
|
`plan_updated_at` / `closed_at` โ stamped unconditionally; the
|
|
101
101
|
`lifecycle_gates` key gates checks, never data).
|
|
102
102
|
|
|
103
|
+
2a. **(plan only) Open questions, one round.** Before writing the plan,
|
|
104
|
+
collect the open questions: the planner's "Open questions" when it ran,
|
|
105
|
+
else your own; do not start the planner here. Keep only decisions the
|
|
106
|
+
user must make; skip what the conversation, or an earlier
|
|
107
|
+
`### Clarifications` in this plan, already settled. None is the normal
|
|
108
|
+
case: then ask nothing and write nothing. Keep at most five, the one that
|
|
109
|
+
changes the plan most first; with more, keep five, say how many were
|
|
110
|
+
dropped, and suggest splitting the story; when the planner says it left questions out, say so in the same round, with its split suggestion. Each question has two to four
|
|
111
|
+
options and one recommended option. Put them to the user in one round:
|
|
112
|
+
one call of AskUserQuestion for up to four questions; with five, or where
|
|
113
|
+
the harness has no question tool, one plain-text message with the
|
|
114
|
+
questions numbered. Ask once per gate run: the Edit in step 4 and the
|
|
115
|
+
re-check in step 5 never ask again. A skipped question, or every question
|
|
116
|
+
of a dismissed call, takes its recommendation, marked `(assumed)`. Record
|
|
117
|
+
the round under `### Clarifications`, last in the plan: a line with
|
|
118
|
+
today's date, then one bullet per question with its answer; a later plan
|
|
119
|
+
run appends its own dated line to the same subsection. An answer that changes a
|
|
120
|
+
contract of the covering spec says which one, and the spec is amended
|
|
121
|
+
the way it records its other amendments before the code is written.
|
|
122
|
+
|
|
103
123
|
3. **Fill the section content** in the returned `content` before preview:
|
|
104
124
|
- `plan` โ write the Implementation Plan. When the story's `specs:` names a
|
|
105
125
|
covering spec, the plan is a THIN ROUTE through that spec's behavioral
|
|
106
126
|
contracts: which contracts, in what order, which files. Consult the
|
|
107
|
-
planner agent's output if one ran. Do not restate the spec.
|
|
127
|
+
planner agent's output if one ran. Do not restate the spec. End the plan
|
|
128
|
+
with the step 2a round, when there was one.
|
|
108
129
|
- `close` โ write the Final Summary (what changed / why / tests executed /
|
|
109
130
|
risks & follow-ups), and update the Acceptance Criteria checkboxes with
|
|
110
131
|
evidence suffixes: `- [x] <criterion> โ evidence: <test | command | file:line>`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.14",
|
|
4
4
|
"description": "Your agent runs the project through a verified loop: task โ artifact (ADR / spec / epic / story) โ adversarial critic โ backlog โ planner โ reviewer โ done. Plain markdown in git โ any model can pick the project up tomorrow.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"project-management",
|
|
@@ -24,9 +24,10 @@
|
|
|
24
24
|
// false "1 call/turn" for every turn (each record holds โค1 tool_use).
|
|
25
25
|
//
|
|
26
26
|
// COST is computed at current API list prices (PRICING below) with the cache
|
|
27
|
-
// multipliers: read 0.1ร input
|
|
28
|
-
// carry the 5m/1h split). Under
|
|
29
|
-
//
|
|
27
|
+
// multipliers: read 0.1ร input unless the model has its own read rate, 5m
|
|
28
|
+
// write 1.25ร, 1h write 2ร (the usage records carry the 5m/1h split). Under
|
|
29
|
+
// a subscription plan these dollars are a proxy for rate-limit consumption,
|
|
30
|
+
// not an invoice โ the RATIOS hold either way.
|
|
30
31
|
// Historical price changes are not modeled; everything is priced at today's
|
|
31
32
|
// list. Unknown models are priced at 0 and reported.
|
|
32
33
|
//
|
|
@@ -94,28 +95,36 @@ const STAGE_OF = {
|
|
|
94
95
|
};
|
|
95
96
|
const STAGE_ORDER = ["authoring", "critique", "planning", "code-review", "curation", "upkeep", "other"];
|
|
96
97
|
|
|
97
|
-
// USD per MTok [input, output], API list prices as of 2026-
|
|
98
|
-
// (platform.claude.com pricing docs).
|
|
99
|
-
//
|
|
98
|
+
// USD per MTok [input, output, cache read?], API list prices as of 2026-11-10
|
|
99
|
+
// (platform.claude.com pricing docs). The third value is the cache-read rate
|
|
100
|
+
// where it is not 0.1ร input (Fable 5.1 and 5.2: 0.025ร; Opus 5.5 and
|
|
101
|
+
// Sonnet 5.5: 0.05ร); writes stay 1.25ร / 2ร input. The `--json` output
|
|
102
|
+
// carries these arrays as they are, with two or three values.
|
|
100
103
|
export const PRICING = {
|
|
101
|
-
"claude-fable-5-
|
|
104
|
+
"claude-fable-5-2": [8, 40, 0.2],
|
|
105
|
+
"claude-fable-5-1": [10, 50, 0.25],
|
|
102
106
|
"claude-fable-5": [10, 50],
|
|
107
|
+
"claude-opus-5-5": [4, 20, 0.2],
|
|
103
108
|
"claude-opus-5": [5, 25],
|
|
104
109
|
"claude-opus-4-8": [5, 25],
|
|
105
110
|
"claude-opus-4-7": [5, 25],
|
|
106
|
-
"claude-sonnet-5": [2, 10
|
|
111
|
+
"claude-sonnet-5-5": [2, 10, 0.1],
|
|
112
|
+
"claude-sonnet-5": [2, 10],
|
|
107
113
|
"claude-sonnet-4-6": [3, 15],
|
|
114
|
+
// reads at the default 0.1ร ($0.01); prompts up to 100K, beyond [0.5, 2.5] (not modeled)
|
|
115
|
+
"claude-haiku-5-5": [0.1, 0.5],
|
|
108
116
|
"claude-haiku-4-5": [1, 5],
|
|
109
117
|
};
|
|
110
118
|
|
|
111
119
|
// Transcripts carry variant ids ("claude-haiku-4-5-20251001", "opus",
|
|
112
120
|
// "claude-opus-5[1m]") โ normalize before the PRICING lookup so they don't
|
|
113
|
-
// silently price at $0.
|
|
121
|
+
// silently price at $0. A bare alias names the newest model of its line, so
|
|
122
|
+
// an old record written as "haiku" prices at today's Haiku, not the one that ran.
|
|
114
123
|
const MODEL_ALIASES = {
|
|
115
|
-
fable: "claude-fable-5-
|
|
116
|
-
opus: "claude-opus-5",
|
|
117
|
-
sonnet: "claude-sonnet-5",
|
|
118
|
-
haiku: "claude-haiku-
|
|
124
|
+
fable: "claude-fable-5-2",
|
|
125
|
+
opus: "claude-opus-5-5",
|
|
126
|
+
sonnet: "claude-sonnet-5-5",
|
|
127
|
+
haiku: "claude-haiku-5-5",
|
|
119
128
|
};
|
|
120
129
|
|
|
121
130
|
export function normModel(model) {
|
|
@@ -126,9 +135,9 @@ export function normModel(model) {
|
|
|
126
135
|
export function rowCost(row) {
|
|
127
136
|
const p = PRICING[normModel(row.model)];
|
|
128
137
|
if (!p) return 0;
|
|
129
|
-
const [inP, outP] = p;
|
|
138
|
+
const [inP, outP, readP = 0.1 * inP] = p;
|
|
130
139
|
return (
|
|
131
|
-
(row.input * inP + row.cw5m * 1.25 * inP + row.cw1h * 2 * inP + row.cacheRead *
|
|
140
|
+
(row.input * inP + row.cw5m * 1.25 * inP + row.cw1h * 2 * inP + row.cacheRead * readP + row.output * outP) / 1e6
|
|
132
141
|
);
|
|
133
142
|
}
|
|
134
143
|
|
|
@@ -359,7 +368,7 @@ const n = (v) => v.toLocaleString("en-US");
|
|
|
359
368
|
|
|
360
369
|
// `t/turn` โ avg distinct tool calls per tool-using turn (batching level; 1.0
|
|
361
370
|
// means fully sequential). `cost` โ USD at current list prices; cache reads
|
|
362
|
-
// bill at
|
|
371
|
+
// bill at a small fraction of input, so token counts and dollars rank differently.
|
|
363
372
|
const usd = (v) => `$${v.toFixed(2)}`;
|
|
364
373
|
|
|
365
374
|
function table(groups, label, { runs = false } = {}) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore-claude",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.14",
|
|
4
4
|
"description": "projectstore for Claude Code: the core pinned and bundled, the harness fixed. A release artifact; the way in is npx projectstore setup",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"projectstore",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"README.md"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"projectstore": "=0.30.
|
|
40
|
+
"projectstore": "=0.30.14"
|
|
41
41
|
},
|
|
42
42
|
"bundleDependencies": [
|
|
43
43
|
"projectstore"
|