aidevops 2.52.1 → 2.53.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 +1 -1
- package/VERSION +1 -1
- package/aidevops.sh +15 -9
- package/package.json +4 -4
- package/scripts/npm-postinstall.js +6 -7
- package/setup.sh +1 -1
- package/templates/deploy-templates.sh +144 -0
- package/templates/home/.agent/README.md +33 -0
- package/templates/home/AGENTS.md +96 -0
- package/templates/home/git/.agent/README.md +48 -0
- package/templates/home/git/AGENTS.md +97 -0
- package/templates/standard-functions.sh +179 -0
- package/templates/wordpress-performance-workflow.md +217 -0
- package/.agent/AGENTS.md +0 -614
- package/.agent/accounts.md +0 -65
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +0 -456
- package/.agent/aidevops/api-integrations.md +0 -335
- package/.agent/aidevops/architecture.md +0 -510
- package/.agent/aidevops/configs.md +0 -274
- package/.agent/aidevops/docs.md +0 -244
- package/.agent/aidevops/extension.md +0 -311
- package/.agent/aidevops/mcp-integrations.md +0 -340
- package/.agent/aidevops/mcp-troubleshooting.md +0 -162
- package/.agent/aidevops/memory-patterns.md +0 -172
- package/.agent/aidevops/providers.md +0 -217
- package/.agent/aidevops/recommendations.md +0 -321
- package/.agent/aidevops/requirements.md +0 -301
- package/.agent/aidevops/resources.md +0 -214
- package/.agent/aidevops/security-requirements.md +0 -174
- package/.agent/aidevops/security.md +0 -350
- package/.agent/aidevops/service-links.md +0 -400
- package/.agent/aidevops/services.md +0 -357
- package/.agent/aidevops/setup.md +0 -153
- package/.agent/aidevops/troubleshooting.md +0 -389
- package/.agent/aidevops.md +0 -124
- package/.agent/build-plus.md +0 -244
- package/.agent/content/guidelines.md +0 -109
- package/.agent/content.md +0 -87
- package/.agent/health.md +0 -59
- package/.agent/legal.md +0 -59
- package/.agent/loop-state/full-loop.local.md +0 -16
- package/.agent/loop-state/ralph-loop.local.md +0 -10
- package/.agent/marketing.md +0 -440
- package/.agent/memory/README.md +0 -260
- package/.agent/onboarding.md +0 -796
- package/.agent/plan-plus.md +0 -245
- package/.agent/research.md +0 -100
- package/.agent/sales.md +0 -333
- package/.agent/scripts/101domains-helper.sh +0 -701
- package/.agent/scripts/add-missing-returns.sh +0 -140
- package/.agent/scripts/agent-browser-helper.sh +0 -311
- package/.agent/scripts/agno-setup.sh +0 -712
- package/.agent/scripts/ahrefs-mcp-wrapper.js +0 -168
- package/.agent/scripts/aidevops-update-check.sh +0 -71
- package/.agent/scripts/ampcode-cli.sh +0 -522
- package/.agent/scripts/auto-version-bump.sh +0 -156
- package/.agent/scripts/autogen-helper.sh +0 -512
- package/.agent/scripts/beads-sync-helper.sh +0 -596
- package/.agent/scripts/closte-helper.sh +0 -5
- package/.agent/scripts/cloudron-helper.sh +0 -321
- package/.agent/scripts/codacy-cli-chunked.sh +0 -581
- package/.agent/scripts/codacy-cli.sh +0 -442
- package/.agent/scripts/code-audit-helper.sh +0 -5
- package/.agent/scripts/coderabbit-cli.sh +0 -417
- package/.agent/scripts/coderabbit-pro-analysis.sh +0 -238
- package/.agent/scripts/commands/code-simplifier.md +0 -86
- package/.agent/scripts/commands/full-loop.md +0 -246
- package/.agent/scripts/commands/postflight-loop.md +0 -103
- package/.agent/scripts/commands/recall.md +0 -182
- package/.agent/scripts/commands/remember.md +0 -132
- package/.agent/scripts/commands/save-todo.md +0 -175
- package/.agent/scripts/commands/session-review.md +0 -154
- package/.agent/scripts/comprehensive-quality-fix.sh +0 -106
- package/.agent/scripts/context-builder-helper.sh +0 -522
- package/.agent/scripts/coolify-cli-helper.sh +0 -674
- package/.agent/scripts/coolify-helper.sh +0 -380
- package/.agent/scripts/crawl4ai-examples.sh +0 -401
- package/.agent/scripts/crawl4ai-helper.sh +0 -1078
- package/.agent/scripts/crewai-helper.sh +0 -681
- package/.agent/scripts/dev-browser-helper.sh +0 -513
- package/.agent/scripts/dns-helper.sh +0 -396
- package/.agent/scripts/domain-research-helper.sh +0 -917
- package/.agent/scripts/dspy-helper.sh +0 -285
- package/.agent/scripts/dspyground-helper.sh +0 -291
- package/.agent/scripts/eeat-score-helper.sh +0 -1242
- package/.agent/scripts/efficient-return-fix.sh +0 -92
- package/.agent/scripts/extract-opencode-prompts.sh +0 -128
- package/.agent/scripts/find-missing-returns.sh +0 -113
- package/.agent/scripts/fix-auth-headers.sh +0 -104
- package/.agent/scripts/fix-common-strings.sh +0 -254
- package/.agent/scripts/fix-content-type.sh +0 -100
- package/.agent/scripts/fix-error-messages.sh +0 -130
- package/.agent/scripts/fix-misplaced-returns.sh +0 -74
- package/.agent/scripts/fix-remaining-literals.sh +0 -152
- package/.agent/scripts/fix-return-statements.sh +0 -41
- package/.agent/scripts/fix-s131-default-cases.sh +0 -249
- package/.agent/scripts/fix-sc2155-simple.sh +0 -102
- package/.agent/scripts/fix-shellcheck-critical.sh +0 -187
- package/.agent/scripts/fix-string-literals.sh +0 -273
- package/.agent/scripts/full-loop-helper.sh +0 -773
- package/.agent/scripts/generate-opencode-agents.sh +0 -497
- package/.agent/scripts/generate-opencode-commands.sh +0 -1629
- package/.agent/scripts/generate-skills.sh +0 -366
- package/.agent/scripts/git-platforms-helper.sh +0 -640
- package/.agent/scripts/gitea-cli-helper.sh +0 -743
- package/.agent/scripts/github-cli-helper.sh +0 -702
- package/.agent/scripts/gitlab-cli-helper.sh +0 -682
- package/.agent/scripts/gsc-add-user-helper.sh +0 -325
- package/.agent/scripts/gsc-sitemap-helper.sh +0 -678
- package/.agent/scripts/hetzner-helper.sh +0 -485
- package/.agent/scripts/hostinger-helper.sh +0 -229
- package/.agent/scripts/keyword-research-helper.sh +0 -1815
- package/.agent/scripts/langflow-helper.sh +0 -544
- package/.agent/scripts/linkedin-automation.py +0 -241
- package/.agent/scripts/linter-manager.sh +0 -599
- package/.agent/scripts/linters-local.sh +0 -434
- package/.agent/scripts/list-keys-helper.sh +0 -488
- package/.agent/scripts/local-browser-automation.py +0 -339
- package/.agent/scripts/localhost-helper.sh +0 -744
- package/.agent/scripts/loop-common.sh +0 -806
- package/.agent/scripts/mainwp-helper.sh +0 -728
- package/.agent/scripts/markdown-formatter.sh +0 -338
- package/.agent/scripts/markdown-lint-fix.sh +0 -311
- package/.agent/scripts/mass-fix-returns.sh +0 -58
- package/.agent/scripts/mcp-diagnose.sh +0 -167
- package/.agent/scripts/mcp-inspector-helper.sh +0 -449
- package/.agent/scripts/memory-helper.sh +0 -650
- package/.agent/scripts/monitor-code-review.sh +0 -255
- package/.agent/scripts/onboarding-helper.sh +0 -706
- package/.agent/scripts/opencode-github-setup-helper.sh +0 -797
- package/.agent/scripts/opencode-test-helper.sh +0 -213
- package/.agent/scripts/pagespeed-helper.sh +0 -464
- package/.agent/scripts/pandoc-helper.sh +0 -362
- package/.agent/scripts/postflight-check.sh +0 -555
- package/.agent/scripts/pre-commit-hook.sh +0 -259
- package/.agent/scripts/pre-edit-check.sh +0 -169
- package/.agent/scripts/qlty-cli.sh +0 -356
- package/.agent/scripts/quality-cli-manager.sh +0 -525
- package/.agent/scripts/quality-feedback-helper.sh +0 -462
- package/.agent/scripts/quality-fix.sh +0 -263
- package/.agent/scripts/quality-loop-helper.sh +0 -1108
- package/.agent/scripts/ralph-loop-helper.sh +0 -836
- package/.agent/scripts/ralph-upstream-check.sh +0 -341
- package/.agent/scripts/secretlint-helper.sh +0 -847
- package/.agent/scripts/servers-helper.sh +0 -241
- package/.agent/scripts/ses-helper.sh +0 -619
- package/.agent/scripts/session-review-helper.sh +0 -404
- package/.agent/scripts/setup-linters-wizard.sh +0 -379
- package/.agent/scripts/setup-local-api-keys.sh +0 -330
- package/.agent/scripts/setup-mcp-integrations.sh +0 -472
- package/.agent/scripts/shared-constants.sh +0 -246
- package/.agent/scripts/site-crawler-helper.sh +0 -1487
- package/.agent/scripts/snyk-helper.sh +0 -940
- package/.agent/scripts/sonarcloud-autofix.sh +0 -193
- package/.agent/scripts/sonarcloud-cli.sh +0 -191
- package/.agent/scripts/sonarscanner-cli.sh +0 -455
- package/.agent/scripts/spaceship-helper.sh +0 -747
- package/.agent/scripts/stagehand-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-setup.sh +0 -441
- package/.agent/scripts/stagehand-setup.sh +0 -439
- package/.agent/scripts/system-cleanup.sh +0 -340
- package/.agent/scripts/terminal-title-helper.sh +0 -388
- package/.agent/scripts/terminal-title-setup.sh +0 -549
- package/.agent/scripts/test-stagehand-both-integration.sh +0 -317
- package/.agent/scripts/test-stagehand-integration.sh +0 -309
- package/.agent/scripts/test-stagehand-python-integration.sh +0 -341
- package/.agent/scripts/todo-ready.sh +0 -263
- package/.agent/scripts/tool-version-check.sh +0 -362
- package/.agent/scripts/toon-helper.sh +0 -469
- package/.agent/scripts/twilio-helper.sh +0 -917
- package/.agent/scripts/updown-helper.sh +0 -279
- package/.agent/scripts/validate-mcp-integrations.sh +0 -250
- package/.agent/scripts/validate-version-consistency.sh +0 -131
- package/.agent/scripts/vaultwarden-helper.sh +0 -597
- package/.agent/scripts/vercel-cli-helper.sh +0 -816
- package/.agent/scripts/verify-mirrors.sh +0 -169
- package/.agent/scripts/version-manager.sh +0 -831
- package/.agent/scripts/webhosting-helper.sh +0 -471
- package/.agent/scripts/webhosting-verify.sh +0 -238
- package/.agent/scripts/wordpress-mcp-helper.sh +0 -508
- package/.agent/scripts/worktree-helper.sh +0 -595
- package/.agent/scripts/worktree-sessions.sh +0 -577
- package/.agent/seo/dataforseo.md +0 -215
- package/.agent/seo/domain-research.md +0 -532
- package/.agent/seo/eeat-score.md +0 -659
- package/.agent/seo/google-search-console.md +0 -366
- package/.agent/seo/gsc-sitemaps.md +0 -282
- package/.agent/seo/keyword-research.md +0 -521
- package/.agent/seo/serper.md +0 -278
- package/.agent/seo/site-crawler.md +0 -387
- package/.agent/seo.md +0 -236
- package/.agent/services/accounting/quickfile.md +0 -159
- package/.agent/services/communications/telfon.md +0 -470
- package/.agent/services/communications/twilio.md +0 -569
- package/.agent/services/crm/fluentcrm.md +0 -449
- package/.agent/services/email/ses.md +0 -399
- package/.agent/services/hosting/101domains.md +0 -378
- package/.agent/services/hosting/closte.md +0 -177
- package/.agent/services/hosting/cloudflare.md +0 -251
- package/.agent/services/hosting/cloudron.md +0 -478
- package/.agent/services/hosting/dns-providers.md +0 -335
- package/.agent/services/hosting/domain-purchasing.md +0 -344
- package/.agent/services/hosting/hetzner.md +0 -327
- package/.agent/services/hosting/hostinger.md +0 -287
- package/.agent/services/hosting/localhost.md +0 -419
- package/.agent/services/hosting/spaceship.md +0 -353
- package/.agent/services/hosting/webhosting.md +0 -330
- package/.agent/social-media.md +0 -69
- package/.agent/templates/plans-template.md +0 -114
- package/.agent/templates/prd-template.md +0 -129
- package/.agent/templates/tasks-template.md +0 -108
- package/.agent/templates/todo-template.md +0 -89
- package/.agent/tools/ai-assistants/agno.md +0 -471
- package/.agent/tools/ai-assistants/capsolver.md +0 -326
- package/.agent/tools/ai-assistants/configuration.md +0 -221
- package/.agent/tools/ai-assistants/overview.md +0 -209
- package/.agent/tools/ai-assistants/status.md +0 -171
- package/.agent/tools/ai-assistants/windsurf.md +0 -193
- package/.agent/tools/ai-orchestration/autogen.md +0 -406
- package/.agent/tools/ai-orchestration/crewai.md +0 -445
- package/.agent/tools/ai-orchestration/langflow.md +0 -405
- package/.agent/tools/ai-orchestration/openprose.md +0 -487
- package/.agent/tools/ai-orchestration/overview.md +0 -362
- package/.agent/tools/ai-orchestration/packaging.md +0 -647
- package/.agent/tools/browser/agent-browser.md +0 -464
- package/.agent/tools/browser/browser-automation.md +0 -400
- package/.agent/tools/browser/chrome-devtools.md +0 -282
- package/.agent/tools/browser/crawl4ai-integration.md +0 -422
- package/.agent/tools/browser/crawl4ai-resources.md +0 -277
- package/.agent/tools/browser/crawl4ai-usage.md +0 -416
- package/.agent/tools/browser/crawl4ai.md +0 -585
- package/.agent/tools/browser/dev-browser.md +0 -341
- package/.agent/tools/browser/pagespeed.md +0 -260
- package/.agent/tools/browser/playwright.md +0 -266
- package/.agent/tools/browser/playwriter.md +0 -310
- package/.agent/tools/browser/stagehand-examples.md +0 -456
- package/.agent/tools/browser/stagehand-python.md +0 -483
- package/.agent/tools/browser/stagehand.md +0 -421
- package/.agent/tools/build-agent/agent-review.md +0 -224
- package/.agent/tools/build-agent/build-agent.md +0 -784
- package/.agent/tools/build-mcp/aidevops-plugin.md +0 -476
- package/.agent/tools/build-mcp/api-wrapper.md +0 -445
- package/.agent/tools/build-mcp/build-mcp.md +0 -240
- package/.agent/tools/build-mcp/deployment.md +0 -401
- package/.agent/tools/build-mcp/server-patterns.md +0 -632
- package/.agent/tools/build-mcp/transports.md +0 -366
- package/.agent/tools/code-review/auditing.md +0 -383
- package/.agent/tools/code-review/automation.md +0 -219
- package/.agent/tools/code-review/best-practices.md +0 -203
- package/.agent/tools/code-review/codacy.md +0 -151
- package/.agent/tools/code-review/code-simplifier.md +0 -174
- package/.agent/tools/code-review/code-standards.md +0 -309
- package/.agent/tools/code-review/coderabbit.md +0 -101
- package/.agent/tools/code-review/management.md +0 -155
- package/.agent/tools/code-review/qlty.md +0 -248
- package/.agent/tools/code-review/secretlint.md +0 -565
- package/.agent/tools/code-review/setup.md +0 -250
- package/.agent/tools/code-review/snyk.md +0 -563
- package/.agent/tools/code-review/tools.md +0 -230
- package/.agent/tools/content/summarize.md +0 -353
- package/.agent/tools/context/augment-context-engine.md +0 -468
- package/.agent/tools/context/context-builder-agent.md +0 -76
- package/.agent/tools/context/context-builder.md +0 -375
- package/.agent/tools/context/context7.md +0 -371
- package/.agent/tools/context/dspy.md +0 -302
- package/.agent/tools/context/dspyground.md +0 -374
- package/.agent/tools/context/llm-tldr.md +0 -219
- package/.agent/tools/context/osgrep.md +0 -488
- package/.agent/tools/context/prompt-optimization.md +0 -338
- package/.agent/tools/context/toon.md +0 -292
- package/.agent/tools/conversion/pandoc.md +0 -304
- package/.agent/tools/credentials/api-key-management.md +0 -154
- package/.agent/tools/credentials/api-key-setup.md +0 -224
- package/.agent/tools/credentials/environment-variables.md +0 -180
- package/.agent/tools/credentials/vaultwarden.md +0 -382
- package/.agent/tools/data-extraction/outscraper.md +0 -974
- package/.agent/tools/deployment/coolify-cli.md +0 -388
- package/.agent/tools/deployment/coolify-setup.md +0 -353
- package/.agent/tools/deployment/coolify.md +0 -345
- package/.agent/tools/deployment/vercel.md +0 -390
- package/.agent/tools/git/authentication.md +0 -132
- package/.agent/tools/git/gitea-cli.md +0 -193
- package/.agent/tools/git/github-actions.md +0 -207
- package/.agent/tools/git/github-cli.md +0 -223
- package/.agent/tools/git/gitlab-cli.md +0 -190
- package/.agent/tools/git/opencode-github-security.md +0 -350
- package/.agent/tools/git/opencode-github.md +0 -328
- package/.agent/tools/git/opencode-gitlab.md +0 -252
- package/.agent/tools/git/security.md +0 -196
- package/.agent/tools/git.md +0 -207
- package/.agent/tools/opencode/oh-my-opencode.md +0 -375
- package/.agent/tools/opencode/opencode-anthropic-auth.md +0 -446
- package/.agent/tools/opencode/opencode.md +0 -651
- package/.agent/tools/social-media/bird.md +0 -437
- package/.agent/tools/task-management/beads.md +0 -336
- package/.agent/tools/terminal/terminal-title.md +0 -251
- package/.agent/tools/ui/shadcn.md +0 -196
- package/.agent/tools/ui/ui-skills.md +0 -115
- package/.agent/tools/wordpress/localwp.md +0 -311
- package/.agent/tools/wordpress/mainwp.md +0 -391
- package/.agent/tools/wordpress/scf.md +0 -527
- package/.agent/tools/wordpress/wp-admin.md +0 -729
- package/.agent/tools/wordpress/wp-dev.md +0 -940
- package/.agent/tools/wordpress/wp-preferred.md +0 -398
- package/.agent/tools/wordpress.md +0 -95
- package/.agent/workflows/branch/bugfix.md +0 -63
- package/.agent/workflows/branch/chore.md +0 -95
- package/.agent/workflows/branch/experiment.md +0 -115
- package/.agent/workflows/branch/feature.md +0 -59
- package/.agent/workflows/branch/hotfix.md +0 -98
- package/.agent/workflows/branch/refactor.md +0 -92
- package/.agent/workflows/branch/release.md +0 -96
- package/.agent/workflows/branch.md +0 -347
- package/.agent/workflows/bug-fixing.md +0 -267
- package/.agent/workflows/changelog.md +0 -129
- package/.agent/workflows/code-audit-remote.md +0 -279
- package/.agent/workflows/conversation-starter.md +0 -69
- package/.agent/workflows/error-feedback.md +0 -578
- package/.agent/workflows/feature-development.md +0 -355
- package/.agent/workflows/git-workflow.md +0 -702
- package/.agent/workflows/multi-repo-workspace.md +0 -268
- package/.agent/workflows/plans.md +0 -709
- package/.agent/workflows/postflight.md +0 -604
- package/.agent/workflows/pr.md +0 -571
- package/.agent/workflows/preflight.md +0 -278
- package/.agent/workflows/ralph-loop.md +0 -773
- package/.agent/workflows/release.md +0 -498
- package/.agent/workflows/session-manager.md +0 -254
- package/.agent/workflows/session-review.md +0 -311
- package/.agent/workflows/sql-migrations.md +0 -631
- package/.agent/workflows/version-bump.md +0 -283
- package/.agent/workflows/wiki-update.md +0 -333
- package/.agent/workflows/worktree.md +0 -477
|
@@ -1,577 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# shellcheck disable=SC2034,SC2155
|
|
3
|
-
|
|
4
|
-
# =============================================================================
|
|
5
|
-
# Worktree Session Mapper
|
|
6
|
-
# =============================================================================
|
|
7
|
-
# Maps git worktrees to likely OpenCode sessions based on:
|
|
8
|
-
# - Session titles matching branch names
|
|
9
|
-
# - Session timestamps near worktree creation
|
|
10
|
-
# - Commit history correlation
|
|
11
|
-
#
|
|
12
|
-
# Usage:
|
|
13
|
-
# worktree-sessions.sh [command]
|
|
14
|
-
#
|
|
15
|
-
# Commands:
|
|
16
|
-
# list List worktrees with likely sessions (default)
|
|
17
|
-
# open Interactive: select worktree and open session
|
|
18
|
-
# help Show this help
|
|
19
|
-
# =============================================================================
|
|
20
|
-
|
|
21
|
-
set -euo pipefail
|
|
22
|
-
|
|
23
|
-
# Colors
|
|
24
|
-
readonly RED='\033[0;31m'
|
|
25
|
-
readonly GREEN='\033[0;32m'
|
|
26
|
-
readonly YELLOW='\033[1;33m'
|
|
27
|
-
readonly BLUE='\033[0;34m'
|
|
28
|
-
readonly CYAN='\033[0;36m'
|
|
29
|
-
readonly BOLD='\033[1m'
|
|
30
|
-
readonly DIM='\033[2m'
|
|
31
|
-
readonly NC='\033[0m'
|
|
32
|
-
|
|
33
|
-
# OpenCode session storage
|
|
34
|
-
readonly SESSION_BASE="$HOME/.local/share/opencode/storage/session"
|
|
35
|
-
readonly PROJECT_BASE="$HOME/.local/share/opencode/storage/project"
|
|
36
|
-
|
|
37
|
-
# =============================================================================
|
|
38
|
-
# UTILITY FUNCTIONS
|
|
39
|
-
# =============================================================================
|
|
40
|
-
|
|
41
|
-
get_repo_root() {
|
|
42
|
-
git rev-parse --show-toplevel 2>/dev/null || echo ""
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
get_repo_name() {
|
|
46
|
-
local root
|
|
47
|
-
root=$(get_repo_root)
|
|
48
|
-
if [[ -n "$root" ]]; then
|
|
49
|
-
basename "$root"
|
|
50
|
-
fi
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
# Get project ID hash for a directory
|
|
54
|
-
get_project_id() {
|
|
55
|
-
local dir="$1"
|
|
56
|
-
# OpenCode uses a hash of the directory path
|
|
57
|
-
# We need to find it by matching the directory in project files
|
|
58
|
-
for project_file in "$PROJECT_BASE"/*.json; do
|
|
59
|
-
if [[ -f "$project_file" ]]; then
|
|
60
|
-
local project_dir
|
|
61
|
-
project_dir=$(jq -r '.worktree // .path // .directory // ""' "$project_file" 2>/dev/null)
|
|
62
|
-
if [[ "$project_dir" == "$dir" ]]; then
|
|
63
|
-
basename "$project_file" .json
|
|
64
|
-
return 0
|
|
65
|
-
fi
|
|
66
|
-
fi
|
|
67
|
-
done
|
|
68
|
-
echo ""
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
# Convert epoch seconds to readable date (portable)
|
|
72
|
-
epoch_sec_to_date() {
|
|
73
|
-
local epoch_sec="$1"
|
|
74
|
-
if [[ -n "$epoch_sec" ]] && [[ "$epoch_sec" != "0" ]]; then
|
|
75
|
-
# Portable date formatting (BSD: -r, GNU: -d @)
|
|
76
|
-
if date --version &>/dev/null 2>&1; then
|
|
77
|
-
# GNU date
|
|
78
|
-
date -d "@$epoch_sec" "+%Y-%m-%d %H:%M" 2>/dev/null || echo "unknown"
|
|
79
|
-
else
|
|
80
|
-
# BSD date (macOS)
|
|
81
|
-
date -r "$epoch_sec" "+%Y-%m-%d %H:%M" 2>/dev/null || echo "unknown"
|
|
82
|
-
fi
|
|
83
|
-
else
|
|
84
|
-
echo "unknown"
|
|
85
|
-
fi
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
# Convert epoch milliseconds to readable date (portable)
|
|
89
|
-
epoch_to_date() {
|
|
90
|
-
local epoch_ms="$1"
|
|
91
|
-
if [[ -n "$epoch_ms" ]] && [[ "$epoch_ms" != "null" ]]; then
|
|
92
|
-
epoch_sec_to_date "$((epoch_ms/1000))"
|
|
93
|
-
else
|
|
94
|
-
echo "unknown"
|
|
95
|
-
fi
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
# Check if a worktree has an active Ralph loop
|
|
99
|
-
# Arguments:
|
|
100
|
-
# $1 - worktree path
|
|
101
|
-
# Returns: 0 if active loop, 1 if not
|
|
102
|
-
# Output: Loop info string if active, empty if not
|
|
103
|
-
get_ralph_loop_status() {
|
|
104
|
-
local worktree_path="$1"
|
|
105
|
-
# Check new location first, then legacy
|
|
106
|
-
local state_file="$worktree_path/.agent/loop-state/ralph-loop.local.md"
|
|
107
|
-
local state_file_legacy="$worktree_path/.claude/ralph-loop.local.md"
|
|
108
|
-
|
|
109
|
-
local active_file=""
|
|
110
|
-
[[ -f "$state_file" ]] && active_file="$state_file"
|
|
111
|
-
[[ -z "$active_file" && -f "$state_file_legacy" ]] && active_file="$state_file_legacy"
|
|
112
|
-
|
|
113
|
-
if [[ -n "$active_file" ]]; then
|
|
114
|
-
local iteration
|
|
115
|
-
local max_iterations
|
|
116
|
-
local started_at
|
|
117
|
-
|
|
118
|
-
iteration=$(grep '^iteration:' "$active_file" 2>/dev/null | sed 's/iteration: *//')
|
|
119
|
-
max_iterations=$(grep '^max_iterations:' "$active_file" 2>/dev/null | sed 's/max_iterations: *//')
|
|
120
|
-
started_at=$(grep '^started_at:' "$active_file" 2>/dev/null | sed 's/started_at: *//' | sed 's/^"\(.*\)"$/\1/')
|
|
121
|
-
|
|
122
|
-
if [[ "$max_iterations" == "0" ]]; then
|
|
123
|
-
echo "iteration $iteration (unlimited)"
|
|
124
|
-
else
|
|
125
|
-
echo "iteration $iteration/$max_iterations"
|
|
126
|
-
fi
|
|
127
|
-
return 0
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
return 1
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
# Get the default branch (main or master)
|
|
134
|
-
get_default_branch() {
|
|
135
|
-
local worktree_path="${1:-.}"
|
|
136
|
-
# Try to get from remote HEAD
|
|
137
|
-
local default_branch
|
|
138
|
-
default_branch=$(git -C "$worktree_path" symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
|
|
139
|
-
|
|
140
|
-
if [[ -n "$default_branch" ]]; then
|
|
141
|
-
echo "$default_branch"
|
|
142
|
-
return 0
|
|
143
|
-
fi
|
|
144
|
-
|
|
145
|
-
# Fallback: check if main or master exists
|
|
146
|
-
if git -C "$worktree_path" show-ref --verify --quiet refs/heads/main 2>/dev/null; then
|
|
147
|
-
echo "main"
|
|
148
|
-
elif git -C "$worktree_path" show-ref --verify --quiet refs/heads/master 2>/dev/null; then
|
|
149
|
-
echo "master"
|
|
150
|
-
else
|
|
151
|
-
echo "main"
|
|
152
|
-
fi
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
# Get first commit date on branch (divergence from default branch)
|
|
156
|
-
get_branch_start_date() {
|
|
157
|
-
local worktree_path="$1"
|
|
158
|
-
local branch="$2"
|
|
159
|
-
|
|
160
|
-
# Detect default branch
|
|
161
|
-
local default_branch
|
|
162
|
-
default_branch=$(get_default_branch "$worktree_path")
|
|
163
|
-
|
|
164
|
-
# Get the first commit unique to this branch (non-fatal if fails)
|
|
165
|
-
local first_commit_date
|
|
166
|
-
first_commit_date=$(git -C "$worktree_path" log "$default_branch..$branch" --format="%ct" --reverse 2>/dev/null | head -1) || true
|
|
167
|
-
|
|
168
|
-
if [[ -n "$first_commit_date" ]]; then
|
|
169
|
-
echo "$first_commit_date"
|
|
170
|
-
else
|
|
171
|
-
# No unique commits, use worktree creation time (directory mtime)
|
|
172
|
-
# Portable stat (BSD: -f "%m", GNU: -c "%Y")
|
|
173
|
-
if stat --version &>/dev/null 2>&1; then
|
|
174
|
-
stat -c "%Y" "$worktree_path" 2>/dev/null || echo ""
|
|
175
|
-
else
|
|
176
|
-
stat -f "%m" "$worktree_path" 2>/dev/null || echo ""
|
|
177
|
-
fi
|
|
178
|
-
fi
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
# Search sessions for matches
|
|
182
|
-
find_matching_sessions() {
|
|
183
|
-
local branch="$1"
|
|
184
|
-
local project_id="$2"
|
|
185
|
-
local branch_start_epoch="$3"
|
|
186
|
-
local worktree_path="$4"
|
|
187
|
-
|
|
188
|
-
local session_dir="$SESSION_BASE/$project_id"
|
|
189
|
-
|
|
190
|
-
if [[ ! -d "$session_dir" ]]; then
|
|
191
|
-
return
|
|
192
|
-
fi
|
|
193
|
-
|
|
194
|
-
# Normalize branch name for matching
|
|
195
|
-
local branch_slug
|
|
196
|
-
branch_slug=$(echo "$branch" | tr '/' '-' | tr '[:upper:]' '[:lower:]')
|
|
197
|
-
local branch_parts
|
|
198
|
-
IFS='/' read -ra branch_parts <<< "$branch"
|
|
199
|
-
local branch_name="${branch_parts[${#branch_parts[@]}-1]}"
|
|
200
|
-
|
|
201
|
-
# Search criteria weights
|
|
202
|
-
local matches=()
|
|
203
|
-
|
|
204
|
-
for session_file in "$session_dir"/ses_*.json; do
|
|
205
|
-
if [[ ! -f "$session_file" ]]; then
|
|
206
|
-
continue
|
|
207
|
-
fi
|
|
208
|
-
|
|
209
|
-
local session_id
|
|
210
|
-
local session_title
|
|
211
|
-
local session_updated
|
|
212
|
-
local session_created
|
|
213
|
-
local score=0
|
|
214
|
-
|
|
215
|
-
session_id=$(jq -r '.id // ""' "$session_file" 2>/dev/null)
|
|
216
|
-
session_title=$(jq -r '.title // ""' "$session_file" 2>/dev/null)
|
|
217
|
-
session_updated=$(jq -r '.time.updated // 0' "$session_file" 2>/dev/null)
|
|
218
|
-
session_created=$(jq -r '.time.created // 0' "$session_file" 2>/dev/null)
|
|
219
|
-
|
|
220
|
-
# Skip empty sessions
|
|
221
|
-
if [[ -z "$session_title" ]] || [[ "$session_title" == "null" ]]; then
|
|
222
|
-
continue
|
|
223
|
-
fi
|
|
224
|
-
|
|
225
|
-
# Scoring: exact branch name match (highest)
|
|
226
|
-
if [[ "$session_title" == "$branch" ]]; then
|
|
227
|
-
score=$((score + 100))
|
|
228
|
-
fi
|
|
229
|
-
|
|
230
|
-
# Scoring: branch slug in title (case-insensitive)
|
|
231
|
-
if echo "$session_title" | grep -qi "$branch_slug"; then
|
|
232
|
-
score=$((score + 80))
|
|
233
|
-
fi
|
|
234
|
-
|
|
235
|
-
# Scoring: branch name (without type prefix) in title
|
|
236
|
-
if echo "$session_title" | grep -qi "$branch_name"; then
|
|
237
|
-
score=$((score + 60))
|
|
238
|
-
fi
|
|
239
|
-
|
|
240
|
-
# Scoring: key terms from branch name
|
|
241
|
-
for part in "${branch_parts[@]}"; do
|
|
242
|
-
if [[ ${#part} -gt 3 ]] && echo "$session_title" | grep -qi "$part"; then
|
|
243
|
-
score=$((score + 20))
|
|
244
|
-
fi
|
|
245
|
-
done
|
|
246
|
-
|
|
247
|
-
# Scoring: temporal proximity (within 1 hour of branch creation)
|
|
248
|
-
if [[ -n "$branch_start_epoch" ]] && [[ "$branch_start_epoch" != "0" ]]; then
|
|
249
|
-
local branch_start_ms=$((branch_start_epoch * 1000))
|
|
250
|
-
local time_diff
|
|
251
|
-
|
|
252
|
-
# Check created time
|
|
253
|
-
if [[ "$session_created" != "0" ]] && [[ "$session_created" != "null" ]]; then
|
|
254
|
-
time_diff=$((session_created - branch_start_ms))
|
|
255
|
-
if [[ $time_diff -lt 0 ]]; then
|
|
256
|
-
time_diff=$((time_diff * -1))
|
|
257
|
-
fi
|
|
258
|
-
# Within 1 hour
|
|
259
|
-
if [[ $time_diff -lt 3600000 ]]; then
|
|
260
|
-
score=$((score + 40))
|
|
261
|
-
# Within 4 hours
|
|
262
|
-
elif [[ $time_diff -lt 14400000 ]]; then
|
|
263
|
-
score=$((score + 20))
|
|
264
|
-
fi
|
|
265
|
-
fi
|
|
266
|
-
fi
|
|
267
|
-
|
|
268
|
-
# Only include if score > 0
|
|
269
|
-
if [[ $score -gt 0 ]]; then
|
|
270
|
-
local updated_str
|
|
271
|
-
updated_str=$(epoch_to_date "$session_updated")
|
|
272
|
-
matches+=("$score|$session_id|$session_title|$updated_str")
|
|
273
|
-
fi
|
|
274
|
-
done
|
|
275
|
-
|
|
276
|
-
# Sort by score descending and output top 3
|
|
277
|
-
printf '%s\n' "${matches[@]}" 2>/dev/null | sort -t'|' -k1 -rn | head -3
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
# =============================================================================
|
|
281
|
-
# COMMANDS
|
|
282
|
-
# =============================================================================
|
|
283
|
-
|
|
284
|
-
cmd_list() {
|
|
285
|
-
echo -e "${BOLD}Worktree Session Mapping${NC}"
|
|
286
|
-
echo ""
|
|
287
|
-
|
|
288
|
-
local repo_root
|
|
289
|
-
repo_root=$(get_repo_root)
|
|
290
|
-
|
|
291
|
-
if [[ -z "$repo_root" ]]; then
|
|
292
|
-
echo -e "${RED}Error: Not in a git repository${NC}"
|
|
293
|
-
return 1
|
|
294
|
-
fi
|
|
295
|
-
|
|
296
|
-
# Get project ID for main repo
|
|
297
|
-
local main_project_id
|
|
298
|
-
main_project_id=$(get_project_id "$repo_root")
|
|
299
|
-
|
|
300
|
-
if [[ -z "$main_project_id" ]]; then
|
|
301
|
-
echo -e "${YELLOW}Warning: No OpenCode project found for this repository${NC}"
|
|
302
|
-
echo "Sessions may be stored under a different project ID"
|
|
303
|
-
echo ""
|
|
304
|
-
fi
|
|
305
|
-
|
|
306
|
-
# Parse worktrees
|
|
307
|
-
local worktree_path=""
|
|
308
|
-
local worktree_branch=""
|
|
309
|
-
local count=0
|
|
310
|
-
|
|
311
|
-
while IFS= read -r line; do
|
|
312
|
-
if [[ "$line" =~ ^worktree\ (.+)$ ]]; then
|
|
313
|
-
worktree_path="${BASH_REMATCH[1]}"
|
|
314
|
-
elif [[ "$line" =~ ^branch\ refs/heads/(.+)$ ]]; then
|
|
315
|
-
worktree_branch="${BASH_REMATCH[1]}"
|
|
316
|
-
elif [[ -z "$line" ]]; then
|
|
317
|
-
# End of entry
|
|
318
|
-
if [[ -n "$worktree_path" ]] && [[ -n "$worktree_branch" ]]; then
|
|
319
|
-
# Skip main branch
|
|
320
|
-
if [[ "$worktree_branch" == "main" ]] || [[ "$worktree_branch" == "master" ]]; then
|
|
321
|
-
worktree_path=""
|
|
322
|
-
worktree_branch=""
|
|
323
|
-
continue
|
|
324
|
-
fi
|
|
325
|
-
|
|
326
|
-
count=$((count + 1))
|
|
327
|
-
|
|
328
|
-
echo -e "${BOLD}[$count] $worktree_branch${NC}"
|
|
329
|
-
echo -e " ${DIM}Path: $worktree_path${NC}"
|
|
330
|
-
|
|
331
|
-
# Get branch start time
|
|
332
|
-
local branch_start
|
|
333
|
-
branch_start=$(get_branch_start_date "$worktree_path" "$worktree_branch")
|
|
334
|
-
|
|
335
|
-
if [[ -n "$branch_start" ]]; then
|
|
336
|
-
local start_date
|
|
337
|
-
start_date=$(epoch_sec_to_date "$branch_start")
|
|
338
|
-
echo -e " ${DIM}Branch started: $start_date${NC}"
|
|
339
|
-
fi
|
|
340
|
-
|
|
341
|
-
# Get last commit info
|
|
342
|
-
local last_commit
|
|
343
|
-
last_commit=$(git -C "$worktree_path" log -1 --format="%s" 2>/dev/null | head -c 60)
|
|
344
|
-
local last_commit_date
|
|
345
|
-
last_commit_date=$(git -C "$worktree_path" log -1 --format="%ci" 2>/dev/null | cut -d' ' -f1,2)
|
|
346
|
-
|
|
347
|
-
if [[ -n "$last_commit" ]]; then
|
|
348
|
-
echo -e " ${DIM}Last commit: $last_commit_date${NC}"
|
|
349
|
-
fi
|
|
350
|
-
|
|
351
|
-
# Check for active Ralph loop
|
|
352
|
-
local ralph_status
|
|
353
|
-
ralph_status=$(get_ralph_loop_status "$worktree_path")
|
|
354
|
-
if [[ -n "$ralph_status" ]]; then
|
|
355
|
-
echo -e " ${YELLOW}Ralph loop: $ralph_status${NC}"
|
|
356
|
-
fi
|
|
357
|
-
|
|
358
|
-
echo ""
|
|
359
|
-
|
|
360
|
-
# Find matching sessions
|
|
361
|
-
if [[ -n "$main_project_id" ]]; then
|
|
362
|
-
local matches
|
|
363
|
-
matches=$(find_matching_sessions "$worktree_branch" "$main_project_id" "$branch_start" "$worktree_path")
|
|
364
|
-
|
|
365
|
-
if [[ -n "$matches" ]]; then
|
|
366
|
-
echo -e " ${CYAN}Likely sessions:${NC}"
|
|
367
|
-
while IFS='|' read -r score session_id title updated; do
|
|
368
|
-
local confidence
|
|
369
|
-
if [[ $score -ge 80 ]]; then
|
|
370
|
-
confidence="${GREEN}high${NC}"
|
|
371
|
-
elif [[ $score -ge 40 ]]; then
|
|
372
|
-
confidence="${YELLOW}medium${NC}"
|
|
373
|
-
else
|
|
374
|
-
confidence="${DIM}low${NC}"
|
|
375
|
-
fi
|
|
376
|
-
echo -e " - ${BOLD}$title${NC}"
|
|
377
|
-
echo -e " ID: $session_id"
|
|
378
|
-
echo -e " Updated: $updated | Confidence: $confidence"
|
|
379
|
-
done <<< "$matches"
|
|
380
|
-
else
|
|
381
|
-
echo -e " ${DIM}No matching sessions found${NC}"
|
|
382
|
-
fi
|
|
383
|
-
fi
|
|
384
|
-
|
|
385
|
-
echo ""
|
|
386
|
-
echo -e " ${DIM}─────────────────────────────────────────${NC}"
|
|
387
|
-
echo ""
|
|
388
|
-
fi
|
|
389
|
-
worktree_path=""
|
|
390
|
-
worktree_branch=""
|
|
391
|
-
fi
|
|
392
|
-
done < <(git worktree list --porcelain; echo "")
|
|
393
|
-
|
|
394
|
-
if [[ $count -eq 0 ]]; then
|
|
395
|
-
echo -e "${GREEN}No linked worktrees found (only main)${NC}"
|
|
396
|
-
return 0
|
|
397
|
-
fi
|
|
398
|
-
|
|
399
|
-
echo ""
|
|
400
|
-
echo -e "${BOLD}To resume work:${NC}"
|
|
401
|
-
echo " 1. cd <worktree-path>" || exit
|
|
402
|
-
echo " 2. Open OpenCode (it will show recent sessions)"
|
|
403
|
-
echo " 3. Use Ctrl+P to browse sessions by title"
|
|
404
|
-
echo ""
|
|
405
|
-
echo -e "${DIM}Tip: Session names sync with branch names when using session-rename_sync_branch${NC}"
|
|
406
|
-
|
|
407
|
-
return 0
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
cmd_open() {
|
|
411
|
-
echo -e "${BOLD}Interactive Worktree Session Opener${NC}"
|
|
412
|
-
echo ""
|
|
413
|
-
|
|
414
|
-
local repo_root
|
|
415
|
-
repo_root=$(get_repo_root)
|
|
416
|
-
|
|
417
|
-
if [[ -z "$repo_root" ]]; then
|
|
418
|
-
echo -e "${RED}Error: Not in a git repository${NC}"
|
|
419
|
-
return 1
|
|
420
|
-
fi
|
|
421
|
-
|
|
422
|
-
# Collect worktrees
|
|
423
|
-
local worktrees=()
|
|
424
|
-
local branches=()
|
|
425
|
-
local worktree_path=""
|
|
426
|
-
local worktree_branch=""
|
|
427
|
-
|
|
428
|
-
while IFS= read -r line; do
|
|
429
|
-
if [[ "$line" =~ ^worktree\ (.+)$ ]]; then
|
|
430
|
-
worktree_path="${BASH_REMATCH[1]}"
|
|
431
|
-
elif [[ "$line" =~ ^branch\ refs/heads/(.+)$ ]]; then
|
|
432
|
-
worktree_branch="${BASH_REMATCH[1]}"
|
|
433
|
-
elif [[ -z "$line" ]]; then
|
|
434
|
-
if [[ -n "$worktree_path" ]] && [[ -n "$worktree_branch" ]]; then
|
|
435
|
-
if [[ "$worktree_branch" != "main" ]] && [[ "$worktree_branch" != "master" ]]; then
|
|
436
|
-
worktrees+=("$worktree_path")
|
|
437
|
-
branches+=("$worktree_branch")
|
|
438
|
-
fi
|
|
439
|
-
fi
|
|
440
|
-
worktree_path=""
|
|
441
|
-
worktree_branch=""
|
|
442
|
-
fi
|
|
443
|
-
done < <(git worktree list --porcelain; echo "")
|
|
444
|
-
|
|
445
|
-
if [[ ${#worktrees[@]} -eq 0 ]]; then
|
|
446
|
-
echo -e "${GREEN}No linked worktrees to open${NC}"
|
|
447
|
-
return 0
|
|
448
|
-
fi
|
|
449
|
-
|
|
450
|
-
# Display options
|
|
451
|
-
echo "Select a worktree to open:"
|
|
452
|
-
echo ""
|
|
453
|
-
for i in "${!branches[@]}"; do
|
|
454
|
-
echo " $((i+1)). ${branches[$i]}"
|
|
455
|
-
echo " ${worktrees[$i]}"
|
|
456
|
-
done
|
|
457
|
-
echo ""
|
|
458
|
-
echo " 0. Cancel"
|
|
459
|
-
echo ""
|
|
460
|
-
|
|
461
|
-
read -rp "Enter number: " choice
|
|
462
|
-
|
|
463
|
-
if [[ "$choice" == "0" ]] || [[ -z "$choice" ]]; then
|
|
464
|
-
echo "Cancelled"
|
|
465
|
-
return 0
|
|
466
|
-
fi
|
|
467
|
-
|
|
468
|
-
# Validate input is a number
|
|
469
|
-
if ! [[ "$choice" =~ ^[0-9]+$ ]]; then
|
|
470
|
-
echo -e "${RED}Invalid input: please enter a number${NC}"
|
|
471
|
-
return 1
|
|
472
|
-
fi
|
|
473
|
-
|
|
474
|
-
local index=$((choice - 1))
|
|
475
|
-
if [[ $index -lt 0 ]] || [[ $index -ge ${#worktrees[@]} ]]; then
|
|
476
|
-
echo -e "${RED}Invalid selection${NC}"
|
|
477
|
-
return 1
|
|
478
|
-
fi
|
|
479
|
-
|
|
480
|
-
local selected_path="${worktrees[$index]}"
|
|
481
|
-
local selected_branch="${branches[$index]}"
|
|
482
|
-
|
|
483
|
-
echo ""
|
|
484
|
-
echo -e "${BLUE}Opening worktree: $selected_branch${NC}"
|
|
485
|
-
echo ""
|
|
486
|
-
|
|
487
|
-
# Try to launch OpenCode (CLI first, then app bundle)
|
|
488
|
-
if command -v opencode &>/dev/null; then
|
|
489
|
-
echo "Launching OpenCode via CLI..."
|
|
490
|
-
(cd "$selected_path" && opencode .) &
|
|
491
|
-
elif [[ "$(uname)" == "Darwin" ]] && { [[ -d "/Applications/OpenCode.app" ]] || [[ -d "$HOME/Applications/OpenCode.app" ]]; }; then
|
|
492
|
-
echo "Launching OpenCode..."
|
|
493
|
-
open -a "OpenCode" "$selected_path"
|
|
494
|
-
elif command -v xdg-open &>/dev/null; then
|
|
495
|
-
echo "Opening with default application..."
|
|
496
|
-
xdg-open "$selected_path"
|
|
497
|
-
else
|
|
498
|
-
echo "OpenCode not found. To open manually:"
|
|
499
|
-
echo " cd $selected_path"
|
|
500
|
-
echo " opencode . # or launch your preferred editor"
|
|
501
|
-
fi
|
|
502
|
-
|
|
503
|
-
return 0
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
cmd_help() {
|
|
507
|
-
cat << 'EOF'
|
|
508
|
-
Worktree Session Mapper - Find OpenCode sessions for worktrees
|
|
509
|
-
|
|
510
|
-
OVERVIEW
|
|
511
|
-
Maps git worktrees to likely OpenCode sessions by analyzing:
|
|
512
|
-
- Session titles matching branch names
|
|
513
|
-
- Temporal proximity to branch creation
|
|
514
|
-
- Keyword matching from branch names
|
|
515
|
-
|
|
516
|
-
COMMANDS
|
|
517
|
-
list List all worktrees with likely matching sessions (default)
|
|
518
|
-
open Interactive selection to open a worktree in OpenCode
|
|
519
|
-
help Show this help
|
|
520
|
-
|
|
521
|
-
EXAMPLES
|
|
522
|
-
# See all worktrees and their likely sessions
|
|
523
|
-
worktree-sessions.sh list
|
|
524
|
-
|
|
525
|
-
# Interactively open a worktree
|
|
526
|
-
worktree-sessions.sh open
|
|
527
|
-
|
|
528
|
-
HOW MATCHING WORKS
|
|
529
|
-
Sessions are scored based on:
|
|
530
|
-
- Exact branch name in title: +100 points
|
|
531
|
-
- Branch slug in title: +80 points
|
|
532
|
-
- Branch name (without type/) in title: +60 points
|
|
533
|
-
- Key terms from branch: +20 points each
|
|
534
|
-
- Created within 1 hour of branch: +40 points
|
|
535
|
-
- Created within 4 hours of branch: +20 points
|
|
536
|
-
|
|
537
|
-
Confidence levels:
|
|
538
|
-
- High (80+): Very likely the correct session
|
|
539
|
-
- Medium (40-79): Probably related
|
|
540
|
-
- Low (<40): Possible match
|
|
541
|
-
|
|
542
|
-
TIPS
|
|
543
|
-
- Use session-rename_sync_branch tool after creating branches
|
|
544
|
-
- Session titles that match branch names are easier to find
|
|
545
|
-
- OpenCode stores sessions per-project, not per-worktree
|
|
546
|
-
|
|
547
|
-
EOF
|
|
548
|
-
return 0
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
# =============================================================================
|
|
552
|
-
# MAIN
|
|
553
|
-
# =============================================================================
|
|
554
|
-
|
|
555
|
-
main() {
|
|
556
|
-
local command="${1:-list}"
|
|
557
|
-
shift || true
|
|
558
|
-
|
|
559
|
-
case "$command" in
|
|
560
|
-
list|ls)
|
|
561
|
-
cmd_list "$@"
|
|
562
|
-
;;
|
|
563
|
-
open|o)
|
|
564
|
-
cmd_open "$@"
|
|
565
|
-
;;
|
|
566
|
-
help|--help|-h)
|
|
567
|
-
cmd_help
|
|
568
|
-
;;
|
|
569
|
-
*)
|
|
570
|
-
echo -e "${RED}Unknown command: $command${NC}"
|
|
571
|
-
echo "Run 'worktree-sessions.sh help' for usage"
|
|
572
|
-
return 1
|
|
573
|
-
;;
|
|
574
|
-
esac
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
main "$@"
|