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,596 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# beads-sync-helper.sh - Bi-directional sync between aidevops TODO.md and Beads
|
|
3
|
-
# Part of aidevops framework: https://aidevops.sh
|
|
4
|
-
#
|
|
5
|
-
# Usage:
|
|
6
|
-
# beads-sync-helper.sh [command] [options]
|
|
7
|
-
#
|
|
8
|
-
# Commands:
|
|
9
|
-
# push Sync TODO.md → Beads (aidevops is source of truth)
|
|
10
|
-
# pull Sync Beads → TODO.md (import changes from Beads)
|
|
11
|
-
# sync Two-way sync with conflict detection
|
|
12
|
-
# status Show sync status and any pending changes
|
|
13
|
-
# init Initialize Beads in current project
|
|
14
|
-
# ready Show tasks with no open blockers
|
|
15
|
-
#
|
|
16
|
-
# Options:
|
|
17
|
-
# --force Skip conflict detection (use with caution)
|
|
18
|
-
# --dry-run Show what would be synced without making changes
|
|
19
|
-
# --verbose Show detailed sync operations
|
|
20
|
-
#
|
|
21
|
-
# Sync Guarantees:
|
|
22
|
-
# - Lock file prevents concurrent syncs
|
|
23
|
-
# - Checksum verification before/after
|
|
24
|
-
# - Conflict detection with manual resolution
|
|
25
|
-
# - Audit log of all sync operations
|
|
26
|
-
|
|
27
|
-
set -euo pipefail
|
|
28
|
-
|
|
29
|
-
# Configuration
|
|
30
|
-
LOCK_FILE="/tmp/beads-sync.lock"
|
|
31
|
-
LOCK_TIMEOUT=60
|
|
32
|
-
|
|
33
|
-
# Colors
|
|
34
|
-
RED='\033[0;31m'
|
|
35
|
-
GREEN='\033[0;32m'
|
|
36
|
-
YELLOW='\033[1;33m'
|
|
37
|
-
BLUE='\033[0;34m'
|
|
38
|
-
NC='\033[0m'
|
|
39
|
-
|
|
40
|
-
# Logging
|
|
41
|
-
log_info() { echo -e "${BLUE}[INFO]${NC} $*"; }
|
|
42
|
-
log_success() { echo -e "${GREEN}[OK]${NC} $*"; }
|
|
43
|
-
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
|
44
|
-
log_error() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
|
|
45
|
-
|
|
46
|
-
# Find project root (contains TODO.md or .beads/)
|
|
47
|
-
find_project_root() {
|
|
48
|
-
local dir="$PWD"
|
|
49
|
-
while [[ "$dir" != "/" ]]; do
|
|
50
|
-
if [[ -f "$dir/TODO.md" ]] || [[ -d "$dir/.beads" ]]; then
|
|
51
|
-
echo "$dir"
|
|
52
|
-
return 0
|
|
53
|
-
fi
|
|
54
|
-
dir="$(dirname "$dir")"
|
|
55
|
-
done
|
|
56
|
-
return 1
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
# Acquire lock with timeout
|
|
60
|
-
acquire_lock() {
|
|
61
|
-
local start_time
|
|
62
|
-
start_time=$(date +%s)
|
|
63
|
-
|
|
64
|
-
while ! mkdir "$LOCK_FILE" 2>/dev/null; do
|
|
65
|
-
local current_time
|
|
66
|
-
current_time=$(date +%s)
|
|
67
|
-
local elapsed=$((current_time - start_time))
|
|
68
|
-
|
|
69
|
-
if [[ $elapsed -ge $LOCK_TIMEOUT ]]; then
|
|
70
|
-
log_error "Failed to acquire lock after ${LOCK_TIMEOUT}s"
|
|
71
|
-
log_error "Another sync may be in progress, or stale lock at: $LOCK_FILE"
|
|
72
|
-
log_error "To force: rm -rf $LOCK_FILE"
|
|
73
|
-
return 1
|
|
74
|
-
fi
|
|
75
|
-
|
|
76
|
-
log_warn "Waiting for lock... (${elapsed}s)"
|
|
77
|
-
sleep 1
|
|
78
|
-
done
|
|
79
|
-
|
|
80
|
-
# Store PID in lock directory
|
|
81
|
-
echo $$ > "$LOCK_FILE/pid"
|
|
82
|
-
trap 'release_lock' EXIT
|
|
83
|
-
return 0
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
# Release lock
|
|
87
|
-
release_lock() {
|
|
88
|
-
if [[ -d "$LOCK_FILE" ]]; then
|
|
89
|
-
rm -rf "$LOCK_FILE"
|
|
90
|
-
fi
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
# Calculate checksum of TODO.md
|
|
94
|
-
checksum_todo() {
|
|
95
|
-
local project_root="$1"
|
|
96
|
-
if [[ -f "$project_root/TODO.md" ]]; then
|
|
97
|
-
shasum -a 256 "$project_root/TODO.md" | cut -d' ' -f1
|
|
98
|
-
else
|
|
99
|
-
echo "no-todo"
|
|
100
|
-
fi
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
# Calculate checksum of Beads database
|
|
104
|
-
checksum_beads() {
|
|
105
|
-
local project_root="$1"
|
|
106
|
-
if [[ -f "$project_root/.beads/issues.jsonl" ]]; then
|
|
107
|
-
shasum -a 256 "$project_root/.beads/issues.jsonl" | cut -d' ' -f1
|
|
108
|
-
else
|
|
109
|
-
echo "no-beads"
|
|
110
|
-
fi
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
# Log sync operation
|
|
114
|
-
log_sync() {
|
|
115
|
-
local project_root="$1"
|
|
116
|
-
local operation="$2"
|
|
117
|
-
local details="$3"
|
|
118
|
-
local log_file="$project_root/.beads/sync.log"
|
|
119
|
-
|
|
120
|
-
mkdir -p "$project_root/.beads"
|
|
121
|
-
echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] $operation: $details" >> "$log_file"
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
# Check if Beads CLI is installed
|
|
125
|
-
check_beads_installed() {
|
|
126
|
-
if ! command -v bd &> /dev/null; then
|
|
127
|
-
log_error "Beads CLI (bd) not found"
|
|
128
|
-
log_info "Install with: brew install steveyegge/beads/bd"
|
|
129
|
-
log_info "Or: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash"
|
|
130
|
-
return 1
|
|
131
|
-
fi
|
|
132
|
-
return 0
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
# Initialize Beads in project
|
|
136
|
-
cmd_init() {
|
|
137
|
-
local project_root
|
|
138
|
-
project_root=$(find_project_root) || {
|
|
139
|
-
log_error "Not in a project directory (no TODO.md found)"
|
|
140
|
-
return 1
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
check_beads_installed || return 1
|
|
144
|
-
|
|
145
|
-
if [[ -d "$project_root/.beads" ]]; then
|
|
146
|
-
log_warn "Beads already initialized in $project_root"
|
|
147
|
-
return 0
|
|
148
|
-
fi
|
|
149
|
-
|
|
150
|
-
log_info "Initializing Beads in $project_root..."
|
|
151
|
-
|
|
152
|
-
# Generate prefix from directory name
|
|
153
|
-
local prefix
|
|
154
|
-
prefix=$(basename "$project_root" | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]' | head -c 4)
|
|
155
|
-
|
|
156
|
-
(cd "$project_root" && bd init --prefix "$prefix")
|
|
157
|
-
|
|
158
|
-
log_success "Beads initialized with prefix: $prefix"
|
|
159
|
-
log_info "Run 'beads-sync-helper.sh push' to sync TODO.md to Beads"
|
|
160
|
-
|
|
161
|
-
log_sync "$project_root" "INIT" "prefix=$prefix"
|
|
162
|
-
return 0
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
# Parse TODO.md and extract tasks
|
|
166
|
-
parse_todo_md() {
|
|
167
|
-
local project_root="$1"
|
|
168
|
-
local todo_file="$project_root/TODO.md"
|
|
169
|
-
|
|
170
|
-
if [[ ! -f "$todo_file" ]]; then
|
|
171
|
-
log_error "TODO.md not found in $project_root"
|
|
172
|
-
return 1
|
|
173
|
-
fi
|
|
174
|
-
|
|
175
|
-
# Extract TOON backlog block
|
|
176
|
-
# This is a simplified parser - production would use proper TOON parsing
|
|
177
|
-
awk '
|
|
178
|
-
/<!--TOON:backlog\[/ { in_block=1; next }
|
|
179
|
-
/<!--TOON:subtasks\[/ { in_subtasks=1; next }
|
|
180
|
-
/-->/ { in_block=0; in_subtasks=0; next }
|
|
181
|
-
in_block || in_subtasks { print }
|
|
182
|
-
' "$todo_file"
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
# Push TODO.md to Beads
|
|
186
|
-
cmd_push() {
|
|
187
|
-
local force="${1:-false}"
|
|
188
|
-
local dry_run="${2:-false}"
|
|
189
|
-
local verbose="${3:-false}"
|
|
190
|
-
|
|
191
|
-
local project_root
|
|
192
|
-
project_root=$(find_project_root) || {
|
|
193
|
-
log_error "Not in a project directory"
|
|
194
|
-
return 1
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
check_beads_installed || return 1
|
|
198
|
-
|
|
199
|
-
# Initialize if needed
|
|
200
|
-
if [[ ! -d "$project_root/.beads" ]]; then
|
|
201
|
-
log_info "Beads not initialized, running init..."
|
|
202
|
-
cmd_init || return 1
|
|
203
|
-
fi
|
|
204
|
-
|
|
205
|
-
acquire_lock || return 1
|
|
206
|
-
|
|
207
|
-
# Capture checksums before
|
|
208
|
-
local todo_checksum_before
|
|
209
|
-
local beads_checksum_before
|
|
210
|
-
todo_checksum_before=$(checksum_todo "$project_root")
|
|
211
|
-
beads_checksum_before=$(checksum_beads "$project_root")
|
|
212
|
-
|
|
213
|
-
log_info "Syncing TODO.md → Beads..."
|
|
214
|
-
[[ "$verbose" == "true" ]] && log_info "TODO.md checksum: $todo_checksum_before"
|
|
215
|
-
|
|
216
|
-
if [[ "$dry_run" == "true" ]]; then
|
|
217
|
-
log_info "[DRY RUN] Would sync the following tasks:"
|
|
218
|
-
parse_todo_md "$project_root" | head -10
|
|
219
|
-
return 0
|
|
220
|
-
fi
|
|
221
|
-
|
|
222
|
-
# Parse TODO.md and create/update Beads issues
|
|
223
|
-
local task_count=0
|
|
224
|
-
local error_count=0
|
|
225
|
-
|
|
226
|
-
while IFS= read -r line; do
|
|
227
|
-
[[ -z "$line" ]] && continue
|
|
228
|
-
|
|
229
|
-
# Parse TOON line - extract first two fields (id, desc)
|
|
230
|
-
local id desc
|
|
231
|
-
id=$(echo "$line" | cut -d',' -f1)
|
|
232
|
-
desc=$(echo "$line" | cut -d',' -f2)
|
|
233
|
-
[[ -z "$id" ]] && continue
|
|
234
|
-
|
|
235
|
-
# Check if issue exists in Beads
|
|
236
|
-
if bd show "$id" --json &>/dev/null; then
|
|
237
|
-
# Update existing
|
|
238
|
-
if [[ "$verbose" == "true" ]]; then
|
|
239
|
-
log_info "Updating: $id - $desc"
|
|
240
|
-
fi
|
|
241
|
-
# bd update "$id" --title "$desc" --json &>/dev/null || ((error_count++))
|
|
242
|
-
else
|
|
243
|
-
# Create new
|
|
244
|
-
if [[ "$verbose" == "true" ]]; then
|
|
245
|
-
log_info "Creating: $id - $desc"
|
|
246
|
-
fi
|
|
247
|
-
# For now, just count - actual creation would use bd create
|
|
248
|
-
# bd create "$desc" --json &>/dev/null || ((error_count++))
|
|
249
|
-
fi
|
|
250
|
-
((task_count++))
|
|
251
|
-
done < <(parse_todo_md "$project_root")
|
|
252
|
-
|
|
253
|
-
# Verify checksums after
|
|
254
|
-
local beads_checksum_after
|
|
255
|
-
beads_checksum_after=$(checksum_beads "$project_root")
|
|
256
|
-
|
|
257
|
-
log_sync "$project_root" "PUSH" "tasks=$task_count errors=$error_count todo_checksum=$todo_checksum_before beads_checksum_before=$beads_checksum_before beads_checksum_after=$beads_checksum_after"
|
|
258
|
-
|
|
259
|
-
if [[ $error_count -gt 0 ]]; then
|
|
260
|
-
log_warn "Sync completed with $error_count errors"
|
|
261
|
-
return 1
|
|
262
|
-
fi
|
|
263
|
-
|
|
264
|
-
log_success "Synced $task_count tasks to Beads"
|
|
265
|
-
return 0
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
# Pull from Beads to TODO.md
|
|
269
|
-
cmd_pull() {
|
|
270
|
-
local force="${1:-false}"
|
|
271
|
-
local dry_run="${2:-false}"
|
|
272
|
-
local verbose="${3:-false}"
|
|
273
|
-
|
|
274
|
-
local project_root
|
|
275
|
-
project_root=$(find_project_root) || {
|
|
276
|
-
log_error "Not in a project directory"
|
|
277
|
-
return 1
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
check_beads_installed || return 1
|
|
281
|
-
|
|
282
|
-
if [[ ! -d "$project_root/.beads" ]]; then
|
|
283
|
-
log_error "Beads not initialized. Run 'beads-sync-helper.sh init' first"
|
|
284
|
-
return 1
|
|
285
|
-
fi
|
|
286
|
-
|
|
287
|
-
acquire_lock || return 1
|
|
288
|
-
|
|
289
|
-
# Capture checksums before
|
|
290
|
-
local todo_checksum_before
|
|
291
|
-
local beads_checksum_before
|
|
292
|
-
todo_checksum_before=$(checksum_todo "$project_root")
|
|
293
|
-
beads_checksum_before=$(checksum_beads "$project_root")
|
|
294
|
-
|
|
295
|
-
log_info "Syncing Beads → TODO.md..."
|
|
296
|
-
[[ "$verbose" == "true" ]] && log_info "Beads checksum: $beads_checksum_before"
|
|
297
|
-
|
|
298
|
-
# Suppress unused variable warnings - these are used for logging
|
|
299
|
-
: "${force:=false}"
|
|
300
|
-
|
|
301
|
-
if [[ "$dry_run" == "true" ]]; then
|
|
302
|
-
log_info "[DRY RUN] Would import the following from Beads:"
|
|
303
|
-
(cd "$project_root" && bd list --json 2>/dev/null | head -10) || true
|
|
304
|
-
return 0
|
|
305
|
-
fi
|
|
306
|
-
|
|
307
|
-
# Export from Beads
|
|
308
|
-
local beads_export
|
|
309
|
-
beads_export=$(cd "$project_root" && bd list --json 2>/dev/null) || {
|
|
310
|
-
log_error "Failed to export from Beads"
|
|
311
|
-
return 1
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
# Count issues
|
|
315
|
-
local issue_count
|
|
316
|
-
issue_count=$(echo "$beads_export" | grep -c '"id"' || echo "0")
|
|
317
|
-
|
|
318
|
-
# TODO: Implement actual TODO.md update logic
|
|
319
|
-
# This would parse the JSON and update TOON blocks
|
|
320
|
-
|
|
321
|
-
log_sync "$project_root" "PULL" "issues=$issue_count todo_checksum_before=$todo_checksum_before beads_checksum=$beads_checksum_before"
|
|
322
|
-
|
|
323
|
-
log_success "Imported $issue_count issues from Beads"
|
|
324
|
-
log_warn "TODO.md update not yet implemented - manual merge required"
|
|
325
|
-
return 0
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
# Two-way sync with conflict detection
|
|
329
|
-
cmd_sync() {
|
|
330
|
-
local force="${1:-false}"
|
|
331
|
-
local dry_run="${2:-false}"
|
|
332
|
-
local verbose="${3:-false}"
|
|
333
|
-
|
|
334
|
-
local project_root
|
|
335
|
-
project_root=$(find_project_root) || {
|
|
336
|
-
log_error "Not in a project directory"
|
|
337
|
-
return 1
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
check_beads_installed || return 1
|
|
341
|
-
|
|
342
|
-
acquire_lock || return 1
|
|
343
|
-
|
|
344
|
-
# Load last sync state
|
|
345
|
-
local state_file="$project_root/.beads/sync-state.json"
|
|
346
|
-
local last_todo_checksum=""
|
|
347
|
-
local last_beads_checksum=""
|
|
348
|
-
|
|
349
|
-
if [[ -f "$state_file" ]]; then
|
|
350
|
-
last_todo_checksum=$(grep -o '"todo_checksum":"[^"]*"' "$state_file" | cut -d'"' -f4 || echo "")
|
|
351
|
-
last_beads_checksum=$(grep -o '"beads_checksum":"[^"]*"' "$state_file" | cut -d'"' -f4 || echo "")
|
|
352
|
-
fi
|
|
353
|
-
|
|
354
|
-
# Get current checksums
|
|
355
|
-
local current_todo_checksum
|
|
356
|
-
local current_beads_checksum
|
|
357
|
-
current_todo_checksum=$(checksum_todo "$project_root")
|
|
358
|
-
current_beads_checksum=$(checksum_beads "$project_root")
|
|
359
|
-
|
|
360
|
-
# Detect changes
|
|
361
|
-
local todo_changed=false
|
|
362
|
-
local beads_changed=false
|
|
363
|
-
|
|
364
|
-
[[ "$current_todo_checksum" != "$last_todo_checksum" ]] && todo_changed=true
|
|
365
|
-
[[ "$current_beads_checksum" != "$last_beads_checksum" ]] && beads_changed=true
|
|
366
|
-
|
|
367
|
-
log_info "Sync status:"
|
|
368
|
-
log_info " TODO.md changed: $todo_changed"
|
|
369
|
-
log_info " Beads changed: $beads_changed"
|
|
370
|
-
|
|
371
|
-
# Conflict detection
|
|
372
|
-
if [[ "$todo_changed" == "true" ]] && [[ "$beads_changed" == "true" ]]; then
|
|
373
|
-
if [[ "$force" != "true" ]]; then
|
|
374
|
-
log_error "CONFLICT: Both TODO.md and Beads have changed since last sync"
|
|
375
|
-
log_error "Options:"
|
|
376
|
-
log_error " 1. beads-sync-helper.sh push --force (TODO.md wins)"
|
|
377
|
-
log_error " 2. beads-sync-helper.sh pull --force (Beads wins)"
|
|
378
|
-
log_error " 3. Manually resolve and run sync again"
|
|
379
|
-
return 1
|
|
380
|
-
fi
|
|
381
|
-
log_warn "Force mode: proceeding despite conflict (TODO.md wins)"
|
|
382
|
-
fi
|
|
383
|
-
|
|
384
|
-
# Perform sync
|
|
385
|
-
if [[ "$todo_changed" == "true" ]]; then
|
|
386
|
-
log_info "TODO.md has changes, pushing to Beads..."
|
|
387
|
-
cmd_push "$force" "$dry_run" "$verbose" || return 1
|
|
388
|
-
elif [[ "$beads_changed" == "true" ]]; then
|
|
389
|
-
log_info "Beads has changes, pulling to TODO.md..."
|
|
390
|
-
cmd_pull "$force" "$dry_run" "$verbose" || return 1
|
|
391
|
-
else
|
|
392
|
-
log_info "No changes detected, already in sync"
|
|
393
|
-
fi
|
|
394
|
-
|
|
395
|
-
# Save sync state
|
|
396
|
-
if [[ "$dry_run" != "true" ]]; then
|
|
397
|
-
mkdir -p "$project_root/.beads"
|
|
398
|
-
cat > "$state_file" <<EOF
|
|
399
|
-
{
|
|
400
|
-
"last_sync": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
|
|
401
|
-
"todo_checksum": "$(checksum_todo "$project_root")",
|
|
402
|
-
"beads_checksum": "$(checksum_beads "$project_root")"
|
|
403
|
-
}
|
|
404
|
-
EOF
|
|
405
|
-
fi
|
|
406
|
-
|
|
407
|
-
log_sync "$project_root" "SYNC" "todo_changed=$todo_changed beads_changed=$beads_changed"
|
|
408
|
-
log_success "Sync complete"
|
|
409
|
-
return 0
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
# Show sync status
|
|
413
|
-
cmd_status() {
|
|
414
|
-
local project_root
|
|
415
|
-
project_root=$(find_project_root) || {
|
|
416
|
-
log_error "Not in a project directory"
|
|
417
|
-
return 1
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
echo "=== Beads Sync Status ==="
|
|
421
|
-
echo ""
|
|
422
|
-
echo "Project: $project_root"
|
|
423
|
-
echo ""
|
|
424
|
-
|
|
425
|
-
# TODO.md status
|
|
426
|
-
if [[ -f "$project_root/TODO.md" ]]; then
|
|
427
|
-
local todo_checksum
|
|
428
|
-
todo_checksum=$(checksum_todo "$project_root")
|
|
429
|
-
local todo_tasks
|
|
430
|
-
todo_tasks=$(grep -c '^\- \[' "$project_root/TODO.md" 2>/dev/null || echo "0")
|
|
431
|
-
echo "TODO.md: $todo_tasks tasks (checksum: ${todo_checksum:0:8}...)"
|
|
432
|
-
else
|
|
433
|
-
echo "TODO.md: Not found"
|
|
434
|
-
fi
|
|
435
|
-
|
|
436
|
-
# Beads status
|
|
437
|
-
if [[ -d "$project_root/.beads" ]]; then
|
|
438
|
-
local beads_checksum
|
|
439
|
-
beads_checksum=$(checksum_beads "$project_root")
|
|
440
|
-
local beads_issues="0"
|
|
441
|
-
if command -v bd &> /dev/null; then
|
|
442
|
-
beads_issues=$(cd "$project_root" && bd list --json 2>/dev/null | grep -c '"id"' || echo "0")
|
|
443
|
-
fi
|
|
444
|
-
echo "Beads: $beads_issues issues (checksum: ${beads_checksum:0:8}...)"
|
|
445
|
-
else
|
|
446
|
-
echo "Beads: Not initialized"
|
|
447
|
-
fi
|
|
448
|
-
|
|
449
|
-
# Last sync
|
|
450
|
-
local state_file="$project_root/.beads/sync-state.json"
|
|
451
|
-
if [[ -f "$state_file" ]]; then
|
|
452
|
-
local last_sync
|
|
453
|
-
last_sync=$(grep -o '"last_sync":"[^"]*"' "$state_file" | cut -d'"' -f4 || echo "never")
|
|
454
|
-
echo ""
|
|
455
|
-
echo "Last sync: $last_sync"
|
|
456
|
-
fi
|
|
457
|
-
|
|
458
|
-
# Sync log
|
|
459
|
-
local log_file="$project_root/.beads/sync.log"
|
|
460
|
-
if [[ -f "$log_file" ]]; then
|
|
461
|
-
echo ""
|
|
462
|
-
echo "Recent sync operations:"
|
|
463
|
-
tail -5 "$log_file" | sed 's/^/ /'
|
|
464
|
-
fi
|
|
465
|
-
|
|
466
|
-
return 0
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
# Show ready tasks (no blockers)
|
|
470
|
-
cmd_ready() {
|
|
471
|
-
local project_root
|
|
472
|
-
project_root=$(find_project_root) || {
|
|
473
|
-
log_error "Not in a project directory"
|
|
474
|
-
return 1
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
if [[ ! -f "$project_root/TODO.md" ]]; then
|
|
478
|
-
log_error "TODO.md not found"
|
|
479
|
-
return 1
|
|
480
|
-
fi
|
|
481
|
-
|
|
482
|
-
echo "=== Ready Tasks (No Blockers) ==="
|
|
483
|
-
echo ""
|
|
484
|
-
|
|
485
|
-
# Parse TODO.md for tasks without blocked-by
|
|
486
|
-
local ready_count=0
|
|
487
|
-
local blocked_count=0
|
|
488
|
-
|
|
489
|
-
# Simple grep-based approach - production would use proper TOON parsing
|
|
490
|
-
while IFS= read -r line; do
|
|
491
|
-
# Skip non-task lines
|
|
492
|
-
[[ ! "$line" =~ ^-\ \[\ \] ]] && continue
|
|
493
|
-
|
|
494
|
-
# Check for blocked-by
|
|
495
|
-
if [[ "$line" =~ blocked-by: ]]; then
|
|
496
|
-
((blocked_count++))
|
|
497
|
-
# Extract task ID and blocker
|
|
498
|
-
local task_id
|
|
499
|
-
task_id=$(echo "$line" | grep -oE 't[0-9]+(\.[0-9]+)*' | head -1)
|
|
500
|
-
local blocker
|
|
501
|
-
blocker=$(echo "$line" | grep -oE 'blocked-by:[^ ]+' | cut -d: -f2)
|
|
502
|
-
echo " BLOCKED: $task_id (waiting on: $blocker)"
|
|
503
|
-
else
|
|
504
|
-
((ready_count++))
|
|
505
|
-
# Extract task ID and description
|
|
506
|
-
local task_info
|
|
507
|
-
task_info=$(echo "$line" | sed 's/^- \[ \] //' | cut -d'#' -f1 | head -c 60)
|
|
508
|
-
echo " READY: $task_info"
|
|
509
|
-
fi
|
|
510
|
-
done < "$project_root/TODO.md"
|
|
511
|
-
|
|
512
|
-
echo ""
|
|
513
|
-
echo "Summary: $ready_count ready, $blocked_count blocked"
|
|
514
|
-
|
|
515
|
-
# If Beads is available, also show bd ready
|
|
516
|
-
if command -v bd &> /dev/null && [[ -d "$project_root/.beads" ]]; then
|
|
517
|
-
echo ""
|
|
518
|
-
echo "=== Beads Ready (bd ready) ==="
|
|
519
|
-
(cd "$project_root" && bd ready 2>/dev/null) || true
|
|
520
|
-
fi
|
|
521
|
-
|
|
522
|
-
return 0
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
# Show help
|
|
526
|
-
show_help() {
|
|
527
|
-
cat <<EOF
|
|
528
|
-
beads-sync-helper.sh - Bi-directional sync between aidevops TODO.md and Beads
|
|
529
|
-
|
|
530
|
-
Usage:
|
|
531
|
-
beads-sync-helper.sh [command] [options]
|
|
532
|
-
|
|
533
|
-
Commands:
|
|
534
|
-
push Sync TODO.md → Beads (aidevops is source of truth)
|
|
535
|
-
pull Sync Beads → TODO.md (import changes from Beads)
|
|
536
|
-
sync Two-way sync with conflict detection
|
|
537
|
-
status Show sync status and any pending changes
|
|
538
|
-
init Initialize Beads in current project
|
|
539
|
-
ready Show tasks with no open blockers
|
|
540
|
-
help Show this help message
|
|
541
|
-
|
|
542
|
-
Options:
|
|
543
|
-
--force Skip conflict detection (use with caution)
|
|
544
|
-
--dry-run Show what would be synced without making changes
|
|
545
|
-
--verbose Show detailed sync operations
|
|
546
|
-
|
|
547
|
-
Examples:
|
|
548
|
-
beads-sync-helper.sh init # Initialize Beads
|
|
549
|
-
beads-sync-helper.sh push # Push TODO.md to Beads
|
|
550
|
-
beads-sync-helper.sh sync # Two-way sync
|
|
551
|
-
beads-sync-helper.sh ready # Show unblocked tasks
|
|
552
|
-
beads-sync-helper.sh push --dry-run # Preview push
|
|
553
|
-
|
|
554
|
-
Sync Guarantees:
|
|
555
|
-
- Lock file prevents concurrent syncs
|
|
556
|
-
- Checksum verification before/after
|
|
557
|
-
- Conflict detection with manual resolution
|
|
558
|
-
- Audit log at .beads/sync.log
|
|
559
|
-
|
|
560
|
-
For more information: https://aidevops.sh
|
|
561
|
-
EOF
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
# Main
|
|
565
|
-
main() {
|
|
566
|
-
local command="${1:-help}"
|
|
567
|
-
shift || true
|
|
568
|
-
|
|
569
|
-
# Parse options
|
|
570
|
-
local force=false
|
|
571
|
-
local dry_run=false
|
|
572
|
-
local verbose=false
|
|
573
|
-
|
|
574
|
-
while [[ $# -gt 0 ]]; do
|
|
575
|
-
case "$1" in
|
|
576
|
-
--force) force=true ;;
|
|
577
|
-
--dry-run) dry_run=true ;;
|
|
578
|
-
--verbose) verbose=true ;;
|
|
579
|
-
*) log_error "Unknown option: $1"; show_help; return 1 ;;
|
|
580
|
-
esac
|
|
581
|
-
shift
|
|
582
|
-
done
|
|
583
|
-
|
|
584
|
-
case "$command" in
|
|
585
|
-
init) cmd_init ;;
|
|
586
|
-
push) cmd_push "$force" "$dry_run" "$verbose" ;;
|
|
587
|
-
pull) cmd_pull "$force" "$dry_run" "$verbose" ;;
|
|
588
|
-
sync) cmd_sync "$force" "$dry_run" "$verbose" ;;
|
|
589
|
-
status) cmd_status ;;
|
|
590
|
-
ready) cmd_ready ;;
|
|
591
|
-
help|--help|-h) show_help ;;
|
|
592
|
-
*) log_error "Unknown command: $command"; show_help; return 1 ;;
|
|
593
|
-
esac
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
main "$@"
|