opengstack 0.14.0 → 0.14.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/AGENTS.md +4 -4
- package/CLAUDE.md +127 -110
- package/README.md +10 -5
- package/SKILL.md +500 -70
- package/bin/opengstack.js +69 -69
- package/commands/autoplan.md +7 -9
- package/commands/benchmark.md +84 -91
- package/commands/browse.md +60 -64
- package/commands/canary.md +7 -9
- package/commands/careful.md +2 -2
- package/commands/codex.md +7 -9
- package/commands/connect-chrome.md +7 -9
- package/commands/cso.md +7 -9
- package/commands/design-consultation.md +7 -9
- package/commands/design-review.md +7 -9
- package/commands/design-shotgun.md +7 -9
- package/commands/document-release.md +7 -9
- package/commands/freeze.md +3 -3
- package/commands/guard.md +4 -4
- package/commands/investigate.md +7 -9
- package/commands/land-and-deploy.md +7 -9
- package/commands/office-hours.md +7 -9
- package/commands/{gstack-upgrade.md → opengstack-upgrade.md} +64 -65
- package/commands/plan-ceo-review.md +7 -9
- package/commands/plan-design-review.md +7 -9
- package/commands/plan-eng-review.md +7 -9
- package/commands/qa-only.md +7 -9
- package/commands/qa.md +7 -9
- package/commands/retro.md +7 -9
- package/commands/review.md +7 -9
- package/commands/setup-browser-cookies.md +22 -26
- package/commands/setup-deploy.md +7 -9
- package/commands/ship.md +7 -9
- package/commands/unfreeze.md +7 -7
- package/docs/designs/CHROME_VS_CHROMIUM_EXPLORATION.md +9 -9
- package/docs/designs/CONDUCTOR_CHROME_SIDEBAR_INTEGRATION.md +2 -2
- package/docs/designs/CONDUCTOR_SESSION_API.md +16 -16
- package/docs/designs/DESIGN_SHOTGUN.md +74 -74
- package/docs/designs/DESIGN_TOOLS_V1.md +111 -111
- package/docs/skills.md +483 -202
- package/package.json +42 -43
- package/scripts/analytics.ts +188 -0
- package/scripts/dev-skill.ts +83 -0
- package/scripts/discover-skills.ts +39 -0
- package/scripts/eval-compare.ts +97 -0
- package/scripts/eval-list.ts +117 -0
- package/scripts/eval-select.ts +86 -0
- package/scripts/eval-summary.ts +188 -0
- package/scripts/eval-watch.ts +172 -0
- package/scripts/gen-skill-docs.ts +473 -0
- package/scripts/resolvers/browse.ts +129 -0
- package/scripts/resolvers/codex-helpers.ts +133 -0
- package/scripts/resolvers/composition.ts +48 -0
- package/scripts/resolvers/confidence.ts +37 -0
- package/scripts/resolvers/constants.ts +50 -0
- package/scripts/resolvers/design.ts +950 -0
- package/scripts/resolvers/index.ts +59 -0
- package/scripts/resolvers/learnings.ts +96 -0
- package/scripts/resolvers/preamble.ts +505 -0
- package/scripts/resolvers/review.ts +884 -0
- package/scripts/resolvers/testing.ts +573 -0
- package/scripts/resolvers/types.ts +45 -0
- package/scripts/resolvers/utility.ts +421 -0
- package/scripts/skill-check.ts +190 -0
- package/scripts/cleanup.py +0 -100
- package/scripts/filter-skills.sh +0 -114
- package/scripts/filter_skills.py +0 -164
- package/scripts/install-commands.js +0 -45
- package/scripts/install-skills.js +0 -60
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|
package/commands/freeze.md
CHANGED
|
@@ -7,8 +7,8 @@ Lock file edits to a specific directory. Any Edit or Write operation targeting
|
|
|
7
7
|
a file outside the allowed path will be **blocked** (not just warned).
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
mkdir -p ~/.
|
|
11
|
-
echo '{"skill":"freeze","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}'
|
|
10
|
+
mkdir -p ~/.opengstack/analytics
|
|
11
|
+
echo '{"skill":"freeze","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.opengstack/analytics/skill-usage.jsonl 2>/dev/null || true
|
|
12
12
|
|
|
13
13
|
## Setup
|
|
14
14
|
|
|
@@ -27,7 +27,7 @@ echo "$FREEZE_DIR"
|
|
|
27
27
|
2. Ensure trailing slash and save to the freeze state file:
|
|
28
28
|
```bash
|
|
29
29
|
FREEZE_DIR="${FREEZE_DIR%/}/"
|
|
30
|
-
STATE_DIR="${CLAUDE_PLUGIN_DATA:-$HOME/.
|
|
30
|
+
STATE_DIR="${CLAUDE_PLUGIN_DATA:-$HOME/.OpenGStack}"
|
|
31
31
|
mkdir -p "$STATE_DIR"
|
|
32
32
|
echo "$FREEZE_DIR" > "$STATE_DIR/freeze-dir.txt"
|
|
33
33
|
echo "Freeze boundary set: $FREEZE_DIR"
|
package/commands/guard.md
CHANGED
|
@@ -8,11 +8,11 @@ This is the combination of `/careful` + `/freeze` in a single command.
|
|
|
8
8
|
|
|
9
9
|
**Dependency note:** This skill references hook scripts from the sibling `/careful`
|
|
10
10
|
and `/freeze` skill directories. Both must be installed (they are installed together
|
|
11
|
-
by the
|
|
11
|
+
by the opengstack setup script).
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
mkdir -p ~/.
|
|
15
|
-
echo '{"skill":"guard","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}'
|
|
14
|
+
mkdir -p ~/.opengstack/analytics
|
|
15
|
+
echo '{"skill":"guard","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.opengstack/analytics/skill-usage.jsonl 2>/dev/null || true
|
|
16
16
|
|
|
17
17
|
## Setup
|
|
18
18
|
|
|
@@ -31,7 +31,7 @@ echo "$FREEZE_DIR"
|
|
|
31
31
|
2. Ensure trailing slash and save to the freeze state file:
|
|
32
32
|
```bash
|
|
33
33
|
FREEZE_DIR="${FREEZE_DIR%/}/"
|
|
34
|
-
STATE_DIR="${CLAUDE_PLUGIN_DATA:-$HOME/.
|
|
34
|
+
STATE_DIR="${CLAUDE_PLUGIN_DATA:-$HOME/.OpenGStack}"
|
|
35
35
|
mkdir -p "$STATE_DIR"
|
|
36
36
|
echo "$FREEZE_DIR" > "$STATE_DIR/freeze-dir.txt"
|
|
37
37
|
echo "Freeze boundary set: $FREEZE_DIR"
|
package/commands/investigate.md
CHANGED
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|
package/commands/office-hours.md
CHANGED
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
|
|
2
2
|
<!-- Regenerate: bun run gen:skill-docs -->
|
|
3
3
|
|
|
4
|
-
# /
|
|
4
|
+
# /opengstack-upgrade
|
|
5
5
|
|
|
6
|
-
Upgrade
|
|
6
|
+
Upgrade opengstack to the latest version and show what's new.
|
|
7
7
|
|
|
8
8
|
## Inline upgrade flow
|
|
9
9
|
|
|
@@ -14,14 +14,14 @@ This section is referenced by all skill preambles when they detect `
|
|
|
14
14
|
First, check if auto-upgrade is enabled:
|
|
15
15
|
```bash
|
|
16
16
|
_AUTO=""
|
|
17
|
-
[ "${
|
|
17
|
+
[ "${OpenGStack_AUTO_UPGRADE:-}" = "1" ] && _AUTO="true"
|
|
18
18
|
[ -z "$_AUTO" ] && _AUTO=$(echo get auto_upgrade 2>/dev/null || true)
|
|
19
19
|
echo "AUTO_UPGRADE=$_AUTO"
|
|
20
20
|
|
|
21
|
-
**If `AUTO_UPGRADE=true` or `AUTO_UPGRADE=1`:** Skip AskUserQuestion. Log "Auto-upgrading
|
|
21
|
+
**If `AUTO_UPGRADE=true` or `AUTO_UPGRADE=1`:** Skip AskUserQuestion. Log "Auto-upgrading opengstack v{old} → v{new}..." and proceed directly to Step 2. If `./setup` fails during auto-upgrade, restore from backup (`.bak` directory) and warn the user: "Auto-upgrade failed — restored previous version. Run `/opengstack-upgrade` manually to retry."
|
|
22
22
|
|
|
23
23
|
**Otherwise**, use AskUserQuestion:
|
|
24
|
-
- Question: "
|
|
24
|
+
- Question: "opengstack **v{new}** is available (you're on v{old}). Upgrade now?"
|
|
25
25
|
- Options:
|
|
26
26
|
|
|
27
27
|
**If "Yes, upgrade now":** Proceed to Step 2.
|
|
@@ -34,15 +34,15 @@ Tell user: "Auto-upgrade enabled. Future updates will install automatically." Th
|
|
|
34
34
|
|
|
35
35
|
**If "Not now":** Write snooze state with escalating backoff (first snooze = 24h, second = 48h, third+ = 1 week), then continue with the current skill. Do not mention the upgrade again.
|
|
36
36
|
```bash
|
|
37
|
-
_SNOOZE_FILE=~/.
|
|
37
|
+
_SNOOZE_FILE=~/.opengstack/update-snoozed
|
|
38
38
|
_REMOTE_VER="{new}"
|
|
39
39
|
_CUR_LEVEL=0
|
|
40
40
|
if [ -f "$_SNOOZE_FILE" ]; then
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
_SNOOZED_VER=$(awk '{print $1}' "$_SNOOZE_FILE")
|
|
42
|
+
if [ "$_SNOOZED_VER" = "$_REMOTE_VER" ]; then
|
|
43
|
+
_CUR_LEVEL=$(awk '{print $2}' "$_SNOOZE_FILE")
|
|
44
|
+
case "$_CUR_LEVEL" in *[!0-9]*) _CUR_LEVEL=0 ;; esac
|
|
45
|
+
fi
|
|
46
46
|
fi
|
|
47
47
|
_NEW_LEVEL=$((_CUR_LEVEL + 1))
|
|
48
48
|
[ "$_NEW_LEVEL" -gt 3 ] && _NEW_LEVEL=3
|
|
@@ -50,7 +50,7 @@ echo "$_REMOTE_VER $_NEW_LEVEL $(date +%s)" > "$_SNOOZE_FILE"
|
|
|
50
50
|
|
|
51
51
|
Note: `{new}` is the remote version from the `
|
|
52
52
|
|
|
53
|
-
Tell user the snooze duration: "Next reminder in 24h" (or 48h or 1 week, depending on level). Tip: "Set `auto_upgrade: true` in `~/.
|
|
53
|
+
Tell user the snooze duration: "Next reminder in 24h" (or 48h or 1 week, depending on level). Tip: "Set `auto_upgrade: true` in `~/.opengstack/config.yaml` for automatic upgrades."
|
|
54
54
|
|
|
55
55
|
**If "Never ask again":**
|
|
56
56
|
```bash
|
|
@@ -62,27 +62,27 @@ Continue with the current skill.
|
|
|
62
62
|
### Step 2: Detect install type
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
if [ -d "$HOME/.claude/skills/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
elif [ -d "$HOME/.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
elif [ -d ".claude/skills/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
elif [ -d ".agents/skills/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
elif [ -d ".claude/skills/
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
elif [ -d "$HOME/.claude/skills/
|
|
81
|
-
|
|
82
|
-
|
|
65
|
+
if [ -d "$HOME/.claude/skills/opengstack/.git" ]; then
|
|
66
|
+
INSTALL_TYPE="global-git"
|
|
67
|
+
INSTALL_DIR="$HOME/.claude/skills/opengstack"
|
|
68
|
+
elif [ -d "$HOME/.OpenGStack/repos/opengstack/.git" ]; then
|
|
69
|
+
INSTALL_TYPE="global-git"
|
|
70
|
+
INSTALL_DIR="$HOME/.OpenGStack/repos/opengstack"
|
|
71
|
+
elif [ -d ".claude/skills/opengstack/.git" ]; then
|
|
72
|
+
INSTALL_TYPE="local-git"
|
|
73
|
+
INSTALL_DIR=".claude/skills/opengstack"
|
|
74
|
+
elif [ -d ".agents/skills/opengstack/.git" ]; then
|
|
75
|
+
INSTALL_TYPE="local-git"
|
|
76
|
+
INSTALL_DIR=".agents/skills/opengstack"
|
|
77
|
+
elif [ -d ".claude/skills/opengstack" ]; then
|
|
78
|
+
INSTALL_TYPE="vendored"
|
|
79
|
+
INSTALL_DIR=".claude/skills/opengstack"
|
|
80
|
+
elif [ -d "$HOME/.claude/skills/opengstack" ]; then
|
|
81
|
+
INSTALL_TYPE="vendored-global"
|
|
82
|
+
INSTALL_DIR="$HOME/.claude/skills/opengstack"
|
|
83
83
|
else
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
echo "ERROR: opengstack not found"
|
|
85
|
+
exit 1
|
|
86
86
|
fi
|
|
87
87
|
echo "Install type: $INSTALL_TYPE at $INSTALL_DIR"
|
|
88
88
|
|
|
@@ -113,9 +113,9 @@ If `$STASH_OUTPUT` contains "Saved working directory", warn the user: "Note: loc
|
|
|
113
113
|
```bash
|
|
114
114
|
PARENT=$(dirname "$INSTALL_DIR")
|
|
115
115
|
TMP_DIR=$(mktemp -d)
|
|
116
|
-
git clone --depth 1 https://github.com/Ambisphaeric/
|
|
116
|
+
git clone --depth 1 https://github.com/Ambisphaeric/OpenGStack.git "$TMP_DIR/opengstack"
|
|
117
117
|
mv "$INSTALL_DIR" "$INSTALL_DIR.bak"
|
|
118
|
-
mv "$TMP_DIR/
|
|
118
|
+
mv "$TMP_DIR/opengstack" "$INSTALL_DIR"
|
|
119
119
|
cd "$INSTALL_DIR" && ./setup
|
|
120
120
|
rm -rf "$INSTALL_DIR.bak" "$TMP_DIR"
|
|
121
121
|
|
|
@@ -125,40 +125,40 @@ Use the install directory from Step 2. Check if there's also a local vendored co
|
|
|
125
125
|
|
|
126
126
|
```bash
|
|
127
127
|
_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
128
|
-
|
|
129
|
-
if [ -n "$_ROOT" ] && [ -d "$_ROOT/.claude/skills/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
128
|
+
LOCAL_OpenGStack=""
|
|
129
|
+
if [ -n "$_ROOT" ] && [ -d "$_ROOT/.claude/skills/opengstack" ]; then
|
|
130
|
+
_RESOLVED_LOCAL=$(cd "$_ROOT/.claude/skills/opengstack" && pwd -P)
|
|
131
|
+
_RESOLVED_PRIMARY=$(cd "$INSTALL_DIR" && pwd -P)
|
|
132
|
+
if [ "$_RESOLVED_LOCAL" != "$_RESOLVED_PRIMARY" ]; then
|
|
133
|
+
LOCAL_OpenGStack="$_ROOT/.claude/skills/opengstack"
|
|
134
|
+
fi
|
|
135
135
|
fi
|
|
136
|
-
echo "
|
|
136
|
+
echo "LOCAL_OpenGStack=$LOCAL_OpenGStack"
|
|
137
137
|
|
|
138
|
-
If `
|
|
138
|
+
If `LOCAL_OpenGStack` is non-empty, update it by copying from the freshly-upgraded primary install (same approach as README vendored install):
|
|
139
139
|
```bash
|
|
140
|
-
mv "$
|
|
141
|
-
cp -Rf "$INSTALL_DIR" "$
|
|
142
|
-
rm -rf "$
|
|
143
|
-
cd "$
|
|
144
|
-
rm -rf "$
|
|
140
|
+
mv "$LOCAL_OpenGStack" "$LOCAL_opengstack.bak"
|
|
141
|
+
cp -Rf "$INSTALL_DIR" "$LOCAL_OpenGStack"
|
|
142
|
+
rm -rf "$LOCAL_OpenGStack/.git"
|
|
143
|
+
cd "$LOCAL_OpenGStack" && ./setup
|
|
144
|
+
rm -rf "$LOCAL_opengstack.bak"
|
|
145
145
|
|
|
146
|
-
Tell user: "Also updated vendored copy at `$
|
|
146
|
+
Tell user: "Also updated vendored copy at `$LOCAL_OpenGStack` — commit `.claude/skills/opengstack/` when you're ready."
|
|
147
147
|
|
|
148
148
|
If `./setup` fails, restore from backup and warn the user:
|
|
149
149
|
```bash
|
|
150
|
-
rm -rf "$
|
|
151
|
-
mv "$
|
|
150
|
+
rm -rf "$LOCAL_OpenGStack"
|
|
151
|
+
mv "$LOCAL_opengstack.bak" "$LOCAL_OpenGStack"
|
|
152
152
|
|
|
153
|
-
Tell user: "Sync failed — restored previous version at `$
|
|
153
|
+
Tell user: "Sync failed — restored previous version at `$LOCAL_OpenGStack`. Run `/opengstack-upgrade` manually to retry."
|
|
154
154
|
|
|
155
155
|
### Step 5: Write marker + clear cache
|
|
156
156
|
|
|
157
157
|
```bash
|
|
158
|
-
mkdir -p ~/.
|
|
159
|
-
echo "$OLD_VERSION" > ~/.
|
|
160
|
-
rm -f ~/.
|
|
161
|
-
rm -f ~/.
|
|
158
|
+
mkdir -p ~/.opengstack
|
|
159
|
+
echo "$OLD_VERSION" > ~/.opengstack/just-upgraded-from
|
|
160
|
+
rm -f ~/.opengstack/last-update-check
|
|
161
|
+
rm -f ~/.opengstack/update-snoozed
|
|
162
162
|
|
|
163
163
|
### Step 6: Show What's New
|
|
164
164
|
|
|
@@ -166,7 +166,7 @@ Read `$INSTALL_DIR/CHANGELOG.md`. Find all version entries between the old versi
|
|
|
166
166
|
|
|
167
167
|
Format:
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
opengstack v{new} — upgraded from v{old}!
|
|
170
170
|
|
|
171
171
|
What's new:
|
|
172
172
|
-
|
|
@@ -179,15 +179,14 @@ Happy shipping!
|
|
|
179
179
|
|
|
180
180
|
After showing What's New, continue with whatever skill the user originally invoked. The upgrade is done — no further action needed.
|
|
181
181
|
|
|
182
|
-
|
|
183
182
|
## Standalone usage
|
|
184
183
|
|
|
185
|
-
When invoked directly as `/
|
|
184
|
+
When invoked directly as `/opengstack-upgrade` (not from a preamble):
|
|
186
185
|
|
|
187
186
|
1. Force a fresh update check (bypass cache):
|
|
188
187
|
```bash
|
|
189
188
|
~/.claude/skills/opengstack/bin/echo --force 2>/dev/null || \
|
|
190
|
-
.claude/skills/
|
|
189
|
+
.claude/skills/opengstack/bin/echo --force 2>/dev/null || true
|
|
191
190
|
|
|
192
191
|
Use the output to determine if an upgrade is available.
|
|
193
192
|
|
|
@@ -195,16 +194,16 @@ Use the output to determine if an upgrade is available.
|
|
|
195
194
|
|
|
196
195
|
3. If no output (primary is up to date): check for a stale local vendored copy.
|
|
197
196
|
|
|
198
|
-
Run the Step 2 bash block above to detect the primary install type and directory (`INSTALL_TYPE` and `INSTALL_DIR`). Then run the Step 4.5 detection bash block above to check for a local vendored copy (`
|
|
197
|
+
Run the Step 2 bash block above to detect the primary install type and directory (`INSTALL_TYPE` and `INSTALL_DIR`). Then run the Step 4.5 detection bash block above to check for a local vendored copy (`LOCAL_OpenGStack`).
|
|
199
198
|
|
|
200
|
-
**If `
|
|
199
|
+
**If `LOCAL_OpenGStack` is empty** (no local vendored copy): tell the user "You're already on the latest version (v{version})."
|
|
201
200
|
|
|
202
|
-
**If `
|
|
201
|
+
**If `LOCAL_OpenGStack` is non-empty**, compare versions:
|
|
203
202
|
```bash
|
|
204
203
|
PRIMARY_VER=$(cat "$INSTALL_DIR/VERSION" 2>/dev/null || echo "unknown")
|
|
205
|
-
LOCAL_VER=$(cat "$
|
|
204
|
+
LOCAL_VER=$(cat "$LOCAL_OpenGStack/VERSION" 2>/dev/null || echo "unknown")
|
|
206
205
|
echo "PRIMARY=$PRIMARY_VER LOCAL=$LOCAL_VER"
|
|
207
206
|
|
|
208
|
-
**If versions differ:** follow the Step 4.5 sync bash block above to update the local copy from the primary. Tell user: "Global v{PRIMARY_VER} is up to date. Updated local vendored copy from v{LOCAL_VER} → v{PRIMARY_VER}. Commit `.claude/skills/
|
|
207
|
+
**If versions differ:** follow the Step 4.5 sync bash block above to update the local copy from the primary. Tell user: "Global v{PRIMARY_VER} is up to date. Updated local vendored copy from v{LOCAL_VER} → v{PRIMARY_VER}. Commit `.claude/skills/opengstack/` when you're ready."
|
|
209
208
|
|
|
210
209
|
**If versions match:** tell the user "You're on the latest version (v{PRIMARY_VER}). Global and local vendored copy are both up to date."
|
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|
|
@@ -3,30 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
## Preamble (run first)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
If `PROACTIVE` is `"false"`, do not proactively suggest gstack skills AND do not
|
|
6
|
+
If `PROACTIVE` is `"false"`, do not proactively suggest opengstack skills AND do not
|
|
8
7
|
auto-invoke skills based on conversation context. Only run skills the user explicitly
|
|
9
8
|
types (e.g., /qa, /ship). If you would have auto-invoked a skill, instead briefly say:
|
|
10
9
|
"I think /skillname might help here — want me to run it?" and wait for confirmation.
|
|
11
10
|
The user opted out of proactive behavior.
|
|
12
11
|
|
|
13
12
|
If `SKILL_PREFIX` is `"true"`, the user has namespaced skill names. When suggesting
|
|
14
|
-
or invoking other
|
|
15
|
-
of `/qa`, `/
|
|
13
|
+
or invoking other opengstack skills, use the `/opengstack-` prefix (e.g., `/opengstack-qa` instead
|
|
14
|
+
of `/qa`, `/opengstack-ship` instead of `/ship`). Disk paths are unaffected — always use
|
|
16
15
|
`~/.claude/skills/opengstack/[skill-name]/SKILL.md` for reading skill files.
|
|
17
16
|
|
|
18
17
|
If `LAKE_INTRO` is `no`: Before continuing, introduce the Completeness Principle.
|
|
19
18
|
Then offer to open the essay in their default browser:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
touch ~/.
|
|
21
|
+
touch ~/.opengstack/.completeness-intro-seen
|
|
23
22
|
|
|
24
23
|
Only run `open` if the user says yes. Always run `touch` to mark as seen. This only happens once.
|
|
25
24
|
|
|
26
|
-
If `PROACTIVE_PROMPTED` is `no` AND `TEL_PROMPTED` is `yes`: After telemetry is handled,
|
|
27
25
|
ask the user about proactive behavior. Use AskUserQuestion:
|
|
28
26
|
|
|
29
|
-
>
|
|
27
|
+
> opengstack can proactively figure out when you might need a skill while you work —
|
|
30
28
|
> like suggesting /qa when you say "does this work?" or /investigate when you hit
|
|
31
29
|
> a bug. We recommend keeping this on — it speeds up every part of your workflow.
|
|
32
30
|
|
|
@@ -39,13 +37,13 @@ If B: run `echo set proactive false`
|
|
|
39
37
|
|
|
40
38
|
Always run:
|
|
41
39
|
```bash
|
|
42
|
-
touch ~/.
|
|
40
|
+
touch ~/.opengstack/.proactive-prompted
|
|
43
41
|
|
|
44
42
|
This only happens once. If `PROACTIVE_PROMPTED` is `yes`, skip this entirely.
|
|
45
43
|
|
|
46
44
|
## Voice
|
|
47
45
|
|
|
48
|
-
You are
|
|
46
|
+
You are opengstack, an open source AI builder framework
|
|
49
47
|
|
|
50
48
|
Lead with the point. Say what it does, why it matters, and what changes for the builder. Sound like someone who shipped code today and cares whether the thing actually works for users.
|
|
51
49
|
|