pgserve 2.1.3 → 2.2.1
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/CHANGELOG.md +96 -0
- package/README.md +105 -1
- package/bin/autopg-wrapper.cjs +16 -0
- package/bin/pgserve-wrapper.cjs +32 -6
- package/bin/postgres-server.js +56 -0
- package/console/README.md +131 -0
- package/console/api.js +173 -0
- package/console/app.jsx +483 -0
- package/console/colors_and_type.css +227 -0
- package/console/components.jsx +167 -0
- package/console/console.css +1666 -0
- package/console/data.jsx +350 -0
- package/console/index.html +31 -0
- package/console/screens/databases.jsx +5 -0
- package/console/screens/health.jsx +5 -0
- package/console/screens/ingress.jsx +5 -0
- package/console/screens/optimizer.jsx +5 -0
- package/console/screens/rlm-sim.jsx +5 -0
- package/console/screens/rlm-trace.jsx +5 -0
- package/console/screens/security.jsx +5 -0
- package/console/screens/settings.jsx +611 -0
- package/console/screens/sql.jsx +5 -0
- package/console/screens/sync.jsx +5 -0
- package/console/screens/tables.jsx +5 -0
- package/console/tweaks-panel.jsx +425 -0
- package/package.json +14 -2
- package/scripts/postinstall.cjs +60 -0
- package/src/cli-config.cjs +310 -0
- package/src/cli-install.cjs +112 -11
- package/src/cli-restart.cjs +228 -0
- package/src/cli-ui.cjs +580 -0
- package/src/cluster.js +43 -38
- package/src/postgres.js +141 -19
- package/src/settings-loader.cjs +235 -0
- package/src/settings-migrate.cjs +212 -0
- package/src/settings-pg-args.cjs +146 -0
- package/src/settings-schema.cjs +422 -0
- package/src/settings-validator.cjs +416 -0
- package/src/settings-writer.cjs +288 -0
- package/src/upgrade/index.js +65 -0
- package/src/upgrade/runner.js +23 -0
- package/src/upgrade/steps/binary-cache-flush.js +67 -0
- package/src/upgrade/steps/consumer-signal.js +40 -0
- package/src/upgrade/steps/env-refresh.js +89 -0
- package/src/upgrade/steps/health-validate.js +53 -0
- package/src/upgrade/steps/plpgsql-resolve.js +66 -0
- package/src/upgrade/steps/port-reconcile.js +52 -0
- package/.claude/context/windows-debug.md +0 -119
- package/.genie/AGENTS.md +0 -15
- package/.genie/agents/README.md +0 -110
- package/.genie/agents/analyze.md +0 -176
- package/.genie/agents/forge.md +0 -290
- package/.genie/agents/garbage-cleaner.md +0 -324
- package/.genie/agents/garbage-collector.md +0 -596
- package/.genie/agents/github-issue-gc.md +0 -618
- package/.genie/agents/review.md +0 -380
- package/.genie/agents/semantic-analyzer/find-duplicates.md +0 -90
- package/.genie/agents/semantic-analyzer/find-orphans.md +0 -99
- package/.genie/agents/semantic-analyzer.md +0 -101
- package/.genie/agents/update.md +0 -182
- package/.genie/agents/wish.md +0 -357
- package/.genie/brainstorms/pgserve-v2/DESIGN.md +0 -174
- package/.genie/code/AGENTS.md +0 -694
- package/.genie/code/agents/audit/risk.md +0 -173
- package/.genie/code/agents/audit/security.md +0 -189
- package/.genie/code/agents/audit.md +0 -145
- package/.genie/code/agents/challenge.md +0 -230
- package/.genie/code/agents/change-reviewer.md +0 -295
- package/.genie/code/agents/code-garbage-collector.md +0 -425
- package/.genie/code/agents/code-quality.md +0 -410
- package/.genie/code/agents/commit-suggester.md +0 -255
- package/.genie/code/agents/commit.md +0 -124
- package/.genie/code/agents/consensus.md +0 -204
- package/.genie/code/agents/daily-standup.md +0 -722
- package/.genie/code/agents/docgen.md +0 -48
- package/.genie/code/agents/explore.md +0 -79
- package/.genie/code/agents/fix.md +0 -100
- package/.genie/code/agents/git/commit-advisory.md +0 -219
- package/.genie/code/agents/git/workflows/issue.md +0 -244
- package/.genie/code/agents/git/workflows/pr.md +0 -179
- package/.genie/code/agents/git/workflows/release.md +0 -460
- package/.genie/code/agents/git/workflows/report.md +0 -342
- package/.genie/code/agents/git.md +0 -432
- package/.genie/code/agents/implementor.md +0 -161
- package/.genie/code/agents/install.md +0 -515
- package/.genie/code/agents/issue-creator.md +0 -344
- package/.genie/code/agents/polish.md +0 -116
- package/.genie/code/agents/qa.md +0 -653
- package/.genie/code/agents/refactor.md +0 -294
- package/.genie/code/agents/release.md +0 -1129
- package/.genie/code/agents/roadmap.md +0 -885
- package/.genie/code/agents/tests.md +0 -557
- package/.genie/code/agents/tracer.md +0 -50
- package/.genie/code/agents/update/upstream-update.md +0 -85
- package/.genie/code/agents/update/versions/generic-update.md +0 -305
- package/.genie/code/agents/vibe.md +0 -1317
- package/.genie/code/spells/agent-configuration.md +0 -58
- package/.genie/code/spells/automated-rc-publishing.md +0 -106
- package/.genie/code/spells/branch-tracker-guidance.md +0 -28
- package/.genie/code/spells/debug.md +0 -320
- package/.genie/code/spells/emoji-naming-convention.md +0 -303
- package/.genie/code/spells/evidence-storage.md +0 -26
- package/.genie/code/spells/file-naming-rules.md +0 -35
- package/.genie/code/spells/forge-code-blueprints.md +0 -195
- package/.genie/code/spells/genie-integration.md +0 -153
- package/.genie/code/spells/publishing-protocol.md +0 -61
- package/.genie/code/spells/team-consultation-protocol.md +0 -284
- package/.genie/code/spells/tool-requirements.md +0 -20
- package/.genie/code/spells/triad-maintenance-protocol.md +0 -154
- package/.genie/code/teams/tech-council/council.md +0 -328
- package/.genie/code/teams/tech-council/jt.md +0 -352
- package/.genie/code/teams/tech-council/nayr.md +0 -305
- package/.genie/code/teams/tech-council/oettam.md +0 -375
- package/.genie/neurons/README.md +0 -193
- package/.genie/neurons/forge.md +0 -106
- package/.genie/neurons/genie.md +0 -63
- package/.genie/neurons/review.md +0 -106
- package/.genie/neurons/wish.md +0 -104
- package/.genie/product/README.md +0 -20
- package/.genie/product/cli-automation.md +0 -359
- package/.genie/product/environment.md +0 -60
- package/.genie/product/mission.md +0 -60
- package/.genie/product/roadmap.md +0 -44
- package/.genie/product/tech-stack.md +0 -34
- package/.genie/product/templates/context-template.md +0 -218
- package/.genie/product/templates/qa-done-report-template.md +0 -68
- package/.genie/product/templates/review-report-template.md +0 -89
- package/.genie/product/templates/wish-template.md +0 -120
- package/.genie/scripts/helpers/analyze-commit.js +0 -195
- package/.genie/scripts/helpers/bullet-counter.js +0 -194
- package/.genie/scripts/helpers/bullet-find.js +0 -289
- package/.genie/scripts/helpers/bullet-id.js +0 -244
- package/.genie/scripts/helpers/check-secrets.js +0 -237
- package/.genie/scripts/helpers/count-tokens.js +0 -200
- package/.genie/scripts/helpers/create-frontmatter.js +0 -456
- package/.genie/scripts/helpers/detect-markers.js +0 -293
- package/.genie/scripts/helpers/detect-todos.js +0 -267
- package/.genie/scripts/helpers/detect-unlabeled-blocks.js +0 -135
- package/.genie/scripts/helpers/embeddings.js +0 -344
- package/.genie/scripts/helpers/find-empty-sections.js +0 -158
- package/.genie/scripts/helpers/index.js +0 -319
- package/.genie/scripts/helpers/validate-frontmatter.js +0 -578
- package/.genie/scripts/helpers/validate-links.js +0 -207
- package/.genie/scripts/helpers/validate-paths.js +0 -373
- package/.genie/spells/README.md +0 -9
- package/.genie/spells/ace-protocol.md +0 -118
- package/.genie/spells/ask-one-at-a-time.md +0 -175
- package/.genie/spells/backup-analyzer.md +0 -542
- package/.genie/spells/blocker.md +0 -12
- package/.genie/spells/break-things-move-fast.md +0 -56
- package/.genie/spells/context-candidates.md +0 -72
- package/.genie/spells/context-critic.md +0 -51
- package/.genie/spells/defer-to-expertise.md +0 -278
- package/.genie/spells/delegate-dont-do.md +0 -292
- package/.genie/spells/error-investigation-protocol.md +0 -328
- package/.genie/spells/evidence-based-completion.md +0 -273
- package/.genie/spells/experiment.md +0 -65
- package/.genie/spells/file-creation-protocol.md +0 -229
- package/.genie/spells/forge-integration.md +0 -281
- package/.genie/spells/forge-orchestration.md +0 -514
- package/.genie/spells/gather-context.md +0 -18
- package/.genie/spells/global-health-check.md +0 -34
- package/.genie/spells/global-noop-roundtrip.md +0 -25
- package/.genie/spells/install-genie.md +0 -1232
- package/.genie/spells/install.md +0 -82
- package/.genie/spells/investigate-before-commit.md +0 -112
- package/.genie/spells/know-yourself.md +0 -288
- package/.genie/spells/learn.md +0 -828
- package/.genie/spells/mcp-diagnostic-protocol.md +0 -246
- package/.genie/spells/mcp-first.md +0 -124
- package/.genie/spells/multi-step-execution.md +0 -67
- package/.genie/spells/orchestration-boundary-protocol.md +0 -256
- package/.genie/spells/orchestrator-not-implementor.md +0 -189
- package/.genie/spells/prompt.md +0 -746
- package/.genie/spells/reflect.md +0 -404
- package/.genie/spells/routing-decision-matrix.md +0 -368
- package/.genie/spells/run-in-parallel.md +0 -12
- package/.genie/spells/session-state-updater-example.md +0 -196
- package/.genie/spells/session-state-updater.md +0 -220
- package/.genie/spells/track-long-running-tasks.md +0 -133
- package/.genie/spells/troubleshoot-infrastructure.md +0 -176
- package/.genie/spells/upgrade-genie.md +0 -415
- package/.genie/spells/url-presentation-protocol.md +0 -301
- package/.genie/spells/wish-initiation.md +0 -158
- package/.genie/spells/wish-issue-linkage.md +0 -410
- package/.genie/spells/wish-lifecycle.md +0 -100
- package/.genie/state/provider-status.json +0 -3
- package/.genie/state/version.json +0 -16
- package/.genie/wishes/canonical-pgserve-pm2-supervision/WISH.md +0 -290
- package/.genie/wishes/pgserve-v2/BRIEF-from-genie-pgserve.md +0 -99
- package/.genie/wishes/pgserve-v2/WISH.md +0 -442
- package/.genie/wishes/release-system-genie-pattern/WISH.md +0 -268
- package/.genie/wishes/release-system-genie-pattern/validation.md +0 -205
- package/.gitguardian.yaml +0 -29
- package/.gitguardianignore +0 -16
- package/.github/workflows/ci.yml +0 -122
- package/.github/workflows/release.yml +0 -289
- package/.github/workflows/version.yml +0 -228
- package/.husky/pre-commit +0 -2
- package/AGENTS.md +0 -433
- package/CLAUDE.md +0 -1
- package/Makefile +0 -285
- package/assets/icon.ico +0 -0
- package/bun.lock +0 -435
- package/bunfig.toml +0 -28
- package/ecosystem.config.cjs +0 -23
- package/eslint.config.js +0 -63
- package/examples/multi-tenant-demo.js +0 -104
- package/install.sh +0 -123
- package/knip.json +0 -9
- package/tests/audit.test.js +0 -189
- package/tests/backpressure.test.js +0 -167
- package/tests/benchmarks/runner.js +0 -1197
- package/tests/benchmarks/vector-generator.js +0 -368
- package/tests/cli-install.test.js +0 -322
- package/tests/control-db.test.js +0 -285
- package/tests/daemon-args.test.js +0 -86
- package/tests/daemon-control.test.js +0 -171
- package/tests/daemon-fingerprint-integration.test.js +0 -111
- package/tests/daemon-pr24-regression.test.js +0 -198
- package/tests/fingerprint.test.js +0 -263
- package/tests/fixtures/240-orphan-seed.sql +0 -30
- package/tests/multi-tenant.test.js +0 -374
- package/tests/orphan-cleanup.test.js +0 -390
- package/tests/pg-version-regex.test.js +0 -129
- package/tests/quick-bench.js +0 -135
- package/tests/router-handshake-retry.test.js +0 -119
- package/tests/router-handshake-watchdog.test.js +0 -110
- package/tests/sdk.test.js +0 -71
- package/tests/stale-postmaster-pid.test.js +0 -85
- package/tests/stress-test.js +0 -439
- package/tests/sync-perf-test.js +0 -150
- package/tests/tcp-listen.test.js +0 -368
- package/tests/tenancy.test.js +0 -403
- package/tests/wrapper-supervision.test.js +0 -107
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Genie Helper CLI Router
|
|
5
|
-
*
|
|
6
|
-
* Provides easy access to all Genie helper utilities.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* genie helper <command> [args]
|
|
10
|
-
* node .genie/scripts/helpers/index.js <command> [args]
|
|
11
|
-
*
|
|
12
|
-
* Available commands:
|
|
13
|
-
* count-tokens <file> - Count tokens in file
|
|
14
|
-
* count-tokens --before=f1 --after=f2 - Compare token counts
|
|
15
|
-
* validate-frontmatter <dir> - Validate YAML frontmatter
|
|
16
|
-
* create-frontmatter <file.md> - Generate frontmatter from content
|
|
17
|
-
* detect-markers <dir> - Find TODO/FIXME markers
|
|
18
|
-
* list - List all available helpers
|
|
19
|
-
* help [command] - Show help for a command
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
const { spawn } = require('child_process');
|
|
23
|
-
const path = require('path');
|
|
24
|
-
const fs = require('fs');
|
|
25
|
-
|
|
26
|
-
const HELPERS_DIR = __dirname;
|
|
27
|
-
|
|
28
|
-
// Available helpers and their descriptions
|
|
29
|
-
const HELPERS = {
|
|
30
|
-
'count-tokens': {
|
|
31
|
-
script: 'count-tokens.js',
|
|
32
|
-
description: 'Count tokens in files using tiktoken (cl100k_base)',
|
|
33
|
-
usage: [
|
|
34
|
-
'genie helper count-tokens <file>',
|
|
35
|
-
'genie helper count-tokens --before=old.md --after=new.md',
|
|
36
|
-
'echo "text" | genie helper count-tokens'
|
|
37
|
-
],
|
|
38
|
-
examples: [
|
|
39
|
-
'$ genie helper count-tokens AGENTS.md',
|
|
40
|
-
'$ genie helper count-tokens --before=v1.md --after=v2.md'
|
|
41
|
-
]
|
|
42
|
-
},
|
|
43
|
-
'validate-frontmatter': {
|
|
44
|
-
script: 'validate-frontmatter.js',
|
|
45
|
-
description: 'Validate YAML frontmatter in markdown files',
|
|
46
|
-
usage: [
|
|
47
|
-
'genie helper validate-frontmatter <directory>'
|
|
48
|
-
],
|
|
49
|
-
examples: [
|
|
50
|
-
'$ genie helper validate-frontmatter .genie',
|
|
51
|
-
'$ genie helper validate-frontmatter .genie/spells'
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
'detect-markers': {
|
|
55
|
-
script: 'detect-markers.js',
|
|
56
|
-
description: 'Detect TODO/FIXME markers and merge conflicts',
|
|
57
|
-
usage: [
|
|
58
|
-
'genie helper detect-markers <directory>'
|
|
59
|
-
],
|
|
60
|
-
examples: [
|
|
61
|
-
'$ genie helper detect-markers .genie',
|
|
62
|
-
'$ genie helper detect-markers .'
|
|
63
|
-
]
|
|
64
|
-
},
|
|
65
|
-
'analyze-commit': {
|
|
66
|
-
script: 'analyze-commit.js',
|
|
67
|
-
description: 'Analyze commit messages (conventional commits, traceability)',
|
|
68
|
-
usage: [
|
|
69
|
-
'genie helper analyze-commit [commit-hash]',
|
|
70
|
-
'genie helper analyze-commit --staged'
|
|
71
|
-
],
|
|
72
|
-
examples: [
|
|
73
|
-
'$ genie helper analyze-commit HEAD',
|
|
74
|
-
'$ genie helper analyze-commit abc123',
|
|
75
|
-
'$ genie helper analyze-commit --staged'
|
|
76
|
-
]
|
|
77
|
-
},
|
|
78
|
-
'check-secrets': {
|
|
79
|
-
script: 'check-secrets.js',
|
|
80
|
-
description: 'Detect secrets and credentials in files',
|
|
81
|
-
usage: [
|
|
82
|
-
'genie helper check-secrets [files...]',
|
|
83
|
-
'genie helper check-secrets --staged'
|
|
84
|
-
],
|
|
85
|
-
examples: [
|
|
86
|
-
'$ genie helper check-secrets',
|
|
87
|
-
'$ genie helper check-secrets --staged',
|
|
88
|
-
'$ genie helper check-secrets file1.ts file2.ts'
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
'detect-todos': {
|
|
92
|
-
script: 'detect-todos.js',
|
|
93
|
-
description: 'Detect TODO/FIXME/WIP markers in markdown files',
|
|
94
|
-
usage: [
|
|
95
|
-
'genie helper detect-todos [directory]'
|
|
96
|
-
],
|
|
97
|
-
examples: [
|
|
98
|
-
'$ genie helper detect-todos .genie',
|
|
99
|
-
'$ genie helper detect-todos'
|
|
100
|
-
]
|
|
101
|
-
},
|
|
102
|
-
'detect-unlabeled-blocks': {
|
|
103
|
-
script: 'detect-unlabeled-blocks.js',
|
|
104
|
-
description: 'Detect unlabeled code blocks in markdown files',
|
|
105
|
-
usage: [
|
|
106
|
-
'genie helper detect-unlabeled-blocks [directory]'
|
|
107
|
-
],
|
|
108
|
-
examples: [
|
|
109
|
-
'$ genie helper detect-unlabeled-blocks .genie'
|
|
110
|
-
]
|
|
111
|
-
},
|
|
112
|
-
'find-empty-sections': {
|
|
113
|
-
script: 'find-empty-sections.js',
|
|
114
|
-
description: 'Find empty sections in markdown files',
|
|
115
|
-
usage: [
|
|
116
|
-
'genie helper find-empty-sections [directory]'
|
|
117
|
-
],
|
|
118
|
-
examples: [
|
|
119
|
-
'$ genie helper find-empty-sections .genie'
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
'validate-links': {
|
|
123
|
-
script: 'validate-links.js',
|
|
124
|
-
description: 'Validate @ references and links in markdown files',
|
|
125
|
-
usage: [
|
|
126
|
-
'genie helper validate-links [directory]'
|
|
127
|
-
],
|
|
128
|
-
examples: [
|
|
129
|
-
'$ genie helper validate-links .genie'
|
|
130
|
-
]
|
|
131
|
-
},
|
|
132
|
-
'embeddings': {
|
|
133
|
-
script: 'embeddings.js',
|
|
134
|
-
description: 'Check if new learning already exists in target section (deduplication)',
|
|
135
|
-
usage: [
|
|
136
|
-
'genie helper embeddings "new learning text" file.md "Section Name"',
|
|
137
|
-
'genie helper embeddings clear-cache'
|
|
138
|
-
],
|
|
139
|
-
examples: [
|
|
140
|
-
'$ genie helper embeddings "Never rewrite sections" .genie/spells/learn.md "Grow-and-Refine"',
|
|
141
|
-
'$ genie helper embeddings clear-cache'
|
|
142
|
-
]
|
|
143
|
-
},
|
|
144
|
-
'bullet-id': {
|
|
145
|
-
script: 'bullet-id.js',
|
|
146
|
-
description: 'Generate unique IDs for structured learning bullets',
|
|
147
|
-
usage: [
|
|
148
|
-
'genie helper bullet-id file.md',
|
|
149
|
-
'genie helper bullet-id file.md --count=10',
|
|
150
|
-
'genie helper bullet-id file.md --peek'
|
|
151
|
-
],
|
|
152
|
-
examples: [
|
|
153
|
-
'$ genie helper bullet-id .genie/spells/learn.md',
|
|
154
|
-
'$ genie helper bullet-id .genie/spells/learn.md --count=5'
|
|
155
|
-
]
|
|
156
|
-
},
|
|
157
|
-
'bullet-counter': {
|
|
158
|
-
script: 'bullet-counter.js',
|
|
159
|
-
description: 'Update helpful/harmful counters for learning bullets',
|
|
160
|
-
usage: [
|
|
161
|
-
'genie helper bullet-counter ID',
|
|
162
|
-
'genie helper bullet-counter ID --helpful',
|
|
163
|
-
'genie helper bullet-counter ID --harmful'
|
|
164
|
-
],
|
|
165
|
-
examples: [
|
|
166
|
-
'$ genie helper bullet-counter learn-042',
|
|
167
|
-
'$ genie helper bullet-counter learn-042 --helpful'
|
|
168
|
-
]
|
|
169
|
-
},
|
|
170
|
-
'bullet-find': {
|
|
171
|
-
script: 'bullet-find.js',
|
|
172
|
-
description: 'Find and query structured learning bullets',
|
|
173
|
-
usage: [
|
|
174
|
-
'genie helper bullet-find ID',
|
|
175
|
-
'genie helper bullet-find --top-helpful --limit=10',
|
|
176
|
-
'genie helper bullet-find --top-harmful --limit=10',
|
|
177
|
-
'genie helper bullet-find --file=file.md',
|
|
178
|
-
'genie helper bullet-find --search="keyword"'
|
|
179
|
-
],
|
|
180
|
-
examples: [
|
|
181
|
-
'$ genie helper bullet-find learn-042',
|
|
182
|
-
'$ genie helper bullet-find --top-helpful --limit=5',
|
|
183
|
-
'$ genie helper bullet-find --search="delegate"'
|
|
184
|
-
]
|
|
185
|
-
},
|
|
186
|
-
'validate-paths': {
|
|
187
|
-
script: 'validate-paths.js',
|
|
188
|
-
description: 'Validate all literal file path references in codebase',
|
|
189
|
-
usage: [
|
|
190
|
-
'genie helper validate-paths',
|
|
191
|
-
'genie helper validate-paths --staged',
|
|
192
|
-
'genie helper validate-paths --verbose'
|
|
193
|
-
],
|
|
194
|
-
examples: [
|
|
195
|
-
'$ genie helper validate-paths',
|
|
196
|
-
'$ genie helper validate-paths --staged',
|
|
197
|
-
'$ genie helper validate-paths --verbose'
|
|
198
|
-
]
|
|
199
|
-
},
|
|
200
|
-
'create-frontmatter': {
|
|
201
|
-
script: 'create-frontmatter.js',
|
|
202
|
-
description: 'Content-aware frontmatter generator (reads .md, analyzes, generates)',
|
|
203
|
-
usage: [
|
|
204
|
-
'genie helper create-frontmatter <file.md>',
|
|
205
|
-
'genie helper create-frontmatter <file.md> --type=TYPE'
|
|
206
|
-
],
|
|
207
|
-
examples: [
|
|
208
|
-
'$ genie helper create-frontmatter .genie/agents/my-agent.md',
|
|
209
|
-
'$ genie helper create-frontmatter .genie/spells/learn.md --type=spell'
|
|
210
|
-
]
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
function showList() {
|
|
215
|
-
console.log('');
|
|
216
|
-
console.log('Available Genie Helpers:');
|
|
217
|
-
console.log('━'.repeat(60));
|
|
218
|
-
console.log('');
|
|
219
|
-
|
|
220
|
-
Object.entries(HELPERS).forEach(([name, info]) => {
|
|
221
|
-
console.log(` ${name.padEnd(25)} ${info.description}`);
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
console.log('');
|
|
225
|
-
console.log('Usage:');
|
|
226
|
-
console.log(' genie helper <command> [args]');
|
|
227
|
-
console.log(' genie helper help [command] Show help for specific command');
|
|
228
|
-
console.log('');
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
function showHelp(command) {
|
|
232
|
-
if (!command) {
|
|
233
|
-
showList();
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
const helper = HELPERS[command];
|
|
238
|
-
if (!helper) {
|
|
239
|
-
console.error(`Unknown helper: ${command}`);
|
|
240
|
-
console.error('');
|
|
241
|
-
showList();
|
|
242
|
-
process.exit(1);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
console.log('');
|
|
246
|
-
console.log(`${command} - ${helper.description}`);
|
|
247
|
-
console.log('━'.repeat(60));
|
|
248
|
-
console.log('');
|
|
249
|
-
console.log('Usage:');
|
|
250
|
-
helper.usage.forEach(usage => {
|
|
251
|
-
console.log(` ${usage}`);
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
if (helper.examples && helper.examples.length > 0) {
|
|
255
|
-
console.log('');
|
|
256
|
-
console.log('Examples:');
|
|
257
|
-
helper.examples.forEach(example => {
|
|
258
|
-
console.log(` ${example}`);
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
console.log('');
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
function runHelper(command, args) {
|
|
266
|
-
const helper = HELPERS[command];
|
|
267
|
-
|
|
268
|
-
if (!helper) {
|
|
269
|
-
console.error(`Unknown helper: ${command}`);
|
|
270
|
-
console.error('');
|
|
271
|
-
console.error('Run "genie helper list" to see available helpers');
|
|
272
|
-
process.exit(1);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
const scriptPath = path.join(HELPERS_DIR, helper.script);
|
|
276
|
-
|
|
277
|
-
if (!fs.existsSync(scriptPath)) {
|
|
278
|
-
console.error(`Helper script not found: ${scriptPath}`);
|
|
279
|
-
process.exit(1);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Spawn the helper script
|
|
283
|
-
const child = spawn('node', [scriptPath, ...args], {
|
|
284
|
-
stdio: 'inherit',
|
|
285
|
-
env: process.env
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
child.on('exit', (code) => {
|
|
289
|
-
process.exit(code || 0);
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
child.on('error', (err) => {
|
|
293
|
-
console.error(`Failed to run helper: ${err.message}`);
|
|
294
|
-
process.exit(1);
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Main CLI router
|
|
299
|
-
function main() {
|
|
300
|
-
const args = process.argv.slice(2);
|
|
301
|
-
|
|
302
|
-
if (args.length === 0 || args[0] === 'list') {
|
|
303
|
-
showList();
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
const command = args[0];
|
|
308
|
-
|
|
309
|
-
if (command === 'help' || command === '--help' || command === '-h') {
|
|
310
|
-
showHelp(args[1]);
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Run the helper with remaining args
|
|
315
|
-
const helperArgs = args.slice(1);
|
|
316
|
-
runHelper(command, helperArgs);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
main();
|