create-hq 6.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/deps.test.d.ts +2 -0
- package/dist/__tests__/deps.test.d.ts.map +1 -0
- package/dist/__tests__/deps.test.js +176 -0
- package/dist/__tests__/deps.test.js.map +1 -0
- package/dist/__tests__/platform.test.d.ts +2 -0
- package/dist/__tests__/platform.test.d.ts.map +1 -0
- package/dist/__tests__/platform.test.js +127 -0
- package/dist/__tests__/platform.test.js.map +1 -0
- package/dist/__tests__/scaffold.test.d.ts +2 -0
- package/dist/__tests__/scaffold.test.d.ts.map +1 -0
- package/dist/__tests__/scaffold.test.js +150 -0
- package/dist/__tests__/scaffold.test.js.map +1 -0
- package/dist/auth.d.ts +32 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +156 -0
- package/dist/auth.js.map +1 -0
- package/dist/cloud-sync.d.ts +11 -0
- package/dist/cloud-sync.d.ts.map +1 -0
- package/dist/cloud-sync.js +25 -0
- package/dist/cloud-sync.js.map +1 -0
- package/dist/deps.d.ts +32 -2
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +182 -7
- package/dist/deps.js.map +1 -1
- package/dist/fetch-template.d.ts +14 -0
- package/dist/fetch-template.d.ts.map +1 -0
- package/dist/fetch-template.js +136 -0
- package/dist/fetch-template.js.map +1 -0
- package/dist/index.js +9 -7
- package/dist/index.js.map +1 -1
- package/dist/packages.d.ts +71 -0
- package/dist/packages.d.ts.map +1 -0
- package/dist/packages.js +332 -0
- package/dist/packages.js.map +1 -0
- package/dist/platform.d.ts +9 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +69 -0
- package/dist/platform.js.map +1 -0
- package/dist/scaffold.d.ts +3 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +109 -290
- package/dist/scaffold.js.map +1 -1
- package/dist/ui.d.ts +2 -3
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +90 -44
- package/dist/ui.js.map +1 -1
- package/package.json +49 -40
- package/template/.claude/CLAUDE.md +0 -202
- package/template/.claude/commands/checkpoint.md +0 -127
- package/template/.claude/commands/cleanup.md +0 -307
- package/template/.claude/commands/execute-task.md +0 -440
- package/template/.claude/commands/exit-plan.md +0 -41
- package/template/.claude/commands/handoff.md +0 -97
- package/template/.claude/commands/learn.md +0 -218
- package/template/.claude/commands/metrics.md +0 -118
- package/template/.claude/commands/newworker.md +0 -162
- package/template/.claude/commands/nexttask.md +0 -67
- package/template/.claude/commands/prd.md +0 -238
- package/template/.claude/commands/reanchor.md +0 -51
- package/template/.claude/commands/remember.md +0 -126
- package/template/.claude/commands/run-project.md +0 -348
- package/template/.claude/commands/run.md +0 -110
- package/template/.claude/commands/search-reindex.md +0 -62
- package/template/.claude/commands/search.md +0 -100
- package/template/.claude/commands/setup.md +0 -381
- package/template/.claude/scripts/pure-ralph-loop.ps1 +0 -312
- package/template/.claude/scripts/pure-ralph-loop.sh +0 -859
- package/template/CHANGELOG.md +0 -220
- package/template/LICENSE +0 -21
- package/template/MIGRATION.md +0 -259
- package/template/README.md +0 -368
- package/template/data/journal/.gitkeep +0 -0
- package/template/docs/images/ascii-banner-options.md +0 -122
- package/template/docs/images/hq-banner.svg +0 -105
- package/template/knowledge/Ralph/01-overview.md +0 -71
- package/template/knowledge/Ralph/02-core-concepts.md +0 -114
- package/template/knowledge/Ralph/03-how-ralph-works.md +0 -184
- package/template/knowledge/Ralph/04-back-pressure.md +0 -222
- package/template/knowledge/Ralph/05-specifications.md +0 -210
- package/template/knowledge/Ralph/06-agents-md.md +0 -222
- package/template/knowledge/Ralph/07-implementation.md +0 -316
- package/template/knowledge/Ralph/08-economics.md +0 -182
- package/template/knowledge/Ralph/09-resources.md +0 -145
- package/template/knowledge/Ralph/10-claude-code-workflow.md +0 -212
- package/template/knowledge/Ralph/11-team-training-guide.md +0 -383
- package/template/knowledge/Ralph/README.md +0 -40
- package/template/knowledge/ai-security-framework/CONTRIBUTING.md +0 -139
- package/template/knowledge/ai-security-framework/GLOSSARY.md +0 -176
- package/template/knowledge/ai-security-framework/LICENSE +0 -21
- package/template/knowledge/ai-security-framework/QUICK-START.md +0 -172
- package/template/knowledge/ai-security-framework/README.md +0 -232
- package/template/knowledge/ai-security-framework/checklists/browser-security.md +0 -301
- package/template/knowledge/ai-security-framework/checklists/credential-isolation.md +0 -322
- package/template/knowledge/ai-security-framework/checklists/incident-response.md +0 -288
- package/template/knowledge/ai-security-framework/checklists/pre-flight.md +0 -249
- package/template/knowledge/ai-security-framework/checklists/weekly-audit.md +0 -159
- package/template/knowledge/ai-security-framework/configs/audit-logging.md +0 -372
- package/template/knowledge/ai-security-framework/configs/kill-switches.md +0 -354
- package/template/knowledge/ai-security-framework/docs/01-core-principles.md +0 -256
- package/template/knowledge/ai-security-framework/docs/02-threat-landscape.md +0 -326
- package/template/knowledge/ai-security-framework/docs/03-security-posture.md +0 -250
- package/template/knowledge/ai-security-framework/templates/agents-security.md +0 -233
- package/template/knowledge/design-styles/README.md +0 -42
- package/template/knowledge/design-styles/american-industrial.md +0 -136
- package/template/knowledge/design-styles/ethereal-abstract.md +0 -133
- package/template/knowledge/design-styles/liminal-portal.md +0 -111
- package/template/knowledge/design-styles/swipes/american-industrial/G-3m4YPW0AADdu2.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-JJlt5WwAABK3K.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-JJmj5W0AEbJ-7.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ (1).jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G7fVkn3WEAAM-ST.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G8ECO5JWEAIksyn.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G9-3GQSWoAA8eqZ.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G9xEOqrXkAEZRcs.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G_MVeJrXQAA8sx4.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G_RSkmGXkAAgAVZ.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/README.md +0 -31
- package/template/knowledge/design-styles/swipes/american-industrial/qyqtg7Dq.png +0 -0
- package/template/knowledge/dev-team/README.md +0 -35
- package/template/knowledge/dev-team/patterns/README.md +0 -34
- package/template/knowledge/dev-team/patterns/frontend/react-best-practices.md +0 -178
- package/template/knowledge/dev-team/troubleshooting/README.md +0 -31
- package/template/knowledge/dev-team/workflows/README.md +0 -49
- package/template/knowledge/hq/checkpoint-schema.json +0 -51
- package/template/knowledge/hq/index-md-spec.md +0 -74
- package/template/knowledge/hq/thread-schema.md +0 -153
- package/template/knowledge/hq-core/checkpoint-schema.json +0 -51
- package/template/knowledge/hq-core/index-md-spec.md +0 -74
- package/template/knowledge/hq-core/thread-schema.md +0 -153
- package/template/knowledge/loom/README.md +0 -51
- package/template/knowledge/loom/architecture.md +0 -125
- package/template/knowledge/loom/code-style.md +0 -169
- package/template/knowledge/loom/llm-proxy.md +0 -132
- package/template/knowledge/loom/state-machine.md +0 -131
- package/template/knowledge/loom/thread-system.md +0 -117
- package/template/knowledge/loom/tools.md +0 -94
- package/template/knowledge/loom/weaver.md +0 -96
- package/template/knowledge/loom/web-frontend.md +0 -131
- package/template/knowledge/projects/README.md +0 -72
- package/template/knowledge/projects/templates/README.template.md +0 -28
- package/template/knowledge/workers/README.md +0 -195
- package/template/knowledge/workers/ralph-loop-pattern.md +0 -157
- package/template/knowledge/workers/skill-schema.md +0 -182
- package/template/knowledge/workers/state-machine.md +0 -102
- package/template/knowledge/workers/templates/base-worker.yaml +0 -73
- package/template/knowledge/workers/templates/code-worker.yaml +0 -85
- package/template/knowledge/workers/templates/skill.yaml +0 -49
- package/template/knowledge/workers/templates/social-worker.yaml +0 -70
- package/template/modules/examples/full-manifest.yaml +0 -92
- package/template/modules/examples/minimal.yaml +0 -14
- package/template/modules/modules.yaml +0 -59
- package/template/projects/.gitkeep +0 -0
- package/template/projects/incorporate-workers-into-pure-ralph/prd.json +0 -88
- package/template/projects/pure-ralph-branch-isolation/README.md +0 -114
- package/template/projects/pure-ralph-branch-isolation/prd.json +0 -123
- package/template/projects/purist-ralph-loop/README.md +0 -148
- package/template/projects/purist-ralph-loop/prd.json +0 -135
- package/template/projects/ralph-test/prd.json +0 -50
- package/template/prompts/pure-ralph-base.md +0 -551
- package/template/settings/.gitkeep +0 -0
- package/template/settings/pure-ralph.json +0 -42
- package/template/social-content/drafts/INDEX.md +0 -21
- package/template/social-content/drafts/linkedin/.gitkeep +0 -1
- package/template/social-content/drafts/x/.gitkeep +0 -1
- package/template/social-content/images/.gitkeep +0 -1
- package/template/starter-projects/code-worker/README.md +0 -97
- package/template/starter-projects/code-worker/prd.json +0 -45
- package/template/starter-projects/personal-assistant/README.md +0 -42
- package/template/starter-projects/personal-assistant/prd.json +0 -43
- package/template/starter-projects/social-media/README.md +0 -60
- package/template/starter-projects/social-media/prd.json +0 -43
- package/template/workers/content-brand/README.md +0 -59
- package/template/workers/content-brand/skills/messaging-alignment.md +0 -91
- package/template/workers/content-brand/skills/tone-check.md +0 -76
- package/template/workers/content-brand/skills/voice-analysis.md +0 -68
- package/template/workers/content-brand/worker.yaml +0 -81
- package/template/workers/content-legal/README.md +0 -80
- package/template/workers/content-legal/skills/claim-substantiation.md +0 -150
- package/template/workers/content-legal/skills/compliance-scan.md +0 -123
- package/template/workers/content-legal/skills/disclaimer-check.md +0 -146
- package/template/workers/content-legal/worker.yaml +0 -118
- package/template/workers/content-product/README.md +0 -77
- package/template/workers/content-product/skills/claim-verification.md +0 -96
- package/template/workers/content-product/skills/feature-accuracy.md +0 -117
- package/template/workers/content-product/skills/stats-check.md +0 -128
- package/template/workers/content-product/worker.yaml +0 -97
- package/template/workers/content-sales/README.md +0 -70
- package/template/workers/content-sales/skills/conversion-analysis.md +0 -96
- package/template/workers/content-sales/skills/cta-audit.md +0 -107
- package/template/workers/content-sales/skills/value-prop-check.md +0 -114
- package/template/workers/content-sales/worker.yaml +0 -93
- package/template/workers/content-shared/cli.ts +0 -242
- package/template/workers/content-shared/index.ts +0 -234
- package/template/workers/content-shared/lib/accuracy-analyzer.ts +0 -661
- package/template/workers/content-shared/lib/analyze.ts +0 -370
- package/template/workers/content-shared/lib/brand-analyzer.ts +0 -526
- package/template/workers/content-shared/lib/cms-integration.ts +0 -446
- package/template/workers/content-shared/lib/compliance-analyzer.ts +0 -655
- package/template/workers/content-shared/lib/conversion-analyzer.ts +0 -555
- package/template/workers/content-shared/lib/github-integration.ts +0 -582
- package/template/workers/content-shared/lib/output.ts +0 -373
- package/template/workers/content-shared/lib/parser.ts +0 -771
- package/template/workers/content-shared/lib/priority.ts +0 -439
- package/template/workers/content-shared/lib/recommendations.ts +0 -512
- package/template/workers/content-shared/lib/reporter.ts +0 -749
- package/template/workers/content-shared/lib/restructure.ts +0 -664
- package/template/workers/content-shared/lib/scorer.ts +0 -140
- package/template/workers/content-shared/lib/types.ts +0 -227
- package/template/workers/content-shared/lib/variants.ts +0 -595
- package/template/workers/content-shared/package.json +0 -51
- package/template/workers/content-shared/pnpm-lock.yaml +0 -39
- package/template/workers/content-shared/test/sample-page.json +0 -115
- package/template/workers/content-shared/tsconfig.json +0 -20
- package/template/workers/dev-team/README.md +0 -166
- package/template/workers/dev-team/_template.yaml +0 -70
- package/template/workers/dev-team/architect/package.json +0 -27
- package/template/workers/dev-team/architect/skills/api-design.md +0 -89
- package/template/workers/dev-team/architect/skills/refactor-plan.md +0 -96
- package/template/workers/dev-team/architect/skills/system-design.md +0 -100
- package/template/workers/dev-team/architect/src/index.ts +0 -49
- package/template/workers/dev-team/architect/src/mcp-server.ts +0 -122
- package/template/workers/dev-team/architect/src/skills/api-design.ts +0 -316
- package/template/workers/dev-team/architect/src/skills/refactor-plan.ts +0 -264
- package/template/workers/dev-team/architect/src/skills/system-design.ts +0 -212
- package/template/workers/dev-team/architect/tsconfig.json +0 -19
- package/template/workers/dev-team/architect/worker.yaml +0 -128
- package/template/workers/dev-team/backend-dev/package-lock.json +0 -1252
- package/template/workers/dev-team/backend-dev/package.json +0 -27
- package/template/workers/dev-team/backend-dev/skills/implement-endpoint.md +0 -70
- package/template/workers/dev-team/backend-dev/skills/implement-service.md +0 -62
- package/template/workers/dev-team/backend-dev/src/index.ts +0 -51
- package/template/workers/dev-team/backend-dev/src/mcp-server.ts +0 -109
- package/template/workers/dev-team/backend-dev/src/skills/implement-endpoint.ts +0 -122
- package/template/workers/dev-team/backend-dev/src/skills/implement-service.ts +0 -126
- package/template/workers/dev-team/backend-dev/tsconfig.json +0 -19
- package/template/workers/dev-team/backend-dev/worker.yaml +0 -128
- package/template/workers/dev-team/code-reviewer/package-lock.json +0 -1080
- package/template/workers/dev-team/code-reviewer/package.json +0 -24
- package/template/workers/dev-team/code-reviewer/skills/merge-to-production.md +0 -61
- package/template/workers/dev-team/code-reviewer/skills/merge-to-staging.md +0 -54
- package/template/workers/dev-team/code-reviewer/skills/request-changes.md +0 -63
- package/template/workers/dev-team/code-reviewer/skills/review-pr.md +0 -77
- package/template/workers/dev-team/code-reviewer/src/index.ts +0 -56
- package/template/workers/dev-team/code-reviewer/src/mcp-server.ts +0 -101
- package/template/workers/dev-team/code-reviewer/tsconfig.json +0 -19
- package/template/workers/dev-team/code-reviewer/worker.yaml +0 -90
- package/template/workers/dev-team/database-dev/package.json +0 -22
- package/template/workers/dev-team/database-dev/skills/create-schema.md +0 -48
- package/template/workers/dev-team/database-dev/src/index.ts +0 -50
- package/template/workers/dev-team/database-dev/src/mcp-server.ts +0 -76
- package/template/workers/dev-team/database-dev/tsconfig.json +0 -18
- package/template/workers/dev-team/database-dev/worker.yaml +0 -90
- package/template/workers/dev-team/frontend-dev/package.json +0 -22
- package/template/workers/dev-team/frontend-dev/skills/create-component.md +0 -26
- package/template/workers/dev-team/frontend-dev/src/index.ts +0 -50
- package/template/workers/dev-team/frontend-dev/src/mcp-server.ts +0 -77
- package/template/workers/dev-team/frontend-dev/tsconfig.json +0 -18
- package/template/workers/dev-team/frontend-dev/worker.yaml +0 -132
- package/template/workers/dev-team/infra-dev/package.json +0 -24
- package/template/workers/dev-team/infra-dev/skills/add-monitoring.md +0 -73
- package/template/workers/dev-team/infra-dev/skills/configure-deployment.md +0 -80
- package/template/workers/dev-team/infra-dev/skills/create-dockerfile.md +0 -62
- package/template/workers/dev-team/infra-dev/skills/setup-cicd.md +0 -63
- package/template/workers/dev-team/infra-dev/src/index.ts +0 -55
- package/template/workers/dev-team/infra-dev/src/mcp-server.ts +0 -82
- package/template/workers/dev-team/infra-dev/tsconfig.json +0 -19
- package/template/workers/dev-team/infra-dev/worker.yaml +0 -92
- package/template/workers/dev-team/knowledge-curator/package.json +0 -24
- package/template/workers/dev-team/knowledge-curator/skills/curate-troubleshooting.md +0 -63
- package/template/workers/dev-team/knowledge-curator/skills/process-learnings.md +0 -61
- package/template/workers/dev-team/knowledge-curator/skills/sync-documentation.md +0 -76
- package/template/workers/dev-team/knowledge-curator/skills/update-patterns.md +0 -63
- package/template/workers/dev-team/knowledge-curator/src/index.ts +0 -53
- package/template/workers/dev-team/knowledge-curator/src/mcp-server.ts +0 -92
- package/template/workers/dev-team/knowledge-curator/tsconfig.json +0 -19
- package/template/workers/dev-team/knowledge-curator/worker.yaml +0 -80
- package/template/workers/dev-team/motion-designer/package.json +0 -22
- package/template/workers/dev-team/motion-designer/skills/add-animation.md +0 -25
- package/template/workers/dev-team/motion-designer/skills/generate-image.md +0 -36
- package/template/workers/dev-team/motion-designer/src/index.ts +0 -63
- package/template/workers/dev-team/motion-designer/src/mcp-server.ts +0 -79
- package/template/workers/dev-team/motion-designer/tsconfig.json +0 -18
- package/template/workers/dev-team/motion-designer/worker.yaml +0 -84
- package/template/workers/dev-team/product-planner/queue.json +0 -4
- package/template/workers/dev-team/product-planner/worker.yaml +0 -220
- package/template/workers/dev-team/project-manager/package-lock.json +0 -1252
- package/template/workers/dev-team/project-manager/package.json +0 -27
- package/template/workers/dev-team/project-manager/skills/create-prd.md +0 -66
- package/template/workers/dev-team/project-manager/skills/next-issue.md +0 -51
- package/template/workers/dev-team/project-manager/skills/project-status.md +0 -59
- package/template/workers/dev-team/project-manager/skills/update-learnings.md +0 -65
- package/template/workers/dev-team/project-manager/src/index.ts +0 -54
- package/template/workers/dev-team/project-manager/src/mcp-server.ts +0 -207
- package/template/workers/dev-team/project-manager/src/skills/create-prd.ts +0 -86
- package/template/workers/dev-team/project-manager/src/skills/next-issue.ts +0 -137
- package/template/workers/dev-team/project-manager/src/skills/project-status.ts +0 -131
- package/template/workers/dev-team/project-manager/src/skills/update-learnings.ts +0 -94
- package/template/workers/dev-team/project-manager/tsconfig.json +0 -19
- package/template/workers/dev-team/project-manager/worker.yaml +0 -96
- package/template/workers/dev-team/qa-tester/package.json +0 -24
- package/template/workers/dev-team/qa-tester/skills/create-demo-account.md +0 -36
- package/template/workers/dev-team/qa-tester/skills/run-tests.md +0 -36
- package/template/workers/dev-team/qa-tester/skills/write-test.md +0 -27
- package/template/workers/dev-team/qa-tester/src/index.ts +0 -61
- package/template/workers/dev-team/qa-tester/src/mcp-server.ts +0 -88
- package/template/workers/dev-team/qa-tester/tsconfig.json +0 -18
- package/template/workers/dev-team/qa-tester/worker.yaml +0 -116
- package/template/workers/dev-team/task-executor/package-lock.json +0 -1252
- package/template/workers/dev-team/task-executor/package.json +0 -27
- package/template/workers/dev-team/task-executor/skills/analyze-issue.md +0 -101
- package/template/workers/dev-team/task-executor/skills/execute.md +0 -133
- package/template/workers/dev-team/task-executor/skills/report-learnings.md +0 -106
- package/template/workers/dev-team/task-executor/skills/validate-completion.md +0 -121
- package/template/workers/dev-team/task-executor/src/index.ts +0 -54
- package/template/workers/dev-team/task-executor/src/mcp-server.ts +0 -139
- package/template/workers/dev-team/task-executor/src/skills/analyze-issue.ts +0 -219
- package/template/workers/dev-team/task-executor/src/skills/execute.ts +0 -132
- package/template/workers/dev-team/task-executor/src/skills/report-learnings.ts +0 -119
- package/template/workers/dev-team/task-executor/src/skills/validate-completion.ts +0 -142
- package/template/workers/dev-team/task-executor/tsconfig.json +0 -19
- package/template/workers/dev-team/task-executor/worker.yaml +0 -110
- package/template/workers/registry.yaml +0 -171
- package/template/workers/security-scanner/README.md +0 -73
- package/template/workers/security-scanner/skills/pre-deploy-check.md +0 -205
- package/template/workers/security-scanner/worker.yaml +0 -26
- package/template/workspace/checkpoints/.gitkeep +0 -0
- package/template/workspace/content-ideas/inbox.jsonl +0 -0
- package/template/workspace/drafts/.gitkeep +0 -0
- package/template/workspace/learnings/.gitkeep +0 -3
- package/template/workspace/orchestrator/.gitkeep +0 -0
- package/template/workspace/ralph-test/COMPLETE.md +0 -18
- package/template/workspace/ralph-test/hello.txt +0 -2
- package/template/workspace/reports/.gitkeep +0 -0
- package/template/workspace/scratch/.gitkeep +0 -0
- package/template/workspace/threads/.gitkeep +0 -3
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
const REPO = "indigoai-us/hq";
|
|
6
|
+
const GITHUB_API = "https://api.github.com";
|
|
7
|
+
async function getLatestRelease() {
|
|
8
|
+
const response = await fetch(`${GITHUB_API}/repos/${REPO}/releases/latest`, {
|
|
9
|
+
headers: { Accept: "application/vnd.github+json" },
|
|
10
|
+
});
|
|
11
|
+
if (!response.ok) {
|
|
12
|
+
throw new Error(`GitHub API returned ${response.status}: ${response.statusText}`);
|
|
13
|
+
}
|
|
14
|
+
const data = (await response.json());
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
async function getTagRelease(tag) {
|
|
18
|
+
const response = await fetch(`${GITHUB_API}/repos/${REPO}/releases/tags/${tag}`, {
|
|
19
|
+
headers: { Accept: "application/vnd.github+json" },
|
|
20
|
+
});
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
throw new Error(`GitHub API returned ${response.status}: ${response.statusText}`);
|
|
23
|
+
}
|
|
24
|
+
const data = (await response.json());
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
async function downloadAndExtractViaApi(tarballUrl, targetDir) {
|
|
28
|
+
const response = await fetch(tarballUrl, {
|
|
29
|
+
headers: { Accept: "application/vnd.github+json" },
|
|
30
|
+
redirect: "follow",
|
|
31
|
+
});
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
throw new Error(`Failed to download tarball: ${response.status} ${response.statusText}`);
|
|
34
|
+
}
|
|
35
|
+
const buffer = await response.arrayBuffer();
|
|
36
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-"));
|
|
37
|
+
const tarPath = path.join(tmpDir, "hq.tar.gz");
|
|
38
|
+
try {
|
|
39
|
+
fs.writeFileSync(tarPath, Buffer.from(buffer));
|
|
40
|
+
extractTemplateDirFromTar(tarPath, targetDir);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
fs.removeSync(tmpDir);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function extractTemplateDirFromTar(tarPath, targetDir) {
|
|
47
|
+
// The tarball contains a top-level directory like `indigoai-us-hq-<sha>/`
|
|
48
|
+
// We need to find the `template/` subdirectory within that and extract it.
|
|
49
|
+
const tmpExtract = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-extract-"));
|
|
50
|
+
try {
|
|
51
|
+
// Extract the full tarball to a temp location
|
|
52
|
+
execSync(`tar -xzf "${tarPath}" -C "${tmpExtract}"`, { stdio: "pipe" });
|
|
53
|
+
// Find the top-level directory created by GitHub's tarball
|
|
54
|
+
const entries = fs.readdirSync(tmpExtract);
|
|
55
|
+
if (entries.length === 0) {
|
|
56
|
+
throw new Error("Tarball was empty");
|
|
57
|
+
}
|
|
58
|
+
const rootDir = path.join(tmpExtract, entries[0]);
|
|
59
|
+
const templateSrc = path.join(rootDir, "template");
|
|
60
|
+
if (!fs.existsSync(templateSrc)) {
|
|
61
|
+
throw new Error("template/ directory not found in HQ tarball");
|
|
62
|
+
}
|
|
63
|
+
// Copy template contents to targetDir
|
|
64
|
+
fs.ensureDirSync(targetDir);
|
|
65
|
+
fs.copySync(templateSrc, targetDir, { overwrite: true });
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
fs.removeSync(tmpExtract);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function extractTemplateDirViaGhCli(tag, targetDir) {
|
|
72
|
+
const ref = tag || "HEAD";
|
|
73
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-gh-"));
|
|
74
|
+
const tarPath = path.join(tmpDir, "hq.tar.gz");
|
|
75
|
+
try {
|
|
76
|
+
// Use sh -c so that output redirection works
|
|
77
|
+
execSync(`gh api repos/${REPO}/tarball/${ref} > "${tarPath}"`, {
|
|
78
|
+
stdio: "pipe",
|
|
79
|
+
shell: "/bin/sh",
|
|
80
|
+
});
|
|
81
|
+
extractTemplateDirFromTar(tarPath, targetDir);
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
fs.removeSync(tmpDir);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Fetch the HQ template from GitHub and extract it into targetDir.
|
|
89
|
+
*
|
|
90
|
+
* Strategy:
|
|
91
|
+
* 1. GitHub REST API → download tarball_url
|
|
92
|
+
* 2. Fallback: gh CLI (`gh api repos/indigoai-us/hq/tarball/{ref}`)
|
|
93
|
+
* 3. If both fail: throw with manual clone instructions
|
|
94
|
+
*
|
|
95
|
+
* Returns the version tag that was fetched.
|
|
96
|
+
*/
|
|
97
|
+
export async function fetchTemplate(targetDir, tag) {
|
|
98
|
+
let version = tag || "";
|
|
99
|
+
let tarballUrl = "";
|
|
100
|
+
let apiError = null;
|
|
101
|
+
// --- Attempt 1: GitHub API ---
|
|
102
|
+
try {
|
|
103
|
+
const release = tag ? await getTagRelease(tag) : await getLatestRelease();
|
|
104
|
+
version = release.tag_name;
|
|
105
|
+
tarballUrl = release.tarball_url;
|
|
106
|
+
await downloadAndExtractViaApi(tarballUrl, targetDir);
|
|
107
|
+
return { version };
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
apiError = err;
|
|
111
|
+
}
|
|
112
|
+
// --- Attempt 2: gh CLI fallback ---
|
|
113
|
+
try {
|
|
114
|
+
const ref = tag || "HEAD";
|
|
115
|
+
extractTemplateDirViaGhCli(ref, targetDir);
|
|
116
|
+
// If we got a version from the API response (even if download failed later), keep it.
|
|
117
|
+
// Otherwise mark as unknown.
|
|
118
|
+
if (!version) {
|
|
119
|
+
version = tag || "latest";
|
|
120
|
+
}
|
|
121
|
+
return { version };
|
|
122
|
+
}
|
|
123
|
+
catch (ghErr) {
|
|
124
|
+
// Both failed — provide a clear error message.
|
|
125
|
+
const apiMsg = apiError instanceof Error ? apiError.message : String(apiError);
|
|
126
|
+
const ghMsg = ghErr instanceof Error ? ghErr.message : String(ghErr);
|
|
127
|
+
throw new Error(`Failed to fetch HQ template from GitHub.\n\n` +
|
|
128
|
+
` GitHub API error: ${apiMsg}\n` +
|
|
129
|
+
` gh CLI error: ${ghMsg}\n\n` +
|
|
130
|
+
`You appear to be offline or rate-limited.\n` +
|
|
131
|
+
`To set up HQ manually, clone the repo and copy the template directory:\n\n` +
|
|
132
|
+
` git clone https://github.com/indigoai-us/hq.git\n` +
|
|
133
|
+
` cp -R hq/template ${targetDir}\n`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=fetch-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-template.js","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
3
4
|
import { scaffold } from "./scaffold.js";
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
const pkg = require("../package.json");
|
|
4
7
|
const program = new Command();
|
|
5
8
|
program
|
|
6
9
|
.name("create-hq")
|
|
7
10
|
.description("Create a new HQ — Personal OS for AI Workers")
|
|
8
|
-
.version(
|
|
9
|
-
.argument("[directory]", "
|
|
11
|
+
.version(pkg.version)
|
|
12
|
+
.argument("[directory]", "where to create HQ", "hq")
|
|
10
13
|
.option("--skip-deps", "skip dependency checks")
|
|
11
14
|
.option("--skip-cli", "don't install @indigoai-us/hq-cli globally")
|
|
12
|
-
.option("--skip-
|
|
13
|
-
.option("--
|
|
15
|
+
.option("--skip-sync", "don't prompt for cloud sync setup")
|
|
16
|
+
.option("--tag <version>", "fetch a specific HQ version tag (e.g. v9.1.0)")
|
|
17
|
+
.option("--local-template <path>", "use a local template directory instead of fetching from GitHub")
|
|
14
18
|
.action(async (directory, options) => {
|
|
15
19
|
try {
|
|
16
|
-
|
|
17
|
-
const dir = directory ?? (options.upgrade ? "." : "hq");
|
|
18
|
-
await scaffold(dir, options);
|
|
20
|
+
await scaffold(directory, options);
|
|
19
21
|
}
|
|
20
22
|
catch (err) {
|
|
21
23
|
console.error(err instanceof Error ? err.message : "An unexpected error occurred");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,QAAQ,CAAC,aAAa,EAAE,oBAAoB,EAAE,IAAI,CAAC;KACnD,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;KAC/C,MAAM,CAAC,YAAY,EAAE,4CAA4C,CAAC;KAClE,MAAM,CAAC,aAAa,EAAE,mCAAmC,CAAC;KAC1D,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;KAC1E,MAAM,CAAC,yBAAyB,EAAE,gEAAgE,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAO,EAAE,EAAE;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CACpE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package discovery, download, and installation for create-hq (US-008)
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Public package discovery (GET /api/packages)
|
|
6
|
+
* - Entitlement check (GET /api/packages/my-entitlements)
|
|
7
|
+
* - Package download with SHA256 + RSA signature verification
|
|
8
|
+
* - Extraction to packages/installed/<slug>/
|
|
9
|
+
* - Registry.yaml update
|
|
10
|
+
* - Auto-merge for fresh HQ (register workers, commands, knowledge)
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Read the registry URL from packages/sources.yaml in the target HQ dir.
|
|
14
|
+
* Falls back to the default registry URL if sources.yaml is not present
|
|
15
|
+
* (which is expected during initial scaffold before the template is fully
|
|
16
|
+
* written).
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRegistryUrl(hqRoot: string): string;
|
|
19
|
+
export interface PackageMeta {
|
|
20
|
+
slug: string;
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
tier: string;
|
|
24
|
+
latest_version: string;
|
|
25
|
+
author?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface EntitlementEntry {
|
|
28
|
+
slug: string;
|
|
29
|
+
tier: string;
|
|
30
|
+
granted_at: string;
|
|
31
|
+
expires_at?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DownloadInfo {
|
|
34
|
+
url: string;
|
|
35
|
+
sha256: string;
|
|
36
|
+
signature?: string;
|
|
37
|
+
}
|
|
38
|
+
/** A package shown in the TUI list with its selection state. */
|
|
39
|
+
export interface PackageChoice {
|
|
40
|
+
pkg: PackageMeta;
|
|
41
|
+
entitled: boolean;
|
|
42
|
+
selected: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fetch the public package catalog.
|
|
46
|
+
* Returns an empty array on failure (network down, etc.).
|
|
47
|
+
*/
|
|
48
|
+
export declare function fetchPublicPackages(registryUrl: string): Promise<PackageMeta[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Fetch packages the authenticated user is entitled to.
|
|
51
|
+
* Returns an empty array on failure.
|
|
52
|
+
*/
|
|
53
|
+
export declare function fetchEntitlements(registryUrl: string, authToken: string): Promise<EntitlementEntry[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Build the combined package list for the TUI.
|
|
56
|
+
* Entitled packages are pre-checked; non-entitled are shown with lock icon.
|
|
57
|
+
*/
|
|
58
|
+
export declare function buildPackageChoices(allPackages: PackageMeta[], entitlements: EntitlementEntry[]): PackageChoice[];
|
|
59
|
+
/**
|
|
60
|
+
* Download, verify, and extract a single package into the target HQ.
|
|
61
|
+
* Returns true on success, false on failure (non-throwing for batch installs).
|
|
62
|
+
*/
|
|
63
|
+
export declare function installPackage(registryUrl: string, slug: string, hqRoot: string, authToken?: string): Promise<boolean>;
|
|
64
|
+
/** Format a package for display in the selection list. */
|
|
65
|
+
export declare function formatPackageChoice(choice: PackageChoice): string;
|
|
66
|
+
/**
|
|
67
|
+
* Install multiple packages in sequence, reporting progress.
|
|
68
|
+
* Returns the list of successfully installed slugs.
|
|
69
|
+
*/
|
|
70
|
+
export declare function installSelectedPackages(registryUrl: string, slugs: string[], hqRoot: string, authToken?: string): Promise<string[]>;
|
|
71
|
+
//# sourceMappingURL=packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWrD;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA4BD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,EAAE,CAAC,CAUxB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAW7B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EAAE,EAC1B,YAAY,EAAE,gBAAgB,EAAE,GAC/B,aAAa,EAAE,CAOjB;AAkDD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAqElB;AA4ID,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAOjE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB"}
|
package/dist/packages.js
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package discovery, download, and installation for create-hq (US-008)
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Public package discovery (GET /api/packages)
|
|
6
|
+
* - Entitlement check (GET /api/packages/my-entitlements)
|
|
7
|
+
* - Package download with SHA256 + RSA signature verification
|
|
8
|
+
* - Extraction to packages/installed/<slug>/
|
|
9
|
+
* - Registry.yaml update
|
|
10
|
+
* - Auto-merge for fresh HQ (register workers, commands, knowledge)
|
|
11
|
+
*/
|
|
12
|
+
import * as crypto from "crypto";
|
|
13
|
+
import * as fs from "fs";
|
|
14
|
+
import * as path from "path";
|
|
15
|
+
import * as os from "os";
|
|
16
|
+
import { execSync } from "child_process";
|
|
17
|
+
import chalk from "chalk";
|
|
18
|
+
// ─── Registry URL ────────────────────────────────────────────────────────────
|
|
19
|
+
const DEFAULT_REGISTRY_URL = "https://registry.hq.sh/api";
|
|
20
|
+
/**
|
|
21
|
+
* Read the registry URL from packages/sources.yaml in the target HQ dir.
|
|
22
|
+
* Falls back to the default registry URL if sources.yaml is not present
|
|
23
|
+
* (which is expected during initial scaffold before the template is fully
|
|
24
|
+
* written).
|
|
25
|
+
*/
|
|
26
|
+
export function getRegistryUrl(hqRoot) {
|
|
27
|
+
const sourcesPath = path.join(hqRoot, "packages", "sources.yaml");
|
|
28
|
+
if (fs.existsSync(sourcesPath)) {
|
|
29
|
+
const content = fs.readFileSync(sourcesPath, "utf-8");
|
|
30
|
+
// Simple YAML extraction — avoid adding js-yaml as dep to create-hq
|
|
31
|
+
const urlMatch = content.match(/url:\s*["']?([^\s"']+)/);
|
|
32
|
+
if (urlMatch?.[1]) {
|
|
33
|
+
return urlMatch[1];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return DEFAULT_REGISTRY_URL;
|
|
37
|
+
}
|
|
38
|
+
// ─── API client (lightweight, no class needed) ───────────────────────────────
|
|
39
|
+
async function apiGet(registryUrl, urlPath, authToken) {
|
|
40
|
+
const headers = { Accept: "application/json" };
|
|
41
|
+
if (authToken) {
|
|
42
|
+
headers["Authorization"] = `Bearer ${authToken}`;
|
|
43
|
+
}
|
|
44
|
+
const res = await fetch(`${registryUrl}${urlPath}`, {
|
|
45
|
+
method: "GET",
|
|
46
|
+
headers,
|
|
47
|
+
signal: AbortSignal.timeout(15_000),
|
|
48
|
+
});
|
|
49
|
+
if (!res.ok) {
|
|
50
|
+
const text = await res.text().catch(() => "");
|
|
51
|
+
throw new Error(`Registry API GET ${urlPath} failed (${res.status}): ${text}`);
|
|
52
|
+
}
|
|
53
|
+
return (await res.json());
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Fetch the public package catalog.
|
|
57
|
+
* Returns an empty array on failure (network down, etc.).
|
|
58
|
+
*/
|
|
59
|
+
export async function fetchPublicPackages(registryUrl) {
|
|
60
|
+
try {
|
|
61
|
+
const data = await apiGet(registryUrl, "/packages");
|
|
62
|
+
return data.packages ?? [];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Fetch packages the authenticated user is entitled to.
|
|
70
|
+
* Returns an empty array on failure.
|
|
71
|
+
*/
|
|
72
|
+
export async function fetchEntitlements(registryUrl, authToken) {
|
|
73
|
+
try {
|
|
74
|
+
const data = await apiGet(registryUrl, "/packages/my-entitlements", authToken);
|
|
75
|
+
return data.entitlements ?? [];
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build the combined package list for the TUI.
|
|
83
|
+
* Entitled packages are pre-checked; non-entitled are shown with lock icon.
|
|
84
|
+
*/
|
|
85
|
+
export function buildPackageChoices(allPackages, entitlements) {
|
|
86
|
+
const entitledSlugs = new Set(entitlements.map((e) => e.slug));
|
|
87
|
+
return allPackages.map((pkg) => ({
|
|
88
|
+
pkg,
|
|
89
|
+
entitled: entitledSlugs.has(pkg.slug),
|
|
90
|
+
selected: entitledSlugs.has(pkg.slug), // pre-check entitled packages
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
// ─── Integrity verification ──────────────────────────────────────────────────
|
|
94
|
+
async function verifySha256(filePath, expectedHash) {
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
const hash = crypto.createHash("sha256");
|
|
97
|
+
const stream = fs.createReadStream(filePath);
|
|
98
|
+
stream.on("data", (chunk) => hash.update(chunk));
|
|
99
|
+
stream.on("end", () => {
|
|
100
|
+
const computed = hash.digest("hex");
|
|
101
|
+
resolve(computed === expectedHash.toLowerCase());
|
|
102
|
+
});
|
|
103
|
+
stream.on("error", reject);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function verifyRsaSignature(sha256Hash, signature, hqRoot) {
|
|
107
|
+
const keyPath = path.resolve(hqRoot, "packages", ".keys", "registry-public.pem");
|
|
108
|
+
if (!fs.existsSync(keyPath)) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const publicKey = fs.readFileSync(keyPath, "utf-8");
|
|
112
|
+
const verifier = crypto.createVerify("SHA256");
|
|
113
|
+
verifier.update(sha256Hash);
|
|
114
|
+
verifier.end();
|
|
115
|
+
return verifier.verify(publicKey, Buffer.from(signature, "base64"));
|
|
116
|
+
}
|
|
117
|
+
// ─── Download + extract ──────────────────────────────────────────────────────
|
|
118
|
+
async function getDownloadInfo(registryUrl, slug, authToken) {
|
|
119
|
+
return apiGet(registryUrl, `/packages/${encodeURIComponent(slug)}/download`, authToken);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Download, verify, and extract a single package into the target HQ.
|
|
123
|
+
* Returns true on success, false on failure (non-throwing for batch installs).
|
|
124
|
+
*/
|
|
125
|
+
export async function installPackage(registryUrl, slug, hqRoot, authToken) {
|
|
126
|
+
const tmpFile = path.resolve(os.tmpdir(), `hq-pkg-${slug}-${Date.now()}.tar.gz`);
|
|
127
|
+
try {
|
|
128
|
+
// 1. Get download URL
|
|
129
|
+
const download = await getDownloadInfo(registryUrl, slug, authToken);
|
|
130
|
+
// 2. Download
|
|
131
|
+
const response = await fetch(download.url, {
|
|
132
|
+
signal: AbortSignal.timeout(120_000),
|
|
133
|
+
});
|
|
134
|
+
if (!response.ok) {
|
|
135
|
+
throw new Error(`Download failed (${response.status})`);
|
|
136
|
+
}
|
|
137
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
138
|
+
fs.writeFileSync(tmpFile, buffer);
|
|
139
|
+
// 3. Verify SHA256
|
|
140
|
+
const hashValid = await verifySha256(tmpFile, download.sha256);
|
|
141
|
+
if (!hashValid) {
|
|
142
|
+
throw new Error("SHA256 hash mismatch — file may be corrupted or tampered with");
|
|
143
|
+
}
|
|
144
|
+
// 4. Verify RSA signature (warn-only, non-blocking)
|
|
145
|
+
if (download.signature) {
|
|
146
|
+
const sigValid = verifyRsaSignature(download.sha256, download.signature, hqRoot);
|
|
147
|
+
if (!sigValid) {
|
|
148
|
+
// Non-fatal — proceed with SHA256-only verification
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// 5. Extract to packages/installed/<slug>/
|
|
152
|
+
const installDir = path.resolve(hqRoot, "packages", "installed", slug);
|
|
153
|
+
if (fs.existsSync(installDir)) {
|
|
154
|
+
fs.rmSync(installDir, { recursive: true, force: true });
|
|
155
|
+
}
|
|
156
|
+
fs.mkdirSync(installDir, { recursive: true });
|
|
157
|
+
execSync(`tar -xzf "${tmpFile}" -C "${installDir}"`, { stdio: "pipe" });
|
|
158
|
+
// 6. Validate package.yaml slug
|
|
159
|
+
const packageYamlPath = path.resolve(installDir, "package.yaml");
|
|
160
|
+
if (fs.existsSync(packageYamlPath)) {
|
|
161
|
+
const pkgContent = fs.readFileSync(packageYamlPath, "utf-8");
|
|
162
|
+
const slugMatch = pkgContent.match(/^slug:\s*(.+)$/m);
|
|
163
|
+
if (slugMatch?.[1]?.trim() && slugMatch[1].trim() !== slug) {
|
|
164
|
+
fs.rmSync(installDir, { recursive: true, force: true });
|
|
165
|
+
throw new Error(`Package slug mismatch: expected "${slug}", got "${slugMatch[1].trim()}"`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// 7. Update registry.yaml
|
|
169
|
+
updateRegistry(hqRoot, slug, registryUrl);
|
|
170
|
+
// 8. Auto-merge into fresh HQ
|
|
171
|
+
autoMergePackage(installDir, hqRoot);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
if (fs.existsSync(tmpFile)) {
|
|
179
|
+
fs.unlinkSync(tmpFile);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// ─── Registry.yaml update ────────────────────────────────────────────────────
|
|
184
|
+
function updateRegistry(hqRoot, slug, source) {
|
|
185
|
+
const registryPath = path.resolve(hqRoot, "packages", "registry.yaml");
|
|
186
|
+
const packagesDir = path.dirname(registryPath);
|
|
187
|
+
if (!fs.existsSync(packagesDir)) {
|
|
188
|
+
fs.mkdirSync(packagesDir, { recursive: true });
|
|
189
|
+
}
|
|
190
|
+
const now = new Date().toISOString();
|
|
191
|
+
// Read existing registry or create empty one
|
|
192
|
+
let entries = [];
|
|
193
|
+
if (fs.existsSync(registryPath)) {
|
|
194
|
+
const content = fs.readFileSync(registryPath, "utf-8");
|
|
195
|
+
// Simple YAML array parsing — each entry starts with "- slug:"
|
|
196
|
+
const existing = content.match(/^packages:/m) ? content : "";
|
|
197
|
+
if (existing) {
|
|
198
|
+
// Parse existing entries (basic approach without js-yaml dep)
|
|
199
|
+
try {
|
|
200
|
+
const lines = content.split("\n");
|
|
201
|
+
let current = null;
|
|
202
|
+
for (const line of lines) {
|
|
203
|
+
if (line.match(/^\s*-\s+\w+:/)) {
|
|
204
|
+
if (current)
|
|
205
|
+
entries.push(current);
|
|
206
|
+
current = {};
|
|
207
|
+
const kv = line.replace(/^\s*-\s+/, "").split(/:\s*/);
|
|
208
|
+
if (kv.length >= 2)
|
|
209
|
+
current[kv[0]] = kv.slice(1).join(":");
|
|
210
|
+
}
|
|
211
|
+
else if (line.match(/^\s+\w+:/) && current) {
|
|
212
|
+
const kv = line.trim().split(/:\s*/);
|
|
213
|
+
if (kv.length >= 2)
|
|
214
|
+
current[kv[0]] = kv.slice(1).join(":");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (current)
|
|
218
|
+
entries.push(current);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
entries = [];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Remove existing entry for this slug
|
|
226
|
+
entries = entries.filter((e) => e.slug !== slug);
|
|
227
|
+
// Add new entry
|
|
228
|
+
entries.push({
|
|
229
|
+
slug,
|
|
230
|
+
name: slug,
|
|
231
|
+
version: "latest",
|
|
232
|
+
source,
|
|
233
|
+
installed_at: now,
|
|
234
|
+
updated_at: now,
|
|
235
|
+
});
|
|
236
|
+
// Write back as YAML
|
|
237
|
+
const yamlLines = ["packages:"];
|
|
238
|
+
for (const entry of entries) {
|
|
239
|
+
let first = true;
|
|
240
|
+
for (const [key, value] of Object.entries(entry)) {
|
|
241
|
+
if (first) {
|
|
242
|
+
yamlLines.push(` - ${key}: ${value}`);
|
|
243
|
+
first = false;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
yamlLines.push(` ${key}: ${value}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
fs.writeFileSync(registryPath, yamlLines.join("\n") + "\n", "utf-8");
|
|
251
|
+
}
|
|
252
|
+
// ─── Auto-merge for fresh HQ ────────────────────────────────────────────────
|
|
253
|
+
/**
|
|
254
|
+
* Merge package contents into a fresh HQ directory.
|
|
255
|
+
*
|
|
256
|
+
* Since this runs during initial scaffold (fresh HQ), there are no conflicts.
|
|
257
|
+
* Simply copies workers, commands, knowledge, and other assets into their
|
|
258
|
+
* standard locations.
|
|
259
|
+
*/
|
|
260
|
+
function autoMergePackage(installDir, hqRoot) {
|
|
261
|
+
// Workers: copy to workers/public/<worker-name>/
|
|
262
|
+
const workersDir = path.join(installDir, "workers");
|
|
263
|
+
if (fs.existsSync(workersDir)) {
|
|
264
|
+
const targetWorkersDir = path.join(hqRoot, "workers", "public");
|
|
265
|
+
copyDirContents(workersDir, targetWorkersDir);
|
|
266
|
+
}
|
|
267
|
+
// Commands: copy to .claude/commands/
|
|
268
|
+
const commandsDir = path.join(installDir, "commands");
|
|
269
|
+
if (fs.existsSync(commandsDir)) {
|
|
270
|
+
const targetCommandsDir = path.join(hqRoot, ".claude", "commands");
|
|
271
|
+
copyDirContents(commandsDir, targetCommandsDir);
|
|
272
|
+
}
|
|
273
|
+
// Knowledge: copy to knowledge/public/
|
|
274
|
+
const knowledgeDir = path.join(installDir, "knowledge");
|
|
275
|
+
if (fs.existsSync(knowledgeDir)) {
|
|
276
|
+
const targetKnowledgeDir = path.join(hqRoot, "knowledge", "public");
|
|
277
|
+
copyDirContents(knowledgeDir, targetKnowledgeDir);
|
|
278
|
+
}
|
|
279
|
+
// Skills: copy to .claude/skills/
|
|
280
|
+
const skillsDir = path.join(installDir, "skills");
|
|
281
|
+
if (fs.existsSync(skillsDir)) {
|
|
282
|
+
const targetSkillsDir = path.join(hqRoot, ".claude", "skills");
|
|
283
|
+
copyDirContents(skillsDir, targetSkillsDir);
|
|
284
|
+
}
|
|
285
|
+
// Policies: copy to .claude/policies/
|
|
286
|
+
const policiesDir = path.join(installDir, "policies");
|
|
287
|
+
if (fs.existsSync(policiesDir)) {
|
|
288
|
+
const targetPoliciesDir = path.join(hqRoot, ".claude", "policies");
|
|
289
|
+
copyDirContents(policiesDir, targetPoliciesDir);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function copyDirContents(src, dest) {
|
|
293
|
+
if (!fs.existsSync(dest)) {
|
|
294
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
295
|
+
}
|
|
296
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
297
|
+
for (const entry of entries) {
|
|
298
|
+
const srcPath = path.join(src, entry.name);
|
|
299
|
+
const destPath = path.join(dest, entry.name);
|
|
300
|
+
if (entry.isDirectory()) {
|
|
301
|
+
copyDirContents(srcPath, destPath);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
fs.copyFileSync(srcPath, destPath);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// ─── TUI display helpers ────────────────────────────────────────────────────
|
|
309
|
+
/** Format a package for display in the selection list. */
|
|
310
|
+
export function formatPackageChoice(choice) {
|
|
311
|
+
const { pkg, entitled } = choice;
|
|
312
|
+
if (entitled) {
|
|
313
|
+
return `${pkg.name} ${chalk.dim(`— ${pkg.description}`)}`;
|
|
314
|
+
}
|
|
315
|
+
// Non-entitled: lock icon + tier label
|
|
316
|
+
return `${chalk.dim("🔒")} ${chalk.dim(pkg.name)} ${chalk.dim(`— ${pkg.description}`)} ${chalk.yellow(`[${pkg.tier}]`)}`;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Install multiple packages in sequence, reporting progress.
|
|
320
|
+
* Returns the list of successfully installed slugs.
|
|
321
|
+
*/
|
|
322
|
+
export async function installSelectedPackages(registryUrl, slugs, hqRoot, authToken) {
|
|
323
|
+
const installed = [];
|
|
324
|
+
for (const slug of slugs) {
|
|
325
|
+
const ok = await installPackage(registryUrl, slug, hqRoot, authToken);
|
|
326
|
+
if (ok) {
|
|
327
|
+
installed.push(slug);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return installed;
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.js","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type SystemPackageManager = "brew" | "apt" | "dnf" | "yum" | "pacman" | null;
|
|
2
|
+
export type OsType = "macos" | "linux-debian" | "linux-fedora" | "linux-arch" | "linux" | "unix";
|
|
3
|
+
export interface PlatformInfo {
|
|
4
|
+
os: OsType;
|
|
5
|
+
packageManager: SystemPackageManager;
|
|
6
|
+
npmAvailable: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectPlatform(): PlatformInfo;
|
|
9
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEpF,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,oBAAoB,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;CACvB;AAmDD,wBAAgB,cAAc,IAAI,YAAY,CAO7C"}
|