create-hq 6.0.0 → 7.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__/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/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.map +1 -1
- package/dist/deps.js +7 -1
- 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 +8 -7
- package/dist/index.js.map +1 -1
- package/dist/scaffold.d.ts +2 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +95 -286
- 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 +48 -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 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scaffold.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from "vitest";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import * as os from "os";
|
|
5
|
+
import { execSync } from "child_process";
|
|
6
|
+
import { fetchTemplate } from "../fetch-template.js";
|
|
7
|
+
/**
|
|
8
|
+
* Paths within the scaffolded HQ that intentionally contain user-configurable
|
|
9
|
+
* placeholder strings like {your-username}. These are template variables meant
|
|
10
|
+
* to be replaced by users after scaffolding — not scaffold bugs.
|
|
11
|
+
*/
|
|
12
|
+
const PLACEHOLDER_EXEMPT_PATHS = [
|
|
13
|
+
"knowledge",
|
|
14
|
+
"starter-projects",
|
|
15
|
+
".claude/policies",
|
|
16
|
+
".claude/commands",
|
|
17
|
+
"modules/modules.yaml",
|
|
18
|
+
"README.md",
|
|
19
|
+
"workers",
|
|
20
|
+
];
|
|
21
|
+
function isExemptFromPlaceholderCheck(relPath) {
|
|
22
|
+
return PLACEHOLDER_EXEMPT_PATHS.some((exempt) => relPath.startsWith(exempt));
|
|
23
|
+
}
|
|
24
|
+
describe("scaffold integration", () => {
|
|
25
|
+
let tmpDir;
|
|
26
|
+
let fetchResult;
|
|
27
|
+
beforeAll(async () => {
|
|
28
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-test-"));
|
|
29
|
+
fetchResult = await fetchTemplate(tmpDir);
|
|
30
|
+
}, 60000); // 60s timeout for network fetch
|
|
31
|
+
afterAll(() => {
|
|
32
|
+
if (tmpDir)
|
|
33
|
+
fs.removeSync(tmpDir);
|
|
34
|
+
});
|
|
35
|
+
it("creates expected top-level directories", () => {
|
|
36
|
+
const expected = [".claude", "workers", "companies", "workspace", "knowledge", "scripts"];
|
|
37
|
+
for (const dir of expected) {
|
|
38
|
+
expect(fs.existsSync(path.join(tmpDir, dir)), `Expected directory "${dir}" to exist in scaffolded HQ`).toBe(true);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it("creates .claude/CLAUDE.md that is non-empty", () => {
|
|
42
|
+
const claudeMd = path.join(tmpDir, ".claude", "CLAUDE.md");
|
|
43
|
+
expect(fs.existsSync(claudeMd), ".claude/CLAUDE.md must exist").toBe(true);
|
|
44
|
+
expect(fs.statSync(claudeMd).size, ".claude/CLAUDE.md must be non-empty").toBeGreaterThan(0);
|
|
45
|
+
});
|
|
46
|
+
it("creates core.yaml with valid YAML and has rules.locked array", () => {
|
|
47
|
+
const coreYaml = path.join(tmpDir, "core.yaml");
|
|
48
|
+
expect(fs.existsSync(coreYaml), "core.yaml must exist").toBe(true);
|
|
49
|
+
const content = fs.readFileSync(coreYaml, "utf-8");
|
|
50
|
+
expect(content.length, "core.yaml must be non-empty").toBeGreaterThan(0);
|
|
51
|
+
expect(content, "core.yaml must contain 'locked' key").toContain("locked");
|
|
52
|
+
});
|
|
53
|
+
it("creates executable scripts/core-integrity.sh", () => {
|
|
54
|
+
const script = path.join(tmpDir, "scripts", "core-integrity.sh");
|
|
55
|
+
expect(fs.existsSync(script), "scripts/core-integrity.sh must exist").toBe(true);
|
|
56
|
+
const stat = fs.statSync(script);
|
|
57
|
+
// Check any executable bit (owner/group/other)
|
|
58
|
+
expect(stat.mode & 0o111, "core-integrity.sh must be executable").toBeTruthy();
|
|
59
|
+
});
|
|
60
|
+
it("core-integrity.sh passes (exit code 0)", () => {
|
|
61
|
+
const script = path.join(tmpDir, "scripts", "core-integrity.sh");
|
|
62
|
+
if (!fs.existsSync(script)) {
|
|
63
|
+
// No governance script in this template version — skip gracefully
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Run compute-checksums first so integrity check has fresh checksums
|
|
67
|
+
const computeScript = path.join(tmpDir, "scripts", "compute-checksums.sh");
|
|
68
|
+
if (fs.existsSync(computeScript)) {
|
|
69
|
+
execSync(`bash "${computeScript}"`, { cwd: tmpDir, stdio: "pipe" });
|
|
70
|
+
}
|
|
71
|
+
// execSync throws on non-zero exit code, so reaching next line means success
|
|
72
|
+
execSync(`bash "${script}"`, { cwd: tmpDir, stdio: "pipe" });
|
|
73
|
+
expect(true).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it("no {your-username} or {your-name} placeholder strings in core operational files", () => {
|
|
76
|
+
/**
|
|
77
|
+
* Checks that scaffolded core files (core.yaml, .claude/CLAUDE.md, scripts/, settings/)
|
|
78
|
+
* do not contain placeholder strings. User-configurable template locations such as
|
|
79
|
+
* knowledge/, starter-projects/, .claude/policies/, .claude/commands/, modules/modules.yaml,
|
|
80
|
+
* workers/, and README.md are intentionally exempt — they ship with placeholder values
|
|
81
|
+
* that users fill in after setup.
|
|
82
|
+
*/
|
|
83
|
+
const violations = [];
|
|
84
|
+
const checkDir = (dir) => {
|
|
85
|
+
let entries;
|
|
86
|
+
try {
|
|
87
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
for (const entry of entries) {
|
|
93
|
+
const fullPath = path.join(dir, entry.name);
|
|
94
|
+
const relPath = path.relative(tmpDir, fullPath);
|
|
95
|
+
if (entry.isDirectory() &&
|
|
96
|
+
!entry.name.startsWith(".git") &&
|
|
97
|
+
entry.name !== "node_modules") {
|
|
98
|
+
// Skip exempt directories entirely
|
|
99
|
+
if (!PLACEHOLDER_EXEMPT_PATHS.some((e) => relPath.startsWith(e) || e.startsWith(relPath))) {
|
|
100
|
+
checkDir(fullPath);
|
|
101
|
+
}
|
|
102
|
+
else if (!isExemptFromPlaceholderCheck(relPath)) {
|
|
103
|
+
checkDir(fullPath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (entry.isFile() && !isExemptFromPlaceholderCheck(relPath)) {
|
|
107
|
+
try {
|
|
108
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
109
|
+
if (content.includes("{your-username}")) {
|
|
110
|
+
violations.push(`${relPath}: contains {your-username}`);
|
|
111
|
+
}
|
|
112
|
+
if (content.includes("{your-name}")) {
|
|
113
|
+
violations.push(`${relPath}: contains {your-name}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Binary file or unreadable — skip
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
checkDir(tmpDir);
|
|
123
|
+
expect(violations, `Placeholder strings in core files:\n${violations.join("\n")}`).toHaveLength(0);
|
|
124
|
+
});
|
|
125
|
+
it("fetched version is a non-empty string", () => {
|
|
126
|
+
/**
|
|
127
|
+
* Verifies fetchTemplate returns a version string. When a GitHub release exists,
|
|
128
|
+
* this will be a semver tag (e.g. "v9.0.0"). When falling back to gh CLI without
|
|
129
|
+
* a release, it returns "latest". Either way, the string must be non-empty.
|
|
130
|
+
*/
|
|
131
|
+
expect(fetchResult.version, "fetchTemplate must return a non-empty version string").toBeTruthy();
|
|
132
|
+
expect(typeof fetchResult.version).toBe("string");
|
|
133
|
+
expect(fetchResult.version.length).toBeGreaterThan(0);
|
|
134
|
+
});
|
|
135
|
+
it("fetched version matches latest release tag when a release exists", async () => {
|
|
136
|
+
/**
|
|
137
|
+
* When the GitHub repo has published releases, verifies the returned version
|
|
138
|
+
* matches the semver format of the latest release tag. Skips if no releases exist.
|
|
139
|
+
*/
|
|
140
|
+
const response = await fetch("https://api.github.com/repos/indigoai-us/hq/releases/latest", { headers: { Accept: "application/vnd.github+json" } });
|
|
141
|
+
if (!response.ok) {
|
|
142
|
+
// No releases published yet — version format check not applicable
|
|
143
|
+
console.log(` Skipping release tag format check (GitHub API returned ${response.status})`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const release = (await response.json());
|
|
147
|
+
expect(fetchResult.version, `Fetched version "${fetchResult.version}" should match latest release tag "${release.tag_name}"`).toBe(release.tag_name);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=scaffold.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.test.js","sourceRoot":"","sources":["../../src/__tests__/scaffold.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect whether cloud sync has already been configured for this HQ directory.
|
|
3
|
+
*
|
|
4
|
+
* Checks for the presence of `.hq-cloud/` config directory or a
|
|
5
|
+
* `.hq-cloud-config.json` file that would indicate a prior sync setup.
|
|
6
|
+
*
|
|
7
|
+
* This is a local-only stub — the full cloud detection (checking remote S3
|
|
8
|
+
* for existing files) happens via `@indigoai/hq-cloud` during the setup flow.
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectExistingSync(targetDir: string): Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=cloud-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-sync.d.ts","sourceRoot":"","sources":["../src/cloud-sync.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAc5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
/**
|
|
4
|
+
* Detect whether cloud sync has already been configured for this HQ directory.
|
|
5
|
+
*
|
|
6
|
+
* Checks for the presence of `.hq-cloud/` config directory or a
|
|
7
|
+
* `.hq-cloud-config.json` file that would indicate a prior sync setup.
|
|
8
|
+
*
|
|
9
|
+
* This is a local-only stub — the full cloud detection (checking remote S3
|
|
10
|
+
* for existing files) happens via `@indigoai/hq-cloud` during the setup flow.
|
|
11
|
+
*/
|
|
12
|
+
export async function detectExistingSync(targetDir) {
|
|
13
|
+
const checks = [
|
|
14
|
+
path.join(targetDir, ".hq-cloud"),
|
|
15
|
+
path.join(targetDir, ".hq-cloud-config.json"),
|
|
16
|
+
path.join(targetDir, "settings", "cloud.json"),
|
|
17
|
+
];
|
|
18
|
+
for (const p of checks) {
|
|
19
|
+
if (fs.existsSync(p)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=cloud-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-sync.js","sourceRoot":"","sources":["../src/cloud-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACxD,MAAM,MAAM,GAAG;QACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC;KAC/C,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/deps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AA2DA,wBAAgB,SAAS,IAAI;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAoBpD"}
|
package/dist/deps.js
CHANGED
|
@@ -17,7 +17,13 @@ const deps = [
|
|
|
17
17
|
name: "qmd (search)",
|
|
18
18
|
command: "qmd --version",
|
|
19
19
|
required: true,
|
|
20
|
-
installHint: "
|
|
20
|
+
installHint: "npm install -g @tobilu/qmd",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: "yq",
|
|
24
|
+
command: "yq --version",
|
|
25
|
+
required: true,
|
|
26
|
+
installHint: "brew install yq",
|
|
21
27
|
},
|
|
22
28
|
{
|
|
23
29
|
name: "gh CLI",
|
package/dist/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAS9C,MAAM,IAAI,GAAU;IAClB;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,oBAAoB;KAClC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAS9C,MAAM,IAAI,GAAU;IAClB;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,oBAAoB;KAClC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,4BAA4B;KAC1C;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,uBAAuB;KACrC;CACF,CAAC;AAEF,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACpC,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,iBAAiB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetch the HQ template from GitHub and extract it into targetDir.
|
|
3
|
+
*
|
|
4
|
+
* Strategy:
|
|
5
|
+
* 1. GitHub REST API → download tarball_url
|
|
6
|
+
* 2. Fallback: gh CLI (`gh api repos/indigoai-us/hq/tarball/{ref}`)
|
|
7
|
+
* 3. If both fail: throw with manual clone instructions
|
|
8
|
+
*
|
|
9
|
+
* Returns the version tag that was fetched.
|
|
10
|
+
*/
|
|
11
|
+
export declare function fetchTemplate(targetDir: string, tag?: string): Promise<{
|
|
12
|
+
version: string;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=fetch-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-template.d.ts","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"AAsGA;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC9B"}
|
|
@@ -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,22 @@
|
|
|
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)")
|
|
14
17
|
.action(async (directory, options) => {
|
|
15
18
|
try {
|
|
16
|
-
|
|
17
|
-
const dir = directory ?? (options.upgrade ? "." : "hq");
|
|
18
|
-
await scaffold(dir, options);
|
|
19
|
+
await scaffold(directory, options);
|
|
19
20
|
}
|
|
20
21
|
catch (err) {
|
|
21
22
|
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,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"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
interface ScaffoldOptions {
|
|
2
2
|
skipDeps?: boolean;
|
|
3
3
|
skipCli?: boolean;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
skipSync?: boolean;
|
|
5
|
+
tag?: string;
|
|
6
6
|
}
|
|
7
7
|
export declare function scaffold(directory: string, options: ScaffoldOptions): Promise<void>;
|
|
8
8
|
export {};
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAcA,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAoBD,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA6If"}
|