projectstore-codex 0.0.1 → 0.28.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.
- package/.codex-plugin/plugin.json +48 -0
- package/README.md +15 -7
- package/bin/projectstore-codex.mjs +88 -0
- package/hooks/hooks.json +59 -0
- package/node_modules/projectstore/.claude-plugin/marketplace.json +40 -0
- package/node_modules/projectstore/.claude-plugin/plugin.json +23 -0
- package/node_modules/projectstore/.mcp.json +14 -0
- package/node_modules/projectstore/AGENTS.md +26 -0
- package/node_modules/projectstore/LICENSE +21 -0
- package/node_modules/projectstore/README.md +284 -0
- package/node_modules/projectstore/agents/archaeologist.md +76 -0
- package/node_modules/projectstore/agents/clerk.md +93 -0
- package/node_modules/projectstore/agents/critic.md +94 -0
- package/node_modules/projectstore/agents/librarian.md +81 -0
- package/node_modules/projectstore/agents/planner.md +80 -0
- package/node_modules/projectstore/agents/reviewer.md +98 -0
- package/node_modules/projectstore/bin/projectstore.mjs +7 -0
- package/node_modules/projectstore/commands/adr.md +57 -0
- package/node_modules/projectstore/commands/agents.md +180 -0
- package/node_modules/projectstore/commands/bind.md +128 -0
- package/node_modules/projectstore/commands/codemap.md +50 -0
- package/node_modules/projectstore/commands/concept.md +17 -0
- package/node_modules/projectstore/commands/doctor.md +166 -0
- package/node_modules/projectstore/commands/epic.md +40 -0
- package/node_modules/projectstore/commands/graph.md +56 -0
- package/node_modules/projectstore/commands/kanban.md +40 -0
- package/node_modules/projectstore/commands/meeting.md +17 -0
- package/node_modules/projectstore/commands/reconcile.md +73 -0
- package/node_modules/projectstore/commands/research.md +17 -0
- package/node_modules/projectstore/commands/review.md +89 -0
- package/node_modules/projectstore/commands/runbook.md +17 -0
- package/node_modules/projectstore/commands/scaffold.md +23 -0
- package/node_modules/projectstore/commands/search.md +22 -0
- package/node_modules/projectstore/commands/spec.md +91 -0
- package/node_modules/projectstore/commands/status.md +27 -0
- package/node_modules/projectstore/commands/statusline.md +46 -0
- package/node_modules/projectstore/commands/story.md +113 -0
- package/node_modules/projectstore/docs/extending.md +172 -0
- package/node_modules/projectstore/docs/getting-started.md +133 -0
- package/node_modules/projectstore/docs/harnesses.md +163 -0
- package/node_modules/projectstore/docs/how-it-works.md +263 -0
- package/node_modules/projectstore/docs/images/loop-light.svg +94 -0
- package/node_modules/projectstore/docs/images/loop.svg +93 -0
- package/node_modules/projectstore/docs/images/statusline-hud.png +0 -0
- package/node_modules/projectstore/docs/images/team-light.svg +79 -0
- package/node_modules/projectstore/docs/images/team.svg +79 -0
- package/node_modules/projectstore/harnesses/claude-code.json +483 -0
- package/node_modules/projectstore/harnesses/codex.json +332 -0
- package/node_modules/projectstore/hooks/hooks.json +59 -0
- package/node_modules/projectstore/hooks/pre-compact.mjs +121 -0
- package/node_modules/projectstore/hooks/session-rules.mjs +63 -0
- package/node_modules/projectstore/hooks/session-start.mjs +301 -0
- package/node_modules/projectstore/hooks/session-stop.mjs +84 -0
- package/node_modules/projectstore/package.json +70 -0
- package/node_modules/projectstore/scaffold/checklists.json +88 -0
- package/node_modules/projectstore/scaffold/headings.json +171 -0
- package/node_modules/projectstore/scaffold/layouts/engineering.json +85 -0
- package/node_modules/projectstore/scripts/binding.mjs +165 -0
- package/node_modules/projectstore/scripts/build-adapters.mjs +264 -0
- package/node_modules/projectstore/scripts/cli.mjs +595 -0
- package/node_modules/projectstore/scripts/codemap.mjs +99 -0
- package/node_modules/projectstore/scripts/diff-refs.mjs +127 -0
- package/node_modules/projectstore/scripts/doctor.mjs +2127 -0
- package/node_modules/projectstore/scripts/draft.mjs +261 -0
- package/node_modules/projectstore/scripts/graph.mjs +219 -0
- package/node_modules/projectstore/scripts/harness.mjs +608 -0
- package/node_modules/projectstore/scripts/install-harness.mjs +1387 -0
- package/node_modules/projectstore/scripts/kanban.mjs +174 -0
- package/node_modules/projectstore/scripts/lib.mjs +3085 -0
- package/node_modules/projectstore/scripts/mcp.mjs +391 -0
- package/node_modules/projectstore/scripts/portable-registration.mjs +198 -0
- package/node_modules/projectstore/scripts/provenance.mjs +375 -0
- package/node_modules/projectstore/scripts/query.mjs +490 -0
- package/node_modules/projectstore/scripts/reconcile.mjs +422 -0
- package/node_modules/projectstore/scripts/statusline-launcher.mjs +141 -0
- package/node_modules/projectstore/scripts/statusline.mjs +253 -0
- package/node_modules/projectstore/scripts/story-section.mjs +209 -0
- package/node_modules/projectstore/scripts/surfaces.mjs +421 -0
- package/node_modules/projectstore/scripts/tokens.mjs +449 -0
- package/node_modules/projectstore/scripts/touch-session.mjs +336 -0
- package/node_modules/projectstore/scripts/version-guard.mjs +255 -0
- package/node_modules/projectstore/scripts/worktree.mjs +109 -0
- package/node_modules/projectstore/skills/projectstore-decision-detector/SKILL.md +40 -0
- package/node_modules/projectstore/skills/projectstore-peer-reviewer/SKILL.md +38 -0
- package/node_modules/projectstore/skills/projectstore-story-completion/SKILL.md +50 -0
- package/node_modules/projectstore/skills/projectstore-vault-communication/SKILL.md +96 -0
- package/node_modules/projectstore/templates/claude-md-block.md.tmpl +26 -0
- package/node_modules/projectstore/templates/de/adr.md.tmpl +67 -0
- package/node_modules/projectstore/templates/de/concept.md.tmpl +43 -0
- package/node_modules/projectstore/templates/de/epic.md.tmpl +59 -0
- package/node_modules/projectstore/templates/de/folder-readme.md.tmpl +14 -0
- package/node_modules/projectstore/templates/de/kanban.md.tmpl +36 -0
- package/node_modules/projectstore/templates/de/meeting.md.tmpl +38 -0
- package/node_modules/projectstore/templates/de/research.md.tmpl +47 -0
- package/node_modules/projectstore/templates/de/runbook.md.tmpl +53 -0
- package/node_modules/projectstore/templates/de/spec.md.tmpl +64 -0
- package/node_modules/projectstore/templates/de/story.md.tmpl +76 -0
- package/node_modules/projectstore/templates/de/strings.json +6 -0
- package/node_modules/projectstore/templates/en/adr.md.tmpl +67 -0
- package/node_modules/projectstore/templates/en/concept.md.tmpl +43 -0
- package/node_modules/projectstore/templates/en/epic.md.tmpl +59 -0
- package/node_modules/projectstore/templates/en/folder-readme.md.tmpl +14 -0
- package/node_modules/projectstore/templates/en/kanban.md.tmpl +36 -0
- package/node_modules/projectstore/templates/en/meeting.md.tmpl +38 -0
- package/node_modules/projectstore/templates/en/research.md.tmpl +47 -0
- package/node_modules/projectstore/templates/en/runbook.md.tmpl +53 -0
- package/node_modules/projectstore/templates/en/spec.md.tmpl +64 -0
- package/node_modules/projectstore/templates/en/story.md.tmpl +76 -0
- package/node_modules/projectstore/templates/en/strings.json +6 -0
- package/node_modules/projectstore/templates/es/adr.md.tmpl +67 -0
- package/node_modules/projectstore/templates/es/concept.md.tmpl +43 -0
- package/node_modules/projectstore/templates/es/epic.md.tmpl +59 -0
- package/node_modules/projectstore/templates/es/folder-readme.md.tmpl +14 -0
- package/node_modules/projectstore/templates/es/kanban.md.tmpl +36 -0
- package/node_modules/projectstore/templates/es/meeting.md.tmpl +38 -0
- package/node_modules/projectstore/templates/es/research.md.tmpl +47 -0
- package/node_modules/projectstore/templates/es/runbook.md.tmpl +53 -0
- package/node_modules/projectstore/templates/es/spec.md.tmpl +64 -0
- package/node_modules/projectstore/templates/es/story.md.tmpl +76 -0
- package/node_modules/projectstore/templates/es/strings.json +6 -0
- package/node_modules/projectstore/templates/fr/adr.md.tmpl +67 -0
- package/node_modules/projectstore/templates/fr/concept.md.tmpl +43 -0
- package/node_modules/projectstore/templates/fr/epic.md.tmpl +59 -0
- package/node_modules/projectstore/templates/fr/folder-readme.md.tmpl +14 -0
- package/node_modules/projectstore/templates/fr/kanban.md.tmpl +36 -0
- package/node_modules/projectstore/templates/fr/meeting.md.tmpl +38 -0
- package/node_modules/projectstore/templates/fr/research.md.tmpl +47 -0
- package/node_modules/projectstore/templates/fr/runbook.md.tmpl +53 -0
- package/node_modules/projectstore/templates/fr/spec.md.tmpl +64 -0
- package/node_modules/projectstore/templates/fr/story.md.tmpl +76 -0
- package/node_modules/projectstore/templates/fr/strings.json +6 -0
- package/node_modules/projectstore/templates/ru/adr.md.tmpl +67 -0
- package/node_modules/projectstore/templates/ru/concept.md.tmpl +43 -0
- package/node_modules/projectstore/templates/ru/epic.md.tmpl +59 -0
- package/node_modules/projectstore/templates/ru/folder-readme.md.tmpl +14 -0
- package/node_modules/projectstore/templates/ru/kanban.md.tmpl +36 -0
- package/node_modules/projectstore/templates/ru/meeting.md.tmpl +38 -0
- package/node_modules/projectstore/templates/ru/research.md.tmpl +47 -0
- package/node_modules/projectstore/templates/ru/runbook.md.tmpl +53 -0
- package/node_modules/projectstore/templates/ru/spec.md.tmpl +64 -0
- package/node_modules/projectstore/templates/ru/story.md.tmpl +76 -0
- package/node_modules/projectstore/templates/ru/strings.json +6 -0
- package/node_modules/projectstore/templates/zh/adr.md.tmpl +67 -0
- package/node_modules/projectstore/templates/zh/concept.md.tmpl +43 -0
- package/node_modules/projectstore/templates/zh/epic.md.tmpl +59 -0
- package/node_modules/projectstore/templates/zh/folder-readme.md.tmpl +14 -0
- package/node_modules/projectstore/templates/zh/kanban.md.tmpl +36 -0
- package/node_modules/projectstore/templates/zh/meeting.md.tmpl +38 -0
- package/node_modules/projectstore/templates/zh/research.md.tmpl +47 -0
- package/node_modules/projectstore/templates/zh/runbook.md.tmpl +53 -0
- package/node_modules/projectstore/templates/zh/spec.md.tmpl +64 -0
- package/node_modules/projectstore/templates/zh/story.md.tmpl +76 -0
- package/node_modules/projectstore/templates/zh/strings.json +6 -0
- package/package.json +36 -14
- package/plugin.json +53 -0
- package/skills/projectstore-adr/SKILL.md +76 -0
- package/skills/projectstore-agents/SKILL.md +50 -0
- package/skills/projectstore-archaeologist/SKILL.md +109 -0
- package/skills/projectstore-bind/SKILL.md +44 -0
- package/skills/projectstore-clerk/SKILL.md +126 -0
- package/skills/projectstore-codemap/SKILL.md +69 -0
- package/skills/projectstore-concept/SKILL.md +36 -0
- package/skills/projectstore-critic/SKILL.md +127 -0
- package/skills/projectstore-decision-detector/SKILL.md +59 -0
- package/skills/projectstore-doctor/SKILL.md +33 -0
- package/skills/projectstore-epic/SKILL.md +59 -0
- package/skills/projectstore-graph/SKILL.md +75 -0
- package/skills/projectstore-kanban/SKILL.md +60 -0
- package/skills/projectstore-librarian/SKILL.md +114 -0
- package/skills/projectstore-meeting/SKILL.md +36 -0
- package/skills/projectstore-peer-reviewer/SKILL.md +57 -0
- package/skills/projectstore-planner/SKILL.md +113 -0
- package/skills/projectstore-reconcile/SKILL.md +92 -0
- package/skills/projectstore-research/SKILL.md +36 -0
- package/skills/projectstore-review/SKILL.md +108 -0
- package/skills/projectstore-reviewer/SKILL.md +131 -0
- package/skills/projectstore-runbook/SKILL.md +36 -0
- package/skills/projectstore-scaffold/SKILL.md +42 -0
- package/skills/projectstore-search/SKILL.md +41 -0
- package/skills/projectstore-spec/SKILL.md +110 -0
- package/skills/projectstore-status/SKILL.md +47 -0
- package/skills/projectstore-statusline/SKILL.md +29 -0
- package/skills/projectstore-story/SKILL.md +132 -0
- package/skills/projectstore-story-completion/SKILL.md +69 -0
- package/skills/projectstore-vault-communication/SKILL.md +115 -0
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore-codex",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
3
|
+
"version": "0.28.1",
|
|
4
|
+
"description": "ProjectStore for Codex: portable project memory, rendered workflow skills and lifecycle hooks, with the core pinned and bundled.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"projectstore",
|
|
7
|
+
"installer",
|
|
8
|
+
"codex",
|
|
9
|
+
"project-management",
|
|
10
|
+
"adr",
|
|
11
|
+
"markdown",
|
|
12
|
+
"agentic"
|
|
13
|
+
],
|
|
11
14
|
"homepage": "https://github.com/SmartAndPoint/ProjectStore#readme",
|
|
12
15
|
"bugs": {
|
|
13
16
|
"url": "https://github.com/SmartAndPoint/ProjectStore/issues"
|
|
@@ -16,13 +19,32 @@
|
|
|
16
19
|
"type": "git",
|
|
17
20
|
"url": "git+https://github.com/SmartAndPoint/ProjectStore.git"
|
|
18
21
|
},
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"author": {
|
|
24
|
+
"name": "Evgenii Konev",
|
|
25
|
+
"email": "ekonev@smartandpoint.com",
|
|
26
|
+
"url": "https://github.com/SmartAndPoint"
|
|
27
|
+
},
|
|
28
|
+
"type": "module",
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=20.0.0"
|
|
31
|
+
},
|
|
32
|
+
"bin": {
|
|
33
|
+
"projectstore-codex": "bin/projectstore-codex.mjs"
|
|
34
|
+
},
|
|
24
35
|
"files": [
|
|
25
|
-
"
|
|
36
|
+
"bin/",
|
|
37
|
+
"README.md",
|
|
38
|
+
"plugin.json",
|
|
39
|
+
".codex-plugin/",
|
|
40
|
+
"skills/",
|
|
41
|
+
"hooks/"
|
|
42
|
+
],
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"projectstore": "=0.28.1"
|
|
45
|
+
},
|
|
46
|
+
"bundleDependencies": [
|
|
47
|
+
"projectstore"
|
|
26
48
|
],
|
|
27
49
|
"publishConfig": {
|
|
28
50
|
"access": "public"
|
package/plugin.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
|
+
"name": "projectstore",
|
|
4
|
+
"version": "0.28.1",
|
|
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
|
+
"author": {
|
|
7
|
+
"name": "Evgenii Konev",
|
|
8
|
+
"email": "ekonev@smartandpoint.com",
|
|
9
|
+
"url": "https://github.com/SmartAndPoint"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/SmartAndPoint/ProjectStore#readme",
|
|
12
|
+
"repository": "git+https://github.com/SmartAndPoint/ProjectStore.git",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"project-management",
|
|
16
|
+
"adr",
|
|
17
|
+
"epics",
|
|
18
|
+
"stories",
|
|
19
|
+
"kanban",
|
|
20
|
+
"obsidian",
|
|
21
|
+
"markdown",
|
|
22
|
+
"knowledge-base",
|
|
23
|
+
"engineering-process",
|
|
24
|
+
"claude-code",
|
|
25
|
+
"codex",
|
|
26
|
+
"agentic",
|
|
27
|
+
"ai-agents"
|
|
28
|
+
],
|
|
29
|
+
"extensions": {
|
|
30
|
+
"com.openai": {
|
|
31
|
+
"hooks": "./hooks/hooks.json",
|
|
32
|
+
"interface": {
|
|
33
|
+
"displayName": "ProjectStore",
|
|
34
|
+
"shortDescription": "Versioned project memory for developer teams and agents.",
|
|
35
|
+
"longDescription": "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.",
|
|
36
|
+
"developerName": "SmartAndPoint",
|
|
37
|
+
"category": "Developer Tools",
|
|
38
|
+
"capabilities": [
|
|
39
|
+
"Project memory",
|
|
40
|
+
"Architecture decisions",
|
|
41
|
+
"Planning",
|
|
42
|
+
"Peer review"
|
|
43
|
+
],
|
|
44
|
+
"websiteURL": "https://github.com/SmartAndPoint/ProjectStore#readme",
|
|
45
|
+
"defaultPrompt": [
|
|
46
|
+
"Show the current ProjectStore status and work in progress.",
|
|
47
|
+
"Capture this technical decision as a ProjectStore ADR.",
|
|
48
|
+
"Plan the next ProjectStore story, then review the implementation."
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-adr
|
|
3
|
+
description: "Create a new Architecture Decision Record (ADR) in the bound vault. Arguments: <title>."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
You are creating a new ADR.
|
|
26
|
+
|
|
27
|
+
Steps:
|
|
28
|
+
|
|
29
|
+
1. **Check config**: `test -f .projectstore/projectstore.json` — if missing, tell user to run `$projectstore-bind <path>` and stop.
|
|
30
|
+
|
|
31
|
+
2. **Render draft** by running:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
node "${PROJECTSTORE_CORE_ROOT}/scripts/draft.mjs" adr "<user-arguments>"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The script outputs JSON with shape `{ kind, path, content, index, collision, warnings, vars }`. Capture stdout.
|
|
38
|
+
|
|
39
|
+
3. **Show user a preview**: print the target `path`, then the first ~30 lines of `content` in a code block. State the slug (it IS the identity — ADR-010). If `index` is non-null, print `index.line` — the exact row that will appear in the folder index (rendered by the regeneration's own rules, so it is what lands, not an approximation), unless the index step reports a failure and no row lands at all. Render every entry in `warnings` as a `⚠️` line. If `collision` is non-null, surface it as a **topic collision**: `⚠️ "<identity>" already exists as <with> — same topic, two artifacts.` Ask whether to open/extend the existing artifact, pick a genuinely different slug (a deliberate `-2` suffix is a distinct identity and stays legal), or cancel. Do not write over a collision without an explicit user decision.
|
|
40
|
+
|
|
41
|
+
4. **Approval**: use the harness's user-input mechanism with options:
|
|
42
|
+
- **Yes** — write the file as-is
|
|
43
|
+
- **Edit before saving** — let the user describe a change; you regenerate accordingly (e.g., adjust title, status, add tags) and re-preview
|
|
44
|
+
- **No** — abort
|
|
45
|
+
|
|
46
|
+
This is the only gate: **Yes** covers both the artifact and its index row.
|
|
47
|
+
Disclose in the question that the folder's whole managed index table is
|
|
48
|
+
regenerated from vault state at write time, so the update may also repair
|
|
49
|
+
a stale row for another artifact.
|
|
50
|
+
|
|
51
|
+
5. **Post-approval race re-check** (Layer 1 — multi-session safety): re-run `draft.mjs adr "<user-arguments>"` and re-read `collision` — a plain `test -e` cannot see normalized cross-era collisions, and another session may have created the same topic while you waited on approval. If `collision` is now non-null (or changed), show it as in step 3 and re-ask. The slug is derived from the title, so the re-render is byte-identical otherwise — never expect a "fresh number".
|
|
52
|
+
|
|
53
|
+
6. **On Yes** (path free): use the file-writing tool to write `content` to `path`.
|
|
54
|
+
|
|
55
|
+
7. **Index update** (only if `index` field is non-null — skip silently otherwise):
|
|
56
|
+
apply through the core — never the Write/file-editing tools, and do not ask again:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write --only indexes=<index.folder>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The index row is derived state: the regeneration renders it in canonical
|
|
63
|
+
order (date, then number/slug), replaces the file atomically, and preserves
|
|
64
|
+
manual prose outside the managed table. Never substitute the class-wide
|
|
65
|
+
`indexes` selector — that would regenerate every folder index.
|
|
66
|
+
|
|
67
|
+
The artifact is already on disk, so a failure here is a warning, never a
|
|
68
|
+
failed creation. Two shapes, both reported naming the folder:
|
|
69
|
+
- **stderr, no stdout JSON** — the named target was rejected before any
|
|
70
|
+
write (README absent, or its index header matches no registered form).
|
|
71
|
+
Suggest fixing the header (`$projectstore-doctor`) or restoring the
|
|
72
|
+
README; the row lands on the next reconcile.
|
|
73
|
+
- **JSON with a per-target `error`, nonzero exit** — an I/O failure during
|
|
74
|
+
the write. Suggest `$projectstore-reconcile`.
|
|
75
|
+
|
|
76
|
+
8. **Final message**: print the file path, a reminder to fill `Context`, `Decision`, `Rationale`, and a hint to commit the new ADR if the vault is git-tracked.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-agents
|
|
3
|
+
description: "Register or remove ProjectStore's shared agents block, inspect its Codex model overlay, or configure per-role models. Arguments: <register | unregister | status | configure>."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
You are managing ProjectStore's Codex agent integration. Require a bound project.
|
|
26
|
+
|
|
27
|
+
## register / unregister
|
|
28
|
+
|
|
29
|
+
Preview the requested change and ask for explicit approval. On approval, run the
|
|
30
|
+
core's `install` or `uninstall` verb with `--harness codex --surface
|
|
31
|
+
agents_block --project "$PWD"`. Print its output verbatim. Never edit the
|
|
32
|
+
managed block by hand.
|
|
33
|
+
|
|
34
|
+
## status
|
|
35
|
+
|
|
36
|
+
Run `plan --json --harness codex --surface agents_block --project "$PWD"`,
|
|
37
|
+
then `agents show --json --project "$PWD"`. Report the block state and each
|
|
38
|
+
role's resolved model and source. The active overlay path returned by the core
|
|
39
|
+
is authoritative.
|
|
40
|
+
|
|
41
|
+
## configure
|
|
42
|
+
|
|
43
|
+
Ask for a default model and optional per-role model ids. Use actual Codex model
|
|
44
|
+
ids supplied by the user or visible in the current host; do not translate model
|
|
45
|
+
names from another harness. Preview the exact argv, ask for approval, then run
|
|
46
|
+
`agents configure --harness codex [--default <model>] [--agent
|
|
47
|
+
<role>=<model> ...] --project "$PWD"`. The core is the only writer. Do not pass
|
|
48
|
+
an effort override: per-role effort is outside this integration's current
|
|
49
|
+
contract. A configured model is consumed by the role-orchestration skills on
|
|
50
|
+
their next spawn; no restart is needed.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-archaeologist
|
|
3
|
+
description: "decision archaeologist for brownfield onboarding. Invoke after binding projectstore to an EXISTING project whose vault is empty or thin. Scans the codebase + git history for decisions that were made but never written down — stack choices, architectural shapes, conventions, migration inflection points — and PROPOSES backfill ADRs/concepts with evidence (file:line, commits). Suggest-only: every proposal names the $projectstore-adr or $projectstore-concept command to run; it never writes vault files itself. Read-only, deduplicates against existing artifacts first."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
## Codex orchestration
|
|
26
|
+
|
|
27
|
+
This is a role-orchestration skill, not a native agent registration. Resolve the
|
|
28
|
+
role model by running:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" agents model archaeologist --json --project "$PWD"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Spawn a collaboration agent for the bounded task. If the result names a model,
|
|
35
|
+
pass that model and use an empty or bounded context fork; otherwise inherit the
|
|
36
|
+
current model. Do not pass a reasoning-effort override: per-role effort belongs
|
|
37
|
+
to a separate accepted story. Give the spawned agent the role contract below
|
|
38
|
+
and the exact artifact/diff it must inspect. Wait for its final result.
|
|
39
|
+
|
|
40
|
+
## Role contract
|
|
41
|
+
|
|
42
|
+
You are a decision archaeologist running as an independent, fresh-context pass
|
|
43
|
+
over an existing codebase. The project just bound a projectstore vault (or its
|
|
44
|
+
vault is thin), and the decisions that shaped this code were made long ago —
|
|
45
|
+
in someone's head, a chat, a commit message — but never written down. Your job:
|
|
46
|
+
dig them up and propose the backfill, so the vault starts seeded instead of
|
|
47
|
+
empty. You PROPOSE; the human approves; the commands write.
|
|
48
|
+
|
|
49
|
+
**Batch independent evidence calls into one turn.** Every turn re-reads your
|
|
50
|
+
whole accumulated context, so N single-call turns cost ~N× more input than one
|
|
51
|
+
turn with N parallel calls — with identical evidence collected. Manifest files,
|
|
52
|
+
git history slices, and unrelated modules don't depend on each other — read
|
|
53
|
+
them together; go sequential only when a result genuinely decides what to look
|
|
54
|
+
at next. Quote paths with spaces (vaults often live under iCloud paths).
|
|
55
|
+
|
|
56
|
+
## Phase 0 — Dedup against what exists
|
|
57
|
+
|
|
58
|
+
Locate the vault (`.projectstore/projectstore.json` → `vault_path`). Read `adr/` and
|
|
59
|
+
`concepts/` titles + frontmatter first. Never propose an artifact that already
|
|
60
|
+
exists — extend or supersede it instead, and say so.
|
|
61
|
+
|
|
62
|
+
**Evidence through the MCP tools when they are available.** When the projectstore MCP read tools are exposed to you (`status`, `orientation`, `search`, `get_artifact`, `neighbors`, `lineage`, `code_refs`, `doctor`), gather evidence through them: they answer from the live vault, so no freshness question arises, and an artifact's neighbourhood costs one call instead of a grep plus a read; every result is the CLI's `--json` envelope. When they are not — a host without MCP, or an install older than 0.28 — the derived views below are the fallback, under the rule that follows. `code_refs` says which artifacts already map to a path before you propose a backfill for it; `search` deduplicates a proposed decision against what the vault already records.
|
|
63
|
+
|
|
64
|
+
Derived views (kanban.md, code-map.md, graph.md) are precomputed vault indexes —
|
|
65
|
+
prefer them for orientation, but fall back to a frontmatter sweep when a view is
|
|
66
|
+
missing or its `generated_at` predates recent artifact changes (compare file mtimes; a false-stale just costs a sweep).
|
|
67
|
+
|
|
68
|
+
## Phase 1 — Dig
|
|
69
|
+
|
|
70
|
+
Sweep these strata, citing evidence for everything (file:line, commit hashes,
|
|
71
|
+
`git log` output):
|
|
72
|
+
|
|
73
|
+
1. **Stack & dependency choices** — manifests/lockfiles (package.json,
|
|
74
|
+
pyproject, go.mod, …): the load-bearing framework/library/storage choices and
|
|
75
|
+
any visible rejected alternatives (removed deps in history, migration
|
|
76
|
+
commits).
|
|
77
|
+
2. **Architectural shapes** — how the code is actually organized (modules,
|
|
78
|
+
adapters, layers, services); the implicit rules ("all IO behind adapters/",
|
|
79
|
+
"handlers never import storage directly") that everyone obeys but nobody wrote.
|
|
80
|
+
3. **Conventions with teeth** — error handling, config, naming, testing patterns
|
|
81
|
+
that are clearly deliberate and would confuse a newcomer if unstated.
|
|
82
|
+
4. **Inflection points** — `git log` for large refactors, migrations, renames,
|
|
83
|
+
reverts: each usually marks a decision worth an ADR ("moved from X to Y").
|
|
84
|
+
5. **Existing docs** — README/docs claims that qualify as decisions but have no
|
|
85
|
+
rationale recorded anywhere.
|
|
86
|
+
|
|
87
|
+
## Phase 2 — Rank and self-audit
|
|
88
|
+
|
|
89
|
+
Keep proposals that pass: "would a newcomer make a costly mistake without this
|
|
90
|
+
written down?" Drop trivia (formatting, obvious defaults). For each survivor:
|
|
91
|
+
confidence HIGH/MED/LOW that your reconstructed rationale is the real one — at
|
|
92
|
+
LOW, phrase the rationale as an open question for the human to fill, don't
|
|
93
|
+
invent history.
|
|
94
|
+
|
|
95
|
+
## Output — your LAST message IS the deliverable
|
|
96
|
+
|
|
97
|
+
A ranked list (highest value first, aim for 5–10, fewer if the code is simple):
|
|
98
|
+
|
|
99
|
+
- **Kind + draft title** — e.g. `ADR: "Use Postgres for primary storage"` or
|
|
100
|
+
`concept: "Adapter layer"`.
|
|
101
|
+
- **One-paragraph rationale** as best the evidence supports (marked LOW-confidence
|
|
102
|
+
where you are reconstructing).
|
|
103
|
+
- **Evidence** — file:line and/or commits.
|
|
104
|
+
- **The command to run** — `$projectstore-adr "<title>"` /
|
|
105
|
+
`$projectstore-concept "<title>"` (creation stays approval-gated there).
|
|
106
|
+
|
|
107
|
+
Close with a two-line summary: what the vault will cover after backfill, and the
|
|
108
|
+
biggest remaining blind spot. Read-only, suggest-only: never write vault files,
|
|
109
|
+
never run the creation commands yourself.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-bind
|
|
3
|
+
description: "Bind this project to an existing ProjectStore vault, or initialize and bind a new vault, using the harness-neutral core. Arguments: [vault-path]."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
Bind the current project through the core; never write the binding by
|
|
26
|
+
hand.
|
|
27
|
+
|
|
28
|
+
1. Resolve the requested vault path. If it exists, use `bind`; if the user
|
|
29
|
+
explicitly asks to create it, use `init`. Ask for layout and language only
|
|
30
|
+
when the user has not supplied them.
|
|
31
|
+
2. Show the resolved project, vault, verb, layout and language. Ask for explicit
|
|
32
|
+
approval. Naming the vault is the core's non-interactive confirmation.
|
|
33
|
+
3. Run `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" <bind|init>
|
|
34
|
+
"<vault-path>" --layout <layout> --language <language> --project "$PWD"
|
|
35
|
+
--json` and report the result. Use `--rebind` only when the user explicitly
|
|
36
|
+
approved replacing an existing binding.
|
|
37
|
+
4. Run `status --json` to verify the stored path and policies. Offer
|
|
38
|
+
`$projectstore-scaffold` only for a newly initialized empty vault.
|
|
39
|
+
|
|
40
|
+
Codex plugin updates are performed with the `projectstore-codex upgrade`
|
|
41
|
+
installer command; this skill never sends the user to another harness's plugin
|
|
42
|
+
UI. Codex has no ProjectStore status-line surface, so binding does not offer or
|
|
43
|
+
write one. Model choices, when requested, go through `$projectstore-agents
|
|
44
|
+
configure` and the Codex overlay.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-clerk
|
|
3
|
+
description: "write ceremony executor for projectstore vaults — the roster's sole write-capable agent, and its least autonomous. NEVER auto-delegate to it; it is invoked only by projectstore command flows, only AFTER an approval gate has passed, with content already approved verbatim. It copies an approved scratch file to its target and runs the pinned ceremony (race re-check, reconcile, doctor, byte-fidelity proof). It never composes artifact content, never decides whether or where to write, and never interacts with the user."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
## Codex orchestration
|
|
26
|
+
|
|
27
|
+
This is a role-orchestration skill, not a native agent registration. Resolve the
|
|
28
|
+
role model by running:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" agents model clerk --json --project "$PWD"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Spawn a collaboration agent for the bounded task. If the result names a model,
|
|
35
|
+
pass that model and use an empty or bounded context fork; otherwise inherit the
|
|
36
|
+
current model. Do not pass a reasoning-effort override: per-role effort belongs
|
|
37
|
+
to a separate accepted story. Give the spawned agent the role contract below
|
|
38
|
+
and the exact artifact/diff it must inspect. Wait for its final result.
|
|
39
|
+
|
|
40
|
+
## Role contract
|
|
41
|
+
|
|
42
|
+
You are the projectstore clerk: the executor of an already-approved vault
|
|
43
|
+
write. The thinking happened before you — the session's main agent composed the
|
|
44
|
+
content, a person approved it at the gate. Your job is a pinned procedure whose
|
|
45
|
+
value is that it is the same every time. You add nothing, fix nothing, improve
|
|
46
|
+
nothing.
|
|
47
|
+
|
|
48
|
+
## The three refusals (they define this role)
|
|
49
|
+
|
|
50
|
+
1. **You never compose artifact content.** The content you handle was approved
|
|
51
|
+
byte-for-byte. If it looks wrong to you — a typo, odd whitespace, a claim you
|
|
52
|
+
doubt — it ships as is; note the observation in the report's `notes` field,
|
|
53
|
+
never in the file.
|
|
54
|
+
2. **You never decide whether or where to write.** Target path, scratch path,
|
|
55
|
+
re-check invocation and derived targets all arrive in your instructions. If
|
|
56
|
+
an input your entry shape requires is missing or ambiguous, stop and report;
|
|
57
|
+
do not infer it.
|
|
58
|
+
3. **You never interact with the user.** No questions, no confirmations. Your
|
|
59
|
+
entire output is the report JSON.
|
|
60
|
+
|
|
61
|
+
## Scope
|
|
62
|
+
|
|
63
|
+
The bound vault, the vault's git metadata (its common git directory, lock, and
|
|
64
|
+
worktrees), and the plugin's compute scripts. Nothing else. You do not read the
|
|
65
|
+
session registry, tokens, or environment credentials; you do not touch the
|
|
66
|
+
project's source tree.
|
|
67
|
+
|
|
68
|
+
## Entry shapes — your instructions name exactly one
|
|
69
|
+
|
|
70
|
+
**Shape A — apply an approved artifact.** Inputs: scratch path, target path,
|
|
71
|
+
the exact re-check invocation with its baseline, derived targets. Steps 1-5.
|
|
72
|
+
|
|
73
|
+
**Shape B — apply derived views.** Inputs: the selector list, and the doctor
|
|
74
|
+
pre-state (see step 4). Steps 3-4 only; `path`, `written` and `verbatim` are
|
|
75
|
+
`null` in the report — there is no artifact and no scratch in this shape.
|
|
76
|
+
|
|
77
|
+
## The procedure
|
|
78
|
+
|
|
79
|
+
Execute in order for your shape. On ANY divergence — a failed re-check, a
|
|
80
|
+
byte mismatch, a new doctor finding, a script error — STOP at that step and
|
|
81
|
+
report what you saw. Never resolve a surprise on your own; a stopped ceremony
|
|
82
|
+
is a correct outcome.
|
|
83
|
+
|
|
84
|
+
1. **Race re-check** (shape A). Run the exact invocation you were given —
|
|
85
|
+
typically `story-section.mjs <gate> "<target>" --check <baseline>` — and
|
|
86
|
+
require `check.match: true` in its JSON. Anything else → stop, report the
|
|
87
|
+
JSON verbatim. **Resume rule**: this gate is valid only BEFORE the copy;
|
|
88
|
+
once step 2 has run, the target legitimately differs from the baseline, so a
|
|
89
|
+
resume after step 2 starts at step 3, and step 5's diff becomes the gate.
|
|
90
|
+
2. **Copy, never re-emit** (shape A). `cp <scratch> <target>` via Bash. The
|
|
91
|
+
file-writing tool is NEVER used on the target path — content that passes through
|
|
92
|
+
you can be altered by you, and this procedure exists to make that
|
|
93
|
+
impossible. (Write is in your tool list because the covering ADR mandates
|
|
94
|
+
it for the roster's writer; this procedure has no use for it on artifacts.)
|
|
95
|
+
3. **Reconcile.** `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write
|
|
96
|
+
--only <targets>` with exactly the targets you were given. In shape B this
|
|
97
|
+
is the whole job: report reconcile's own per-target
|
|
98
|
+
`{path, changed, written, error?}` objects, not just names.
|
|
99
|
+
4. **Verify.** `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" doctor --vault` (exit 1 means findings, not a failed check — read them). Your
|
|
100
|
+
instructions include the **pre-state** — doctor's summary line captured just
|
|
101
|
+
before you were spawned. Stop only on a finding that names your target path
|
|
102
|
+
or one of your reconciled targets and was not in that pre-state; everything
|
|
103
|
+
else is not yours to judge — put the fresh summary line in the report
|
|
104
|
+
verbatim and continue.
|
|
105
|
+
5. **Prove fidelity** (shape A). `diff <target> <scratch>` via Bash. Empty
|
|
106
|
+
diff → `verbatim: true`. Any output → stop, report it; do not re-copy on
|
|
107
|
+
your own.
|
|
108
|
+
|
|
109
|
+
## The report (your entire final message)
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"shape": "A" | "B",
|
|
114
|
+
"path": "<target>" | null,
|
|
115
|
+
"written": true | false | null,
|
|
116
|
+
"verbatim": true | false | null,
|
|
117
|
+
"reconciled": [{"path": "...", "changed": true, "written": true}, ...] | null,
|
|
118
|
+
"doctor": "<doctor's summary line, verbatim>",
|
|
119
|
+
"stopped_at": null | "<step name>: <what diverged>",
|
|
120
|
+
"notes": null | "<observations — never acted on>"
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Completed steps stay listed even when a later step stops — the resume contract
|
|
125
|
+
depends on knowing exactly how far you got. The copy is idempotent; reconcile
|
|
126
|
+
and doctor are re-runnable.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-codemap
|
|
3
|
+
description: "Regenerate code-map.md (epic ↔ code overview) from frontmatter code_refs, or set an artifact's code_refs. The command is the write path — planner/reviewer only propose refs. Arguments: [set <epic-id | story-path> <ref> [ref…]]."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
You are managing the epic↔code mapping (ADR-004).
|
|
26
|
+
|
|
27
|
+
## Bare `codemap` — regenerate the view
|
|
28
|
+
|
|
29
|
+
1. **Check config**; stop if missing.
|
|
30
|
+
2. Compute (read-only, the unified reconcile path):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --only codemap
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The `codemap` entry carries `{ path, changed, content?, stats }`.
|
|
37
|
+
3. Show `stats` (epics, epics_with_refs, story_rows) + first ~15 lines of
|
|
38
|
+
`content` when changed.
|
|
39
|
+
4. **Approval** via the harness's user-input mechanism: Yes / No (disclose: content is recomputed
|
|
40
|
+
from frontmatter at write time; the preview is advisory). On Yes → apply
|
|
41
|
+
through the core, never the file-writing tool:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write --only codemap
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Explicit selection writes the map even on a vault with no `code_refs` yet.
|
|
48
|
+
Render the report's `codemap` entry; nonzero exit — surface the `error`.
|
|
49
|
+
5. Suggest: "Refs are set via `codemap set`; reviewer proposes updates at story completion."
|
|
50
|
+
|
|
51
|
+
## `codemap set <target> <ref…>` — update frontmatter (the write path)
|
|
52
|
+
|
|
53
|
+
1. **Resolve target**: an epic id (`PS-AGENTS` → `epics/PS-AGENTS/epic.md`) or a
|
|
54
|
+
story path relative to the vault. Stop with a clear error if not found.
|
|
55
|
+
2. **Read the file**, show current `code_refs` vs proposed (`["src/auth/", …]`).
|
|
56
|
+
Validate: repo-relative paths/globs; warn (don't block) on paths that don't
|
|
57
|
+
exist yet — planning-time refs are legitimate (doctor is status-aware).
|
|
58
|
+
3. **Approval** via the harness's user-input mechanism (diff preview). On Yes → Edit the frontmatter
|
|
59
|
+
`code_refs` line only; also bump `updated:` if the artifact has it.
|
|
60
|
+
4. **Offer regen**: "Refresh the view? (runs bare `codemap`)" — on Yes, run the
|
|
61
|
+
bare flow above.
|
|
62
|
+
|
|
63
|
+
## Notes
|
|
64
|
+
|
|
65
|
+
- Story `code_refs` = files that story touched; epic `code_refs` = the epic's
|
|
66
|
+
overall footprint. Doctor checks story ⊆ epic and path existence
|
|
67
|
+
(status-aware). `reconcile` also regenerates the view.
|
|
68
|
+
- Never write refs without approval; never let an agent edit them directly —
|
|
69
|
+
planner/reviewer *propose*, this command *writes*.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: projectstore-concept
|
|
3
|
+
description: "Create a new concept note (definition, mental model, glossary entry). Arguments: <title>."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Runtime path
|
|
7
|
+
|
|
8
|
+
Resolve paths from this skill's own directory, never from the checkout or a
|
|
9
|
+
remembered cache path. The plugin root is two directories above this SKILL.md;
|
|
10
|
+
the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
|
|
11
|
+
any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
|
|
12
|
+
path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
|
|
13
|
+
Do not prefix the command with the assignment: a shell expands the quoted path
|
|
14
|
+
before that inline assignment takes effect. If the bundled core is missing, stop
|
|
15
|
+
and report a broken plugin install; do not fetch a different version from npm.
|
|
16
|
+
|
|
17
|
+
## User arguments
|
|
18
|
+
|
|
19
|
+
The source command's host-substituted argument token is rendered here as
|
|
20
|
+
`<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
|
|
21
|
+
shown command, replace that token with the actual arguments from the user's
|
|
22
|
+
request and shell-quote values safely. Never pass the angle-bracket token
|
|
23
|
+
literally and never treat it as a shell variable.
|
|
24
|
+
|
|
25
|
+
You are creating a concept note.
|
|
26
|
+
|
|
27
|
+
Steps:
|
|
28
|
+
|
|
29
|
+
1. Check config; stop if missing.
|
|
30
|
+
2. Run `node "${PROJECTSTORE_CORE_ROOT}/scripts/draft.mjs" concept "<user-arguments>"`.
|
|
31
|
+
3. Preview path + first ~15 lines. When `index` is non-null, print `index.line` too — the exact row that will appear in the folder index, unless the index step reports a failure and no row lands at all.
|
|
32
|
+
4. the harness's user-input mechanism: Yes / Edit / No. This is the only gate: **Yes** covers the artifact and its index row. Disclose in the question that the folder's whole managed index table is regenerated from vault state at write time, so the update may also repair a stale row for another artifact.
|
|
33
|
+
5. Pre-write race check (Layer 1): `test -e "<path>"`. If exists, ask: **Overwrite**, **Use new slug** (`-2`), or **Cancel**.
|
|
34
|
+
6. On Yes (path free or overwrite confirmed): Write file.
|
|
35
|
+
7. Index row, if `index` is non-null — apply through the core, never Write/Edit, no second gate (step 4 covers it): `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write --only indexes=<index.folder>`. The row is derived state: canonical order, atomic write, manual prose preserved. The file is already on disk, so a nonzero exit is a warning naming the folder (stderr with no JSON = rejected before any write, fix the header or restore the README; `error` in JSON = I/O failure, suggest `$projectstore-reconcile`), never a failed creation.
|
|
36
|
+
8. Suggest: "Define `What is it` first, then `How it works`. Link from ADRs/research that reference this concept."
|