@oevery/rsp 1.0.1 → 1.0.3

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # RSP: Rules, Spec, Plan
1
+ # RSP: Rules, Specs, Plans
2
2
 
3
- RSP = **Rules, Spec, Plan** — a lightweight AI-assisted development workflow.
3
+ RSP = **Rules, Specs, Plans** — a lightweight AI-assisted development workflow.
4
4
 
5
5
  ## Quick start
6
6
 
@@ -34,7 +34,7 @@ For other tools (Cursor, Claude Code, Copilot), add the path to the appropriate
34
34
  ├── config.yaml # project config (custom statuses, priorities, sections)
35
35
  ├── rules/ # technical constraints, long-lived
36
36
  │ └── rsp-rules.md
37
- ├── spec/ # project-level architecture
37
+ ├── specs/ # project-level architecture
38
38
  │ └── INDEX.md # extracted spec summaries from archived features
39
39
  ├── features/ # feature files (flat or nested)
40
40
  │ ├── login.md
package/README.zh-CN.md CHANGED
@@ -1,6 +1,6 @@
1
- # RSP:Rules, Spec, Plan
1
+ # RSP:Rules, Specs, Plans
2
2
 
3
- RSP = **Rules(规则)、Spec(规格)、Plan(计划)** — 轻量级 AI 辅助开发工作流。
3
+ RSP = **Rules(规则)、Specs(规格)、Plans(计划)** — 轻量级 AI 辅助开发工作流。
4
4
 
5
5
  ## 快速开始
6
6
 
@@ -33,7 +33,7 @@ cd my-project && rsp init
33
33
  .rsp/
34
34
  ├── config.yaml # 项目配置
35
35
  ├── rules/ # 技术约束
36
- ├── spec/ # 项目级架构
36
+ ├── specs/ # 项目级架构
37
37
  │ └── INDEX.md # 从归档提取的 spec 摘要
38
38
  ├── features/ # 特性文件
39
39
  │ ├── auth/
package/bin/rsp.mjs ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { runCli } from '../dist/cli.mjs'
4
+
5
+ runCli()
package/dist/cli.mjs CHANGED
@@ -595,7 +595,7 @@ async function runCheckIfHasDependents(name) {
595
595
  }
596
596
  }
597
597
  async function updateSpecIndex(name, date) {
598
- const specIndexPath = join5(RSP_DIR, "spec", "INDEX.md");
598
+ const specIndexPath = join5(RSP_DIR, "specs", "INDEX.md");
599
599
  const archiveDir = join5(RSP_DIR, "archive");
600
600
  const escaped = name.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
601
601
  const lineRe = new RegExp(`^\\| \\d{4}-\\d{2}-\\d{2} \\| ${escaped} \\|`, "m");
@@ -626,7 +626,7 @@ async function updateSpecIndex(name, date) {
626
626
  if (lineRe.test(existing))
627
627
  return;
628
628
  if (!existing.includes("| Date | Feature | Summary |")) {
629
- await writeFile3(specIndexPath, `# Spec Index
629
+ await writeFile3(specIndexPath, `# Specs Index
630
630
 
631
631
  | Date | Feature | Summary |
632
632
  |------|---------|---------|
@@ -721,10 +721,11 @@ async function detectProjectName() {
721
721
  return basename3(process.cwd());
722
722
  }
723
723
  var AGENTS_BODY = `## Collaboration Mode
724
- This project uses **RSP** (Rules, Spec, Plan) \u2014 see \`.rsp/rules/\` for the full workflow definition (start with \`rsp-rules.md\`).
724
+ This project uses **RSP** (Rules, Specs, Plans) \u2014 see \`.rsp/rules/\` for the full workflow definition (start with \`rsp-rules.md\`).
725
725
 
726
726
  Key conventions:
727
727
  - \`.rsp/rules/\` \u2014 technical constraints and coding conventions
728
+ - \`.rsp/specs/\` \u2014 project-level architecture and design reference
728
729
  - \`.rsp/features/<name>.md\` \u2014 feature definitions (spec + plan + tests)
729
730
  - \`.rsp/active.d/\` \u2014 currently active features (path = feature name)
730
731
  - \`.rsp/archive/\` \u2014 completed features
@@ -763,7 +764,7 @@ async function initProject() {
763
764
  return withRspLock("init", async () => {
764
765
  const dirs = [
765
766
  join7(RSP_DIR, "rules"),
766
- join7(RSP_DIR, "spec"),
767
+ join7(RSP_DIR, "specs"),
767
768
  join7(RSP_DIR, "features"),
768
769
  join7(RSP_DIR, "archive")
769
770
  ];
@@ -780,9 +781,9 @@ async function initProject() {
780
781
  await writeFile4(configPath, CONFIG_TEMPLATE);
781
782
  created = true;
782
783
  }
783
- const specIndexPath = join7(RSP_DIR, "spec", "INDEX.md");
784
+ const specIndexPath = join7(RSP_DIR, "specs", "INDEX.md");
784
785
  if (!existsSync7(specIndexPath)) {
785
- await writeFile4(specIndexPath, "# Spec Index\n\n_Extracted from archived features._\n");
786
+ await writeFile4(specIndexPath, "# Specs Index\n\n_Extracted from archived features._\n");
786
787
  created = true;
787
788
  }
788
789
  const gitignorePath = join7(RSP_DIR, ".gitignore");
@@ -826,7 +827,7 @@ ${AGENTS_BODY}
826
827
  ${pc.green("RSP scaffolded.")}
827
828
  `);
828
829
  console.log(` Created: .rsp/rules/
829
- .rsp/spec/
830
+ .rsp/specs/
830
831
  .rsp/features/
831
832
  .rsp/archive/
832
833
  .rsp/.gitignore
@@ -1110,7 +1111,7 @@ async function runCli(rawArgs = process.argv.slice(2)) {
1110
1111
  meta: {
1111
1112
  name: "rsp",
1112
1113
  version,
1113
- description: "RSP (Rules, Spec, Plan) workflow for AI-assisted development"
1114
+ description: "RSP (Rules, Specs, Plans) workflow for AI-assisted development"
1114
1115
  },
1115
1116
  subCommands: {
1116
1117
  "init": initCommand,
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@oevery/rsp",
3
3
  "type": "module",
4
- "version": "1.0.1",
5
- "description": "RSP (Rules, Spec, Plan) workflow for AI-assisted development",
4
+ "version": "1.0.3",
5
+ "description": "RSP (Rules, Specs, Plans) workflow for AI-assisted development",
6
6
  "author": "oevery",
7
7
  "license": "MIT",
8
8
  "homepage": "https://github.com/oevery/rsp#readme",
@@ -14,16 +14,17 @@
14
14
  "keywords": [
15
15
  "rsp",
16
16
  "rules",
17
- "spec",
18
- "plan",
17
+ "specs",
18
+ "plans",
19
19
  "ai",
20
20
  "coding",
21
21
  "workflow"
22
22
  ],
23
23
  "bin": {
24
- "rsp": "./dist/cli.mjs"
24
+ "rsp": "bin/rsp.mjs"
25
25
  },
26
26
  "files": [
27
+ "bin/",
27
28
  "dist/",
28
29
  "rules/"
29
30
  ],
@@ -5,14 +5,14 @@ description: RSP rules for Rules, Spec, and Plan driven development.
5
5
 
6
6
  # RSP
7
7
 
8
- RSP = Rules, Spec, Plan.
8
+ RSP = Rules, Specs, Plans.
9
9
 
10
10
  ## Structure
11
11
 
12
12
  ```text
13
13
  .rsp/
14
14
  ├── rules/ # technical constraints, long-lived
15
- ├── spec/ # project-level architecture (optional)
15
+ ├── specs/ # project-level architecture (optional)
16
16
  ├── features/ # active features
17
17
  │ ├── <name>.md # or <domain>/<name>.md for grouping
18
18
  ├── active.d/ # active feature markers
@@ -25,7 +25,7 @@ RSP = Rules, Spec, Plan.
25
25
  ## File roles
26
26
 
27
27
  - `rules/` — stable technical constraints, coding conventions, architecture decisions. One or more files, split by domain (e.g., `frontend.md`, `api.md`). Do not put business requirements here.
28
- - `spec/` — project-level architecture and design reference. Use for cross-cutting concerns, system diagrams, ADRs. Per-feature details go in `features/`.
28
+ - \`specs/\` — project-level architecture and design reference. Use for cross-cutting concerns, system diagrams, ADRs. Per-feature details go in \`features/\`.
29
29
  - `features/<name>.md` — a complete feature definition, optionally grouped by domain subdirectory (e.g., `features/auth/login.md`). Contains YAML frontmatter, `## Spec` (what), `## Plan` (how), `## Tests`, and optional `## Notes`.
30
30
  - `active.d/` — active feature tracking. Mirrors the `features/` directory structure (e.g., `active.d/payments/checkout`). Each file is an empty marker; the file path is the source of truth. All features in `active.d/` are considered active.
31
31
 
@@ -36,7 +36,7 @@ RSP = Rules, Spec, Plan.
36
36
  3. If empty, ask the user or suggest `rsp new <name>`.
37
37
  4. Read the referenced `features/<name>.md`.
38
38
  5. Read `rules/` for technical constraints.
39
- 6. Optionally read `spec/` for architecture context and `config.yaml` for customized statuses/priorities.
39
+ 6. Optionally read \`specs/\` for architecture context and \`config.yaml\` for customized statuses/priorities.
40
40
 
41
41
  ## Token optimization
42
42