learnship 1.9.6 → 1.9.8
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
3
|
"description": "Agentic engineering done right — 42 structured workflows, persistent memory across sessions, integrated learning partner, and impeccable UI design system. Works with Claude Code, Windsurf, Cursor, Gemini CLI, OpenCode, and Codex.",
|
|
4
|
-
"version": "1.9.
|
|
4
|
+
"version": "1.9.8",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Favio Vazquez",
|
|
7
7
|
"email": "favio.vazquezp@gmail.com"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "learnship",
|
|
3
3
|
"displayName": "learnship",
|
|
4
4
|
"description": "Agentic engineering done right — 42 structured workflows, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
|
|
5
|
-
"version": "1.9.
|
|
5
|
+
"version": "1.9.8",
|
|
6
6
|
"logo": "assets/logo.png",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Favio Vazquez",
|
package/bin/install.js
CHANGED
|
@@ -497,6 +497,7 @@ function copyDir(srcDir, destDir, pathPrefix, platform) {
|
|
|
497
497
|
} else if (entry.name.endsWith('.md')) {
|
|
498
498
|
let c = fs.readFileSync(src, 'utf8');
|
|
499
499
|
c = replacePaths(c, pathPrefix, platform);
|
|
500
|
+
if (entry.name === 'new-project.md') c = rewriteNewProject(c, platform);
|
|
500
501
|
if (platform === 'opencode') c = convertToOpencode(c);
|
|
501
502
|
// gemini agents converted separately; body ${VAR} escaping done there
|
|
502
503
|
fs.writeFileSync(dest, c);
|
|
@@ -525,6 +526,31 @@ function replacePaths(content, pathPrefix, platform) {
|
|
|
525
526
|
return c;
|
|
526
527
|
}
|
|
527
528
|
|
|
529
|
+
/** Rewrite new-project.md markers with exact platform-specific content at install time */
|
|
530
|
+
function rewriteNewProject(content, platform) {
|
|
531
|
+
const dirName = getDirName(platform);
|
|
532
|
+
const label = getPlatformLabel(platform);
|
|
533
|
+
|
|
534
|
+
// Platform label block
|
|
535
|
+
const platformLabel = `You are running on **${label}**. Platform config directory: \`${dirName}/\``;
|
|
536
|
+
content = content.replace('<!-- LEARNSHIP_PLATFORM_LABEL -->', platformLabel);
|
|
537
|
+
|
|
538
|
+
// Gitignore command — exact single line, no conditionals
|
|
539
|
+
const gitignoreCmd = `grep -q '${dirName}/' .gitignore 2>/dev/null || echo '${dirName}/' >> .gitignore`;
|
|
540
|
+
content = content.replace('<!-- LEARNSHIP_GITIGNORE_CMD -->', gitignoreCmd);
|
|
541
|
+
|
|
542
|
+
// Parallel execution block — present question on all platforms except Windsurf
|
|
543
|
+
let parallelBlock;
|
|
544
|
+
if (platform === 'windsurf') {
|
|
545
|
+
parallelBlock = `**Group D — Parallel execution:**\n\nWindsurf does not support real subagents. Parallelization is automatically set to \`false\`.`;
|
|
546
|
+
} else {
|
|
547
|
+
parallelBlock = `**Group D — Parallel execution:**\n\n${label} supports real subagents. Ask:\n\n"Do you want to enable parallel subagent execution?"\n- **No** (recommended default) — Plans execute sequentially, one at a time. Safer, easier to follow.\n- **Yes** — Each independent plan in a wave gets its own dedicated subagent with a fresh context budget. Faster, but uses more tokens.`;
|
|
548
|
+
}
|
|
549
|
+
content = content.replace('<!-- LEARNSHIP_PARALLEL_BLOCK -->', parallelBlock);
|
|
550
|
+
|
|
551
|
+
return content;
|
|
552
|
+
}
|
|
553
|
+
|
|
528
554
|
/** Install Claude Code / Windsurf commands (commands/learnship/ → target/commands/learnship/) */
|
|
529
555
|
function installClaudeCommands(srcDir, targetDir, pathPrefix) {
|
|
530
556
|
const destDir = path.join(targetDir, 'commands', 'learnship');
|
|
@@ -1235,6 +1261,7 @@ if (process.env.LEARNSHIP_TEST_MODE) {
|
|
|
1235
1261
|
installCodexAgents,
|
|
1236
1262
|
parseJsonc,
|
|
1237
1263
|
replacePaths,
|
|
1264
|
+
rewriteNewProject,
|
|
1238
1265
|
toHomePrefix,
|
|
1239
1266
|
LEARNSHIP_CODEX_MARKER,
|
|
1240
1267
|
CODEX_AGENT_SANDBOX,
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.8",
|
|
4
4
|
"description": "Agentic engineering done right — 42 structured workflows, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
|
|
5
5
|
"author": "Favio Vazquez",
|
|
6
6
|
"homepage": "https://faviovazquez.github.io/learnship/",
|
|
@@ -8,38 +8,7 @@ Initialize a new project with full context gathering, optional research, require
|
|
|
8
8
|
|
|
9
9
|
## Step 1: Setup
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Detect platform via environment variables set by each AI tool
|
|
15
|
-
if [ -n "$CLAUDE_CONFIG_DIR" ] || [ -n "$ANTHROPIC_API_KEY" ] || command -v claude >/dev/null 2>&1; then
|
|
16
|
-
echo "CLAUDE"
|
|
17
|
-
elif [ -n "$OPENCODE_CONFIG_DIR" ] || command -v opencode >/dev/null 2>&1; then
|
|
18
|
-
echo "OPENCODE"
|
|
19
|
-
elif [ -n "$GEMINI_API_KEY" ] || command -v gemini >/dev/null 2>&1; then
|
|
20
|
-
echo "GEMINI"
|
|
21
|
-
elif [ -n "$OPENAI_API_KEY" ] && command -v codex >/dev/null 2>&1; then
|
|
22
|
-
echo "CODEX"
|
|
23
|
-
elif [ -d "$HOME/.codeium" ] || [ -n "$WINDSURF_CONFIG_DIR" ]; then
|
|
24
|
-
echo "WINDSURF"
|
|
25
|
-
else
|
|
26
|
-
echo "UNKNOWN"
|
|
27
|
-
fi
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**If result is `UNKNOWN`:** Ask the user directly: "Which platform are you running? (Windsurf / Claude Code / OpenCode / Gemini CLI / Codex CLI)"
|
|
31
|
-
|
|
32
|
-
Set `PLATFORM` to the detected value.
|
|
33
|
-
|
|
34
|
-
Platform determines:
|
|
35
|
-
- Which directory to add to `.gitignore` (so AI config files aren't tracked)
|
|
36
|
-
- Whether to ask the parallelization question (Group D below)
|
|
37
|
-
- The gitignore directory by platform:
|
|
38
|
-
- **Windsurf** → `.windsurf/`
|
|
39
|
-
- **Claude Code** → `.claude/`
|
|
40
|
-
- **OpenCode** → `.opencode/`
|
|
41
|
-
- **Gemini CLI** → `.gemini/`
|
|
42
|
-
- **Codex CLI** → `.codex/`
|
|
11
|
+
<!-- LEARNSHIP_PLATFORM_LABEL -->
|
|
43
12
|
|
|
44
13
|
Check if `.planning/PROJECT.md` already exists:
|
|
45
14
|
|
|
@@ -60,22 +29,11 @@ test -d .git && echo "HAS_GIT" || echo "NO_GIT"
|
|
|
60
29
|
git init
|
|
61
30
|
```
|
|
62
31
|
|
|
63
|
-
Add the platform config directory to `.gitignore` so AI platform files are not tracked in the project repo
|
|
32
|
+
Add the platform config directory to `.gitignore` so AI platform files are not tracked in the project repo:
|
|
64
33
|
```bash
|
|
65
|
-
|
|
66
|
-
grep -q '.claude/' .gitignore 2>/dev/null || echo '.claude/' >> .gitignore
|
|
67
|
-
# For Windsurf:
|
|
68
|
-
# grep -q '.windsurf/' .gitignore 2>/dev/null || echo '.windsurf/' >> .gitignore
|
|
69
|
-
# For OpenCode:
|
|
70
|
-
# grep -q '.opencode/' .gitignore 2>/dev/null || echo '.opencode/' >> .gitignore
|
|
71
|
-
# For Gemini CLI:
|
|
72
|
-
# grep -q '.gemini/' .gitignore 2>/dev/null || echo '.gemini/' >> .gitignore
|
|
73
|
-
# For Codex CLI:
|
|
74
|
-
# grep -q '.codex/' .gitignore 2>/dev/null || echo '.codex/' >> .gitignore
|
|
34
|
+
<!-- LEARNSHIP_GITIGNORE_CMD -->
|
|
75
35
|
```
|
|
76
36
|
|
|
77
|
-
Run only the line matching the detected platform.
|
|
78
|
-
|
|
79
37
|
Create the planning directory:
|
|
80
38
|
```bash
|
|
81
39
|
mkdir -p .planning/research
|
|
@@ -109,15 +67,7 @@ Ask: "Which workflow agents should be enabled?"
|
|
|
109
67
|
- **Plan Check** (recommended) — Verify plans achieve their goals before execution
|
|
110
68
|
- **Verifier** (recommended) — Confirm deliverables match phase goals after execution
|
|
111
69
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
**If PLATFORM is `WINDSURF`:** Skip this question entirely. Set `parallelization: false` automatically. Windsurf does not support real subagents.
|
|
115
|
-
|
|
116
|
-
**If PLATFORM is `CLAUDE`, `OPENCODE`, `GEMINI`, or `CODEX`:** Ask this question — these platforms support real subagents:
|
|
117
|
-
|
|
118
|
-
Ask: "Do you want to enable parallel subagent execution?"
|
|
119
|
-
- **No** (recommended default) — Plans execute sequentially, one at a time. Safer, easier to follow.
|
|
120
|
-
- **Yes** — Each independent plan in a wave gets its own dedicated subagent with a fresh context budget. Faster, but uses more tokens.
|
|
70
|
+
<!-- LEARNSHIP_PARALLEL_BLOCK -->
|
|
121
71
|
|
|
122
72
|
Ask: "Commit planning docs to git?"
|
|
123
73
|
- **Yes** (recommended) — Planning docs tracked in version control
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.8",
|
|
4
4
|
"description": "Learn as you build. Build with intent. — A multi-platform agentic engineering system for Windsurf, Claude Code, Cursor, OpenCode, Gemini CLI, and Codex: spec-driven workflows, integrated learning, and production-grade design.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentic",
|