compass-st 1.1.2
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 +105 -0
- package/VERSION +1 -0
- package/bin/install +174 -0
- package/bootstrap.sh +95 -0
- package/cli/Cargo.lock +270 -0
- package/cli/Cargo.toml +24 -0
- package/cli/src/cmd/context.rs +59 -0
- package/cli/src/cmd/dag.rs +133 -0
- package/cli/src/cmd/git.rs +148 -0
- package/cli/src/cmd/hook.rs +51 -0
- package/cli/src/cmd/index.rs +363 -0
- package/cli/src/cmd/manifest.rs +34 -0
- package/cli/src/cmd/memory.rs +680 -0
- package/cli/src/cmd/migrate.rs +790 -0
- package/cli/src/cmd/mod.rs +14 -0
- package/cli/src/cmd/progress.rs +107 -0
- package/cli/src/cmd/project.rs +1700 -0
- package/cli/src/cmd/session.rs +64 -0
- package/cli/src/cmd/state.rs +317 -0
- package/cli/src/cmd/validate/mod.rs +506 -0
- package/cli/src/cmd/validate/prd.rs +472 -0
- package/cli/src/cmd/version.rs +89 -0
- package/cli/src/helpers.rs +40 -0
- package/cli/src/main.rs +75 -0
- package/cli/tests/fixtures/plan_empty_pointers.json +60 -0
- package/cli/tests/fixtures/plan_missing_pointers.json +59 -0
- package/cli/tests/fixtures/plan_too_many_pointers.json +92 -0
- package/cli/tests/fixtures/plan_v1_valid.json +64 -0
- package/cli/tests/fixtures/prd_bad_flow_bullet.md +37 -0
- package/cli/tests/fixtures/prd_bad_flow_prose.md +33 -0
- package/cli/tests/fixtures/prd_good_flow.md +41 -0
- package/cli/tests/fixtures/prd_xref_dangling.md +38 -0
- package/cli/tests/fixtures/prd_xref_valid.md +53 -0
- package/cli/tests/fixtures/projects/proj_a/.compass/.state/config.json +12 -0
- package/cli/tests/fixtures/projects/proj_b/.compass/.state/config.json +12 -0
- package/cli/tests/fixtures/projects/proj_c/.compass/.state/config.json +12 -0
- package/cli/tests/fixtures/registry/all_dead.json +18 -0
- package/cli/tests/fixtures/registry/corrupt.json +1 -0
- package/cli/tests/fixtures/registry/empty.json +1 -0
- package/cli/tests/fixtures/registry/last_active_dead.json +24 -0
- package/cli/tests/fixtures/registry/multi_alive.json +24 -0
- package/cli/tests/fixtures/registry/one_alive.json +12 -0
- package/cli/tests/fixtures/v0_project/.compass/.state/config.json +5 -0
- package/cli/tests/fixtures/v0_project/.compass/.state/sessions/onboarding-redesign/plan.json +29 -0
- package/cli/tests/fixtures/v0_project/.compass/.state/sessions/sample-feature/context.json +11 -0
- package/cli/tests/fixtures/v0_project/.compass/.state/sessions/sample-feature/plan.json +49 -0
- package/core/colleagues/base-rules.md +112 -0
- package/core/colleagues/manifest.json +85 -0
- package/core/colleagues/market-analyst.md +50 -0
- package/core/colleagues/prioritizer.md +53 -0
- package/core/colleagues/researcher.md +54 -0
- package/core/colleagues/reviewer.md +55 -0
- package/core/colleagues/stakeholder-comm.md +59 -0
- package/core/colleagues/story-breaker.md +57 -0
- package/core/colleagues/ux-reviewer.md +54 -0
- package/core/colleagues/writer.md +55 -0
- package/core/commands/compass/brief.md +28 -0
- package/core/commands/compass/check.md +27 -0
- package/core/commands/compass/epic.md +32 -0
- package/core/commands/compass/feedback.md +32 -0
- package/core/commands/compass/help.md +24 -0
- package/core/commands/compass/ideate.md +32 -0
- package/core/commands/compass/init.md +30 -0
- package/core/commands/compass/plan.md +27 -0
- package/core/commands/compass/prd.md +39 -0
- package/core/commands/compass/prioritize.md +36 -0
- package/core/commands/compass/prototype.md +28 -0
- package/core/commands/compass/release.md +32 -0
- package/core/commands/compass/research.md +31 -0
- package/core/commands/compass/roadmap.md +32 -0
- package/core/commands/compass/run.md +28 -0
- package/core/commands/compass/setup.md +32 -0
- package/core/commands/compass/sprint.md +32 -0
- package/core/commands/compass/status.md +32 -0
- package/core/commands/compass/story.md +37 -0
- package/core/commands/compass/undo.md +33 -0
- package/core/commands/compass/update.md +29 -0
- package/core/hooks/context-monitor.sh +5 -0
- package/core/hooks/manifest-tracker.sh +62 -0
- package/core/hooks/statusline.sh +12 -0
- package/core/hooks/update-checker.sh +24 -0
- package/core/integrations/confluence.md +267 -0
- package/core/integrations/figma.md +277 -0
- package/core/integrations/jira.md +436 -0
- package/core/integrations/vercel.md +170 -0
- package/core/manifest.json +172 -0
- package/core/shared/SCHEMAS-v1.md +404 -0
- package/core/shared/progress.md +145 -0
- package/core/shared/project-scan.md +293 -0
- package/core/shared/resolve-project.md +136 -0
- package/core/shared/ux-rules.md +52 -0
- package/core/shared/version-backup.md +38 -0
- package/core/templates/prd-template.md +145 -0
- package/core/templates/story-template.md +99 -0
- package/core/workflows/brief.md +184 -0
- package/core/workflows/check.md +436 -0
- package/core/workflows/epic.md +177 -0
- package/core/workflows/feedback.md +164 -0
- package/core/workflows/help.md +79 -0
- package/core/workflows/ideate.md +320 -0
- package/core/workflows/init.md +524 -0
- package/core/workflows/migrate.md +136 -0
- package/core/workflows/plan.md +320 -0
- package/core/workflows/prd.md +632 -0
- package/core/workflows/prioritize.md +301 -0
- package/core/workflows/project.md +177 -0
- package/core/workflows/prototype.md +174 -0
- package/core/workflows/release.md +179 -0
- package/core/workflows/research.md +613 -0
- package/core/workflows/roadmap.md +152 -0
- package/core/workflows/run.md +367 -0
- package/core/workflows/setup.md +294 -0
- package/core/workflows/sprint.md +187 -0
- package/core/workflows/status.md +185 -0
- package/core/workflows/story.md +477 -0
- package/core/workflows/undo.md +42 -0
- package/core/workflows/update.md +127 -0
- package/package.json +37 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
pub mod validate;
|
|
2
|
+
pub mod dag;
|
|
3
|
+
pub mod session;
|
|
4
|
+
pub mod state;
|
|
5
|
+
pub mod version;
|
|
6
|
+
pub mod manifest;
|
|
7
|
+
pub mod hook;
|
|
8
|
+
pub mod context;
|
|
9
|
+
pub mod memory;
|
|
10
|
+
pub mod index;
|
|
11
|
+
pub mod git;
|
|
12
|
+
pub mod progress;
|
|
13
|
+
pub mod migrate;
|
|
14
|
+
pub mod project;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
use crate::helpers;
|
|
2
|
+
use serde_json::json;
|
|
3
|
+
use std::path::Path;
|
|
4
|
+
|
|
5
|
+
pub fn run(args: &[String]) -> Result<String, String> {
|
|
6
|
+
if args.len() < 2 {
|
|
7
|
+
return Err("Usage: compass-cli progress <save|load|clear> <session-dir> [step] [data-json]".into());
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
match args[0].as_str() {
|
|
11
|
+
"save" => cmd_save(args),
|
|
12
|
+
"load" => cmd_load(args),
|
|
13
|
+
"clear" => cmd_clear(args),
|
|
14
|
+
_ => Err(format!("Unknown progress command: {}", args[0])),
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
fn progress_path(session_dir: &str) -> std::path::PathBuf {
|
|
19
|
+
Path::new(session_dir).join("progress.json")
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fn cmd_save(args: &[String]) -> Result<String, String> {
|
|
23
|
+
// args: ["save", <session-dir>, <step>, <data-json>]
|
|
24
|
+
if args.len() < 4 {
|
|
25
|
+
return Err("Usage: compass-cli progress save <session-dir> <step> <data-json>".into());
|
|
26
|
+
}
|
|
27
|
+
let session_dir = &args[1];
|
|
28
|
+
let step = &args[2];
|
|
29
|
+
let data_raw = &args[3];
|
|
30
|
+
|
|
31
|
+
let data: serde_json::Value = serde_json::from_str(data_raw)
|
|
32
|
+
.map_err(|e| format!("Invalid data JSON: {}", e))?;
|
|
33
|
+
|
|
34
|
+
// Derive workflow from session dir name (last path component, strip timestamps/slugs)
|
|
35
|
+
let workflow = Path::new(session_dir)
|
|
36
|
+
.file_name()
|
|
37
|
+
.and_then(|n| n.to_str())
|
|
38
|
+
.unwrap_or("unknown")
|
|
39
|
+
.to_string();
|
|
40
|
+
|
|
41
|
+
let saved_at = chrono_now();
|
|
42
|
+
|
|
43
|
+
let payload = json!({
|
|
44
|
+
"workflow": workflow,
|
|
45
|
+
"step": step,
|
|
46
|
+
"data": data,
|
|
47
|
+
"saved_at": saved_at
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
let path = progress_path(session_dir);
|
|
51
|
+
if let Some(parent) = path.parent() {
|
|
52
|
+
std::fs::create_dir_all(parent).map_err(|e| e.to_string())?;
|
|
53
|
+
}
|
|
54
|
+
helpers::write_json(&path, &payload)?;
|
|
55
|
+
|
|
56
|
+
Ok(json!({
|
|
57
|
+
"success": true,
|
|
58
|
+
"path": path.to_string_lossy(),
|
|
59
|
+
"step": step,
|
|
60
|
+
"saved_at": saved_at
|
|
61
|
+
})
|
|
62
|
+
.to_string())
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
fn cmd_load(args: &[String]) -> Result<String, String> {
|
|
66
|
+
// args: ["load", <session-dir>]
|
|
67
|
+
if args.len() < 2 {
|
|
68
|
+
return Err("Usage: compass-cli progress load <session-dir>".into());
|
|
69
|
+
}
|
|
70
|
+
let session_dir = &args[1];
|
|
71
|
+
let path = progress_path(session_dir);
|
|
72
|
+
|
|
73
|
+
if !path.exists() {
|
|
74
|
+
return Ok(json!({"exists": false}).to_string());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
let data = helpers::read_json(&path)?;
|
|
78
|
+
Ok(serde_json::to_string_pretty(&data).unwrap())
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
fn cmd_clear(args: &[String]) -> Result<String, String> {
|
|
82
|
+
// args: ["clear", <session-dir>]
|
|
83
|
+
if args.len() < 2 {
|
|
84
|
+
return Err("Usage: compass-cli progress clear <session-dir>".into());
|
|
85
|
+
}
|
|
86
|
+
let session_dir = &args[1];
|
|
87
|
+
let path = progress_path(session_dir);
|
|
88
|
+
|
|
89
|
+
if !path.exists() {
|
|
90
|
+
return Ok(json!({"success": true, "existed": false}).to_string());
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
std::fs::remove_file(&path).map_err(|e| e.to_string())?;
|
|
94
|
+
Ok(json!({"success": true, "existed": true, "cleared": path.to_string_lossy()}).to_string())
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// Returns a simple ISO-8601 timestamp without pulling in chrono crate.
|
|
98
|
+
/// Uses `date` system command for compatibility.
|
|
99
|
+
fn chrono_now() -> String {
|
|
100
|
+
std::process::Command::new("date")
|
|
101
|
+
.arg("+%Y-%m-%dT%H:%M:%SZ")
|
|
102
|
+
.output()
|
|
103
|
+
.ok()
|
|
104
|
+
.and_then(|o| String::from_utf8(o.stdout).ok())
|
|
105
|
+
.map(|s| s.trim().to_string())
|
|
106
|
+
.unwrap_or_else(|| "unknown".to_string())
|
|
107
|
+
}
|