golem-cc 1.0.2 → 2.0.0
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 +19 -7
- package/bin/golem +186 -49
- package/package.json +11 -3
- package/.github/workflows/publish.yml +0 -42
- package/.golem/IMPLEMENTATION_PLAN.md +0 -59
- package/bin/install.sh +0 -69
- package/docs/FRESHSERVICE_SETUP.md +0 -338
- package/docs/HANDOFF.md +0 -241
- package/src/api/freshworks.ts +0 -167
- package/src/api/gitea.ts +0 -215
- package/src/cli/index.ts +0 -370
- package/src/sync/ticket-sync.ts +0 -303
- package/src/types.ts +0 -152
- package/src/worktree/manager.ts +0 -236
- package/tsconfig.json +0 -18
package/README.md
CHANGED
|
@@ -5,21 +5,33 @@ Personal agentic workflow manager. Integrates Freshservice tickets, Gitea issues
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
#
|
|
9
|
-
npm install -g golem-cc
|
|
10
|
-
|
|
11
|
-
# Or run directly with pnpm
|
|
8
|
+
# Bootstrap (one command)
|
|
12
9
|
pnpm dlx golem-cc
|
|
13
10
|
```
|
|
14
11
|
|
|
15
|
-
|
|
12
|
+
This copies everything to `~/.golem/`, links binaries to `~/.local/bin/`, and wires up Claude slash-commands.
|
|
13
|
+
|
|
14
|
+
After installing, restart your shell and configure:
|
|
16
15
|
|
|
17
16
|
```bash
|
|
18
|
-
#
|
|
17
|
+
# Verify setup
|
|
19
18
|
golem doctor
|
|
20
19
|
|
|
21
|
-
#
|
|
20
|
+
# Edit credentials
|
|
22
21
|
vim ~/.golem/.env
|
|
22
|
+
|
|
23
|
+
# Initialize a project
|
|
24
|
+
cd your-project && golem init
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Updating
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# From a running install
|
|
31
|
+
golem install
|
|
32
|
+
|
|
33
|
+
# Or from a local checkout (dev workflow)
|
|
34
|
+
golem install --from /path/to/golem-cc
|
|
23
35
|
```
|
|
24
36
|
|
|
25
37
|
## Architecture
|
package/bin/golem
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
|
|
11
|
-
VERSION="0.
|
|
11
|
+
VERSION="2.0.0"
|
|
12
12
|
GOLEM_HOME="${GOLEM_HOME:-$HOME/.golem}"
|
|
13
13
|
GOLEM_API="golem-api"
|
|
14
14
|
|
|
@@ -124,6 +124,7 @@ SYNC COMMANDS:
|
|
|
124
124
|
|
|
125
125
|
OTHER:
|
|
126
126
|
install Install/update golem globally
|
|
127
|
+
uninstall Remove golem completely
|
|
127
128
|
config Show current configuration
|
|
128
129
|
doctor Diagnose setup issues
|
|
129
130
|
init Initialize golem in current project
|
|
@@ -148,7 +149,15 @@ cmd_version() {
|
|
|
148
149
|
|
|
149
150
|
cmd_init() {
|
|
150
151
|
print_banner
|
|
151
|
-
|
|
152
|
+
|
|
153
|
+
# Validate global installation
|
|
154
|
+
if [[ ! -d "$GOLEM_HOME/lib" ]]; then
|
|
155
|
+
warn "Golem is not installed globally."
|
|
156
|
+
echo " Run: pnpm dlx golem-cc"
|
|
157
|
+
echo ""
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
info "Initializing golem in current project..."
|
|
152
161
|
|
|
153
162
|
mkdir -p .golem/{specs,tickets,worktrees}
|
|
154
163
|
|
|
@@ -184,6 +193,8 @@ EOF
|
|
|
184
193
|
if [[ -d "$GOLEM_HOME/commands/golem" ]]; then
|
|
185
194
|
ln -sf "$GOLEM_HOME/commands/golem" .claude/commands/golem 2>/dev/null || true
|
|
186
195
|
success "Linked Claude commands"
|
|
196
|
+
else
|
|
197
|
+
warn "Claude commands not found (install golem globally first)"
|
|
187
198
|
fi
|
|
188
199
|
|
|
189
200
|
# Add .golem to .gitignore
|
|
@@ -507,68 +518,175 @@ Branch: $branch" \
|
|
|
507
518
|
success "PR created"
|
|
508
519
|
}
|
|
509
520
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
local
|
|
521
|
+
# Resolve the package root from this script's location.
|
|
522
|
+
# When run via pnpm dlx, $0 lives inside a temp store.
|
|
523
|
+
# When run from ~/.golem/lib, $0 is there.
|
|
524
|
+
_resolve_pkg_root() {
|
|
525
|
+
local script_path
|
|
526
|
+
script_path="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
527
|
+
# bin/ is one level under package root
|
|
528
|
+
echo "$(cd "$script_path/.." && pwd)"
|
|
529
|
+
}
|
|
515
530
|
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
else
|
|
521
|
-
info "Cloning golem..."
|
|
522
|
-
mkdir -p "$GOLEM_HOME"
|
|
523
|
-
git clone https://github.com/daresTheDevil/golem.git "$src_dir" || die "Failed to clone"
|
|
524
|
-
fi
|
|
531
|
+
# Bootstrap: copy package contents into ~/.golem/lib and wire everything up.
|
|
532
|
+
cmd_bootstrap() {
|
|
533
|
+
local pkg_root
|
|
534
|
+
pkg_root="$(_resolve_pkg_root)"
|
|
525
535
|
|
|
526
|
-
|
|
527
|
-
info "
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
536
|
+
print_banner
|
|
537
|
+
info "Installing golem to $GOLEM_HOME..."
|
|
538
|
+
|
|
539
|
+
# ---- runtime ----
|
|
540
|
+
mkdir -p "$GOLEM_HOME/lib"
|
|
541
|
+
# Copy the package runtime (bin, dist, node_modules, package.json)
|
|
542
|
+
for item in bin dist node_modules package.json; do
|
|
543
|
+
if [[ -e "$pkg_root/$item" ]]; then
|
|
544
|
+
rm -rf "$GOLEM_HOME/lib/$item"
|
|
545
|
+
cp -R "$pkg_root/$item" "$GOLEM_HOME/lib/$item"
|
|
546
|
+
fi
|
|
547
|
+
done
|
|
548
|
+
success "Installed runtime to $GOLEM_HOME/lib"
|
|
531
549
|
|
|
532
|
-
#
|
|
533
|
-
info "Installing assets..."
|
|
550
|
+
# ---- assets ----
|
|
534
551
|
mkdir -p "$GOLEM_HOME"/{commands,agents,prompts}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
552
|
+
if [[ -d "$pkg_root/commands/golem" ]]; then
|
|
553
|
+
rm -rf "$GOLEM_HOME/commands/golem"
|
|
554
|
+
cp -R "$pkg_root/commands/golem" "$GOLEM_HOME/commands/golem"
|
|
555
|
+
fi
|
|
556
|
+
if compgen -G "$pkg_root/golem/agents/"*.md &>/dev/null; then
|
|
557
|
+
cp "$pkg_root/golem/agents/"*.md "$GOLEM_HOME/agents/"
|
|
558
|
+
fi
|
|
559
|
+
if compgen -G "$pkg_root/golem/prompts/"*.md &>/dev/null; then
|
|
560
|
+
cp "$pkg_root/golem/prompts/"*.md "$GOLEM_HOME/prompts/"
|
|
561
|
+
fi
|
|
562
|
+
success "Installed assets (commands, agents, prompts)"
|
|
538
563
|
|
|
539
|
-
#
|
|
564
|
+
# ---- symlinks in ~/.local/bin ----
|
|
540
565
|
mkdir -p "$HOME/.local/bin"
|
|
541
|
-
ln -sf "$
|
|
542
|
-
ln -sf "$
|
|
543
|
-
chmod +x "$
|
|
566
|
+
ln -sf "$GOLEM_HOME/lib/bin/golem" "$HOME/.local/bin/golem"
|
|
567
|
+
ln -sf "$GOLEM_HOME/lib/dist/cli/index.js" "$HOME/.local/bin/golem-api"
|
|
568
|
+
chmod +x "$GOLEM_HOME/lib/bin/golem"
|
|
569
|
+
chmod +x "$GOLEM_HOME/lib/dist/cli/index.js" 2>/dev/null || true
|
|
570
|
+
success "Linked binaries to ~/.local/bin"
|
|
544
571
|
|
|
545
|
-
#
|
|
572
|
+
# ---- Claude slash-commands ----
|
|
546
573
|
mkdir -p "$HOME/.claude/commands"
|
|
547
574
|
ln -sf "$GOLEM_HOME/commands/golem" "$HOME/.claude/commands/golem" 2>/dev/null || true
|
|
575
|
+
success "Linked Claude commands"
|
|
548
576
|
|
|
549
|
-
#
|
|
577
|
+
# ---- .env template ----
|
|
578
|
+
if [[ -f "$pkg_root/.env.example" ]]; then
|
|
579
|
+
cp "$pkg_root/.env.example" "$GOLEM_HOME/.env.example"
|
|
580
|
+
fi
|
|
550
581
|
if [[ ! -f "$GOLEM_HOME/.env" ]]; then
|
|
551
|
-
|
|
552
|
-
|
|
582
|
+
if [[ -f "$GOLEM_HOME/.env.example" ]]; then
|
|
583
|
+
cp "$GOLEM_HOME/.env.example" "$GOLEM_HOME/.env"
|
|
584
|
+
else
|
|
585
|
+
cat > "$GOLEM_HOME/.env" << 'ENVEOF'
|
|
586
|
+
# Freshworks/Freshservice
|
|
553
587
|
FRESH_DOMAIN=yourcompany.freshservice.com
|
|
554
|
-
FRESH_API_KEY=
|
|
588
|
+
FRESH_API_KEY=your_api_key_here
|
|
589
|
+
|
|
590
|
+
# Gitea (on-prem)
|
|
591
|
+
GITEA_URL=https://dev.pearlriverresort.com
|
|
592
|
+
GITEA_TOKEN=your_token_here
|
|
593
|
+
GITEA_ORG=CRDE
|
|
555
594
|
|
|
556
|
-
#
|
|
557
|
-
|
|
558
|
-
GITEA_TOKEN=your_token
|
|
559
|
-
GITEA_ORG=your-org
|
|
560
|
-
GITEA_REPO=default-repo
|
|
595
|
+
# Default repo for issues (can be overridden per-project)
|
|
596
|
+
GITEA_REPO=
|
|
561
597
|
ENVEOF
|
|
562
|
-
|
|
598
|
+
fi
|
|
599
|
+
warn "Created $GOLEM_HOME/.env — edit with your credentials"
|
|
600
|
+
fi
|
|
601
|
+
|
|
602
|
+
# ---- PATH setup (idempotent) ----
|
|
603
|
+
local shell_rc="$HOME/.zshrc"
|
|
604
|
+
[[ -f "$HOME/.bashrc" && ! -f "$HOME/.zshrc" ]] && shell_rc="$HOME/.bashrc"
|
|
605
|
+
|
|
606
|
+
if [[ -f "$shell_rc" ]]; then
|
|
607
|
+
if ! grep -q '$HOME/.local/bin' "$shell_rc" 2>/dev/null; then
|
|
608
|
+
echo '' >> "$shell_rc"
|
|
609
|
+
echo '# golem: add ~/.local/bin to PATH' >> "$shell_rc"
|
|
610
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$shell_rc"
|
|
611
|
+
success "Added ~/.local/bin to PATH in $(basename "$shell_rc")"
|
|
612
|
+
fi
|
|
563
613
|
fi
|
|
564
614
|
|
|
565
615
|
echo ""
|
|
566
616
|
success "Installation complete!"
|
|
567
617
|
echo ""
|
|
568
|
-
echo "
|
|
569
|
-
echo
|
|
618
|
+
echo "Restart your shell (or run: source $shell_rc), then:"
|
|
619
|
+
echo " golem doctor # verify setup"
|
|
620
|
+
echo " golem config # show configuration"
|
|
621
|
+
echo " cd <project> && golem init # set up a project"
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
cmd_uninstall() {
|
|
625
|
+
print_banner
|
|
626
|
+
echo -e "${BOLD}This will remove:${NC}"
|
|
627
|
+
echo " $GOLEM_HOME (runtime, assets, config)"
|
|
628
|
+
echo " ~/.local/bin/golem (symlink)"
|
|
629
|
+
echo " ~/.local/bin/golem-api (symlink)"
|
|
630
|
+
echo " ~/.claude/commands/golem (symlink)"
|
|
570
631
|
echo ""
|
|
571
|
-
|
|
632
|
+
|
|
633
|
+
# Check for .env with real credentials and warn
|
|
634
|
+
if [[ -f "$GOLEM_HOME/.env" ]]; then
|
|
635
|
+
warn "Your credentials in $GOLEM_HOME/.env will be deleted."
|
|
636
|
+
echo " Back up now if needed: cp $GOLEM_HOME/.env ~/golem-env-backup"
|
|
637
|
+
echo ""
|
|
638
|
+
fi
|
|
639
|
+
|
|
640
|
+
read -p "Are you sure? [y/N] " confirm
|
|
641
|
+
[[ "$confirm" != "y" && "$confirm" != "Y" ]] && { echo "Aborted."; exit 0; }
|
|
642
|
+
|
|
643
|
+
# Remove symlinks in ~/.local/bin
|
|
644
|
+
for bin in golem golem-api; do
|
|
645
|
+
local target="$HOME/.local/bin/$bin"
|
|
646
|
+
if [[ -L "$target" || -f "$target" ]]; then
|
|
647
|
+
rm -f "$target"
|
|
648
|
+
success "Removed $target"
|
|
649
|
+
fi
|
|
650
|
+
done
|
|
651
|
+
|
|
652
|
+
# Remove Claude commands symlink
|
|
653
|
+
if [[ -L "$HOME/.claude/commands/golem" || -d "$HOME/.claude/commands/golem" ]]; then
|
|
654
|
+
rm -rf "$HOME/.claude/commands/golem"
|
|
655
|
+
success "Removed ~/.claude/commands/golem"
|
|
656
|
+
fi
|
|
657
|
+
|
|
658
|
+
# Remove ~/.golem entirely
|
|
659
|
+
if [[ -d "$GOLEM_HOME" ]]; then
|
|
660
|
+
rm -rf "$GOLEM_HOME"
|
|
661
|
+
success "Removed $GOLEM_HOME"
|
|
662
|
+
fi
|
|
663
|
+
|
|
664
|
+
echo ""
|
|
665
|
+
success "Golem uninstalled."
|
|
666
|
+
echo ""
|
|
667
|
+
dim "The PATH entry in your shell rc was left in place (it's harmless)."
|
|
668
|
+
dim "To reinstall later: pnpm dlx golem-cc"
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
cmd_install() {
|
|
672
|
+
# If --from <path> given, bootstrap from a local checkout (dev workflow)
|
|
673
|
+
if [[ "${1:-}" == "--from" ]]; then
|
|
674
|
+
local local_path="${2:-}"
|
|
675
|
+
[[ -z "$local_path" ]] && die "Usage: golem install --from <path>"
|
|
676
|
+
[[ ! -d "$local_path/bin" ]] && die "Not a golem package directory: $local_path"
|
|
677
|
+
|
|
678
|
+
# Temporarily override _resolve_pkg_root
|
|
679
|
+
_resolve_pkg_root() { echo "$local_path"; }
|
|
680
|
+
cmd_bootstrap
|
|
681
|
+
return
|
|
682
|
+
fi
|
|
683
|
+
|
|
684
|
+
print_banner
|
|
685
|
+
info "Updating golem via pnpm dlx..."
|
|
686
|
+
echo ""
|
|
687
|
+
|
|
688
|
+
# Re-run pnpm dlx golem-cc which will hit the bootstrap path
|
|
689
|
+
pnpm dlx golem-cc || die "Update failed"
|
|
572
690
|
}
|
|
573
691
|
|
|
574
692
|
cmd_config() {
|
|
@@ -715,7 +833,7 @@ cmd_doctor() {
|
|
|
715
833
|
if command -v golem-api &>/dev/null; then
|
|
716
834
|
check_pass "golem-api accessible"
|
|
717
835
|
else
|
|
718
|
-
check_fail "golem-api not found" "Run:
|
|
836
|
+
check_fail "golem-api not found" "Run: pnpm dlx golem-cc"
|
|
719
837
|
fi
|
|
720
838
|
|
|
721
839
|
echo ""
|
|
@@ -723,24 +841,30 @@ cmd_doctor() {
|
|
|
723
841
|
# Installation checks
|
|
724
842
|
echo -e "${BOLD}Installation${NC}"
|
|
725
843
|
|
|
844
|
+
if [[ -d "$GOLEM_HOME/lib" ]]; then
|
|
845
|
+
check_pass "Runtime installed ($GOLEM_HOME/lib)"
|
|
846
|
+
else
|
|
847
|
+
check_fail "Runtime not installed" "Run: pnpm dlx golem-cc"
|
|
848
|
+
fi
|
|
849
|
+
|
|
726
850
|
local prompt_count=$(ls "$GOLEM_HOME/prompts/"*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
727
851
|
if [[ "$prompt_count" -gt 0 ]]; then
|
|
728
852
|
check_pass "Prompts installed ($prompt_count files)"
|
|
729
853
|
else
|
|
730
|
-
check_fail "No prompts installed" "Run:
|
|
854
|
+
check_fail "No prompts installed" "Run: pnpm dlx golem-cc"
|
|
731
855
|
fi
|
|
732
856
|
|
|
733
857
|
local agent_count=$(ls "$GOLEM_HOME/agents/"*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
734
858
|
if [[ "$agent_count" -gt 0 ]]; then
|
|
735
859
|
check_pass "Agents installed ($agent_count files)"
|
|
736
860
|
else
|
|
737
|
-
check_fail "No agents installed" "Run:
|
|
861
|
+
check_fail "No agents installed" "Run: pnpm dlx golem-cc"
|
|
738
862
|
fi
|
|
739
863
|
|
|
740
864
|
if [[ -d "$GOLEM_HOME/commands/golem" ]]; then
|
|
741
865
|
check_pass "Commands installed"
|
|
742
866
|
else
|
|
743
|
-
check_fail "Commands not installed" "Run:
|
|
867
|
+
check_fail "Commands not installed" "Run: pnpm dlx golem-cc"
|
|
744
868
|
fi
|
|
745
869
|
|
|
746
870
|
if [[ -L "$HOME/.claude/commands/golem" ]] && [[ -d "$HOME/.claude/commands/golem" ]]; then
|
|
@@ -786,9 +910,19 @@ cmd_doctor() {
|
|
|
786
910
|
# ============================================================================
|
|
787
911
|
|
|
788
912
|
main() {
|
|
789
|
-
local cmd="${1:-
|
|
913
|
+
local cmd="${1:-}"
|
|
790
914
|
shift || true
|
|
791
915
|
|
|
916
|
+
# No args: bootstrap if not installed, otherwise show help
|
|
917
|
+
if [[ -z "$cmd" ]]; then
|
|
918
|
+
if [[ -d "$GOLEM_HOME/lib" ]]; then
|
|
919
|
+
cmd_help
|
|
920
|
+
else
|
|
921
|
+
cmd_bootstrap
|
|
922
|
+
fi
|
|
923
|
+
return
|
|
924
|
+
fi
|
|
925
|
+
|
|
792
926
|
case "$cmd" in
|
|
793
927
|
help|--help|-h)
|
|
794
928
|
cmd_help
|
|
@@ -844,6 +978,9 @@ main() {
|
|
|
844
978
|
install)
|
|
845
979
|
cmd_install "$@"
|
|
846
980
|
;;
|
|
981
|
+
uninstall)
|
|
982
|
+
cmd_uninstall "$@"
|
|
983
|
+
;;
|
|
847
984
|
*)
|
|
848
985
|
die "Unknown command: $cmd. Run 'golem help' for usage."
|
|
849
986
|
;;
|
package/package.json
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "golem-cc",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Personal agentic workflow: Freshworks ↔ Gitea ↔ Local development",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/daresTheDevil/golem"
|
|
8
8
|
},
|
|
9
9
|
"type": "module",
|
|
10
|
+
"files": [
|
|
11
|
+
"bin/",
|
|
12
|
+
"dist/",
|
|
13
|
+
"commands/",
|
|
14
|
+
"golem/",
|
|
15
|
+
".env.example",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
10
18
|
"bin": {
|
|
19
|
+
"golem-cc": "./bin/golem",
|
|
11
20
|
"golem": "./bin/golem",
|
|
12
21
|
"golem-api": "./dist/cli/index.js"
|
|
13
22
|
},
|
|
@@ -15,8 +24,7 @@
|
|
|
15
24
|
"build": "tsc",
|
|
16
25
|
"dev": "tsc --watch",
|
|
17
26
|
"lint": "eslint src/",
|
|
18
|
-
"typecheck": "tsc --noEmit"
|
|
19
|
-
"install:global": "./bin/install.sh"
|
|
27
|
+
"typecheck": "tsc --noEmit"
|
|
20
28
|
},
|
|
21
29
|
"dependencies": {
|
|
22
30
|
"chalk": "^5.3.0",
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
name: Publish to npm
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
tags:
|
|
6
|
-
- 'v*'
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
publish:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
permissions:
|
|
12
|
-
contents: read
|
|
13
|
-
id-token: write
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
|
|
17
|
-
- uses: actions/setup-node@v4
|
|
18
|
-
with:
|
|
19
|
-
node-version: '20'
|
|
20
|
-
registry-url: 'https://registry.npmjs.org'
|
|
21
|
-
|
|
22
|
-
- name: Upgrade npm for OIDC support
|
|
23
|
-
run: npm install -g npm@latest
|
|
24
|
-
|
|
25
|
-
- uses: pnpm/action-setup@v2
|
|
26
|
-
with:
|
|
27
|
-
version: 9
|
|
28
|
-
|
|
29
|
-
- name: Install dependencies
|
|
30
|
-
run: pnpm install
|
|
31
|
-
|
|
32
|
-
- name: Build
|
|
33
|
-
run: pnpm build
|
|
34
|
-
|
|
35
|
-
- name: Sync package.json version from git tag
|
|
36
|
-
run: |
|
|
37
|
-
VERSION=${GITHUB_REF#refs/tags/v}
|
|
38
|
-
echo "Setting version to $VERSION"
|
|
39
|
-
npm version $VERSION --no-git-tag-version --allow-same-version
|
|
40
|
-
|
|
41
|
-
- name: Publish to npm
|
|
42
|
-
run: npm publish --access public --provenance
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Implementation Plan
|
|
2
|
-
|
|
3
|
-
Ticket: LOCAL-DEV (no external ticket)
|
|
4
|
-
Generated: 2026-02-04
|
|
5
|
-
Based on: .golem/specs/config-command.md, .golem/specs/doctor-command.md
|
|
6
|
-
|
|
7
|
-
## Status
|
|
8
|
-
- Stages: 2
|
|
9
|
-
- Completed: 0
|
|
10
|
-
- Current: Stage 1
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Stage 1: Config Command
|
|
15
|
-
Commit: feat(cli): add golem config command to display configuration status
|
|
16
|
-
|
|
17
|
-
### [x] 1.1. Add cmd_config function to bin/golem
|
|
18
|
-
Files: bin/golem
|
|
19
|
-
Notes: Add function that displays GOLEM_HOME, env file locations, and all env vars with appropriate masking for secrets. Use existing color helpers (GREEN for set, YELLOW for unset optional, RED for unset required). Required vars: FRESH_DOMAIN, FRESH_API_KEY, GITEA_URL, GITEA_TOKEN.
|
|
20
|
-
Tests: Run `golem config` and verify output shows env status correctly
|
|
21
|
-
|
|
22
|
-
### [x] 1.2. Add config to main case statement and help text
|
|
23
|
-
Files: bin/golem
|
|
24
|
-
Notes: Add "config)" case to main(), add to cmd_help() under OTHER section
|
|
25
|
-
Tests: `golem help` shows config command, `golem config` routes correctly
|
|
26
|
-
|
|
27
|
-
### [x] 1.3. Create /golem:config Claude command
|
|
28
|
-
Files: commands/golem/config.md
|
|
29
|
-
Notes: Follow pattern from status.md - use bash context blocks to read env status, display formatted output
|
|
30
|
-
Tests: Run `/golem:config` in Claude and verify it shows configuration
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Stage 2: Doctor Command
|
|
35
|
-
Commit: feat(cli): add golem doctor command to diagnose setup issues
|
|
36
|
-
Depends on: Stage 1
|
|
37
|
-
|
|
38
|
-
### [x] 2.1. Add cmd_doctor function to bin/golem
|
|
39
|
-
Files: bin/golem
|
|
40
|
-
Notes: Implement environment checks (~/.golem dir, .env file, required vars), dependency checks (node, pnpm, git, golem-api with versions), installation checks (prompts, agents, commands, claude symlink). Track pass/fail count. Support --check-apis flag for optional API tests.
|
|
41
|
-
Tests: Run `golem doctor` and verify all checks run and display correctly
|
|
42
|
-
|
|
43
|
-
### [x] 2.2. Add doctor to main case statement and help text
|
|
44
|
-
Files: bin/golem
|
|
45
|
-
Notes: Add "doctor)" case to main(), add to cmd_help() under OTHER section
|
|
46
|
-
Tests: `golem help` shows doctor command, `golem doctor` routes correctly
|
|
47
|
-
|
|
48
|
-
### [x] 2.3. Create /golem:doctor Claude command
|
|
49
|
-
Files: commands/golem/doctor.md
|
|
50
|
-
Notes: Follow same pattern, run diagnostic checks and display results
|
|
51
|
-
Tests: Run `/golem:doctor` in Claude and verify diagnostics display
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Notes
|
|
56
|
-
|
|
57
|
-
- No external services needed - all local checks
|
|
58
|
-
- Install script may need re-run after adding new commands to copy them to ~/.golem
|
|
59
|
-
- Exit codes: config always 0 (informational), doctor 0 if all pass / 1 if any fail
|
package/bin/install.sh
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# Install golem globally
|
|
4
|
-
#
|
|
5
|
-
|
|
6
|
-
set -euo pipefail
|
|
7
|
-
|
|
8
|
-
GOLEM_HOME="${GOLEM_HOME:-$HOME/.golem}"
|
|
9
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
10
|
-
|
|
11
|
-
echo "Installing golem to $GOLEM_HOME..."
|
|
12
|
-
|
|
13
|
-
# Create directory structure
|
|
14
|
-
mkdir -p "$GOLEM_HOME"/{commands,agents,prompts}
|
|
15
|
-
|
|
16
|
-
# Copy commands
|
|
17
|
-
cp -r "$SCRIPT_DIR/commands/golem" "$GOLEM_HOME/commands/"
|
|
18
|
-
echo "✓ Installed Claude commands"
|
|
19
|
-
|
|
20
|
-
# Copy agents and prompts
|
|
21
|
-
cp "$SCRIPT_DIR/golem/agents/"*.md "$GOLEM_HOME/agents/"
|
|
22
|
-
cp "$SCRIPT_DIR/golem/prompts/"*.md "$GOLEM_HOME/prompts/"
|
|
23
|
-
echo "✓ Installed agents and prompts"
|
|
24
|
-
|
|
25
|
-
# Build TypeScript
|
|
26
|
-
echo "Building TypeScript..."
|
|
27
|
-
cd "$SCRIPT_DIR"
|
|
28
|
-
pnpm build
|
|
29
|
-
|
|
30
|
-
# Link binaries
|
|
31
|
-
mkdir -p "$HOME/.local/bin"
|
|
32
|
-
ln -sf "$SCRIPT_DIR/bin/golem" "$HOME/.local/bin/golem"
|
|
33
|
-
ln -sf "$SCRIPT_DIR/dist/cli/index.js" "$HOME/.local/bin/golem-api"
|
|
34
|
-
chmod +x "$SCRIPT_DIR/dist/cli/index.js"
|
|
35
|
-
echo "✓ Linked binaries to ~/.local/bin"
|
|
36
|
-
|
|
37
|
-
# Create env template if not exists
|
|
38
|
-
if [[ ! -f "$GOLEM_HOME/.env" ]]; then
|
|
39
|
-
cat > "$GOLEM_HOME/.env" << 'EOF'
|
|
40
|
-
# Freshworks/Freshservice
|
|
41
|
-
FRESH_DOMAIN=yourcompany.freshservice.com
|
|
42
|
-
FRESH_API_KEY=your_api_key_here
|
|
43
|
-
|
|
44
|
-
# Gitea (on-prem)
|
|
45
|
-
GITEA_URL=https://dev.pearlriverresort.com
|
|
46
|
-
GITEA_TOKEN=your_token_here
|
|
47
|
-
GITEA_ORG=CRDE
|
|
48
|
-
|
|
49
|
-
# Default repo for issues (can be overridden per-project)
|
|
50
|
-
GITEA_REPO=
|
|
51
|
-
EOF
|
|
52
|
-
echo "✓ Created $GOLEM_HOME/.env template"
|
|
53
|
-
echo ""
|
|
54
|
-
echo "⚠️ Edit $GOLEM_HOME/.env with your API credentials"
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
# Setup Claude integration
|
|
58
|
-
mkdir -p "$HOME/.claude/commands"
|
|
59
|
-
ln -sf "$GOLEM_HOME/commands/golem" "$HOME/.claude/commands/golem" 2>/dev/null || true
|
|
60
|
-
echo "✓ Linked Claude commands"
|
|
61
|
-
|
|
62
|
-
echo ""
|
|
63
|
-
echo "Installation complete!"
|
|
64
|
-
echo ""
|
|
65
|
-
echo "Make sure ~/.local/bin is in your PATH:"
|
|
66
|
-
echo ' export PATH="$HOME/.local/bin:$PATH"'
|
|
67
|
-
echo ""
|
|
68
|
-
echo "Then configure your credentials:"
|
|
69
|
-
echo " $GOLEM_HOME/.env"
|