@su-record/vibe 2.7.18 → 2.7.20
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/.env.example +37 -37
- package/CLAUDE.md +153 -153
- package/LICENSE +21 -21
- package/README.md +451 -449
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +294 -294
- package/agents/event/event-comms.md +78 -0
- package/agents/event/event-content.md +68 -0
- package/agents/event/event-image.md +95 -0
- package/agents/event/event-ops.md +84 -0
- package/agents/event/event-scheduler.md +69 -0
- package/agents/event/event-speaker.md +86 -0
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/junior-mentor.md +141 -141
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui/ui-a11y-auditor.md +93 -93
- package/agents/ui/ui-antipattern-detector.md +94 -94
- package/agents/ui/ui-dataviz-advisor.md +69 -69
- package/agents/ui/ui-design-system-gen.md +57 -57
- package/agents/ui/ui-industry-analyzer.md +49 -49
- package/agents/ui/ui-layout-architect.md +65 -65
- package/agents/ui/ui-stack-implementer.md +68 -68
- package/agents/ui/ux-compliance-reviewer.md +81 -81
- package/agents/ui-previewer.md +258 -258
- package/commands/vibe.analyze.md +379 -379
- package/commands/vibe.event.md +163 -0
- package/commands/vibe.review.md +607 -607
- package/commands/vibe.run.md +2217 -2124
- package/commands/vibe.spec.md +1195 -1195
- package/commands/vibe.spec.review.md +569 -569
- package/commands/vibe.trace.md +50 -0
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.verify.md +484 -484
- package/dist/__tests__/architecture.test.d.ts +2 -0
- package/dist/__tests__/architecture.test.d.ts.map +1 -0
- package/dist/__tests__/architecture.test.js +207 -0
- package/dist/__tests__/architecture.test.js.map +1 -0
- package/dist/cli/auth.js +3 -3
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +45 -81
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.js +5 -5
- package/dist/cli/commands/remove.js +14 -14
- package/dist/cli/commands/sentinel.js +27 -27
- package/dist/cli/commands/skills.js +5 -5
- package/dist/cli/commands/slack.js +10 -10
- package/dist/cli/commands/telegram.js +12 -12
- package/dist/cli/detect.d.ts.map +1 -1
- package/dist/cli/detect.js +55 -32
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +52 -52
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm/claude-commands.js +16 -16
- package/dist/cli/llm/config.js +18 -18
- package/dist/cli/llm/gemini-commands.js +16 -16
- package/dist/cli/llm/gpt-commands.js +19 -19
- package/dist/cli/llm/help.js +21 -21
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +24 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/cursor-agents.js +32 -32
- package/dist/cli/postinstall/cursor-rules.js +83 -83
- package/dist/cli/postinstall/cursor-skills.js +743 -743
- package/dist/cli/setup/Provisioner.js +42 -42
- package/dist/infra/lib/AutomationLevel.d.ts +48 -0
- package/dist/infra/lib/AutomationLevel.d.ts.map +1 -0
- package/dist/infra/lib/AutomationLevel.js +157 -0
- package/dist/infra/lib/AutomationLevel.js.map +1 -0
- package/dist/infra/lib/DecisionTracer.d.ts +81 -0
- package/dist/infra/lib/DecisionTracer.d.ts.map +1 -0
- package/dist/infra/lib/DecisionTracer.js +135 -0
- package/dist/infra/lib/DecisionTracer.js.map +1 -0
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/InteractiveCheckpoint.d.ts +75 -0
- package/dist/infra/lib/InteractiveCheckpoint.d.ts.map +1 -0
- package/dist/infra/lib/InteractiveCheckpoint.js +179 -0
- package/dist/infra/lib/InteractiveCheckpoint.js.map +1 -0
- package/dist/infra/lib/IterationTracker.d.ts +44 -0
- package/dist/infra/lib/IterationTracker.d.ts.map +1 -1
- package/dist/infra/lib/IterationTracker.js +267 -12
- package/dist/infra/lib/IterationTracker.js.map +1 -1
- package/dist/infra/lib/LoopBreaker.d.ts +56 -0
- package/dist/infra/lib/LoopBreaker.d.ts.map +1 -0
- package/dist/infra/lib/LoopBreaker.js +109 -0
- package/dist/infra/lib/LoopBreaker.js.map +1 -0
- package/dist/infra/lib/PythonParser.js +108 -108
- package/dist/infra/lib/ReviewRace.js +96 -96
- package/dist/infra/lib/SkillFrontmatter.js +28 -28
- package/dist/infra/lib/SkillQualityGate.js +9 -9
- package/dist/infra/lib/SkillRepository.js +159 -159
- package/dist/infra/lib/UltraQA.js +99 -99
- package/dist/infra/lib/VerificationLoop.d.ts +105 -0
- package/dist/infra/lib/VerificationLoop.d.ts.map +1 -0
- package/dist/infra/lib/VerificationLoop.js +189 -0
- package/dist/infra/lib/VerificationLoop.js.map +1 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.js +297 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.js.map +1 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.js +274 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.js.map +1 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js +350 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js.map +1 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.js +340 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.js.map +1 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.js +486 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.js.map +1 -0
- package/dist/infra/lib/autonomy/AuditStore.js +41 -41
- package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
- package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
- package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
- package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
- package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
- package/dist/infra/lib/embedding/VectorStore.js +22 -22
- package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js +4 -0
- package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js.map +1 -1
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DeprecationDetector.d.ts +68 -0
- package/dist/infra/lib/evolution/DeprecationDetector.d.ts.map +1 -0
- package/dist/infra/lib/evolution/DeprecationDetector.js +207 -0
- package/dist/infra/lib/evolution/DeprecationDetector.js.map +1 -0
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
- package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
- package/dist/infra/lib/evolution/InsightStore.js +90 -90
- package/dist/infra/lib/evolution/ParityTester.d.ts +74 -0
- package/dist/infra/lib/evolution/ParityTester.d.ts.map +1 -0
- package/dist/infra/lib/evolution/ParityTester.js +238 -0
- package/dist/infra/lib/evolution/ParityTester.js.map +1 -0
- package/dist/infra/lib/evolution/RollbackManager.js +5 -5
- package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
- package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
- package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
- package/dist/infra/lib/evolution/UsageTracker.js +28 -28
- package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts +2 -0
- package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts.map +1 -0
- package/dist/infra/lib/evolution/__tests__/deprecation.test.js +251 -0
- package/dist/infra/lib/evolution/__tests__/deprecation.test.js.map +1 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.d.ts +2 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.d.ts.map +1 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.js +319 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.js.map +1 -0
- package/dist/infra/lib/evolution/index.d.ts +4 -0
- package/dist/infra/lib/evolution/index.d.ts.map +1 -1
- package/dist/infra/lib/evolution/index.js +3 -0
- package/dist/infra/lib/evolution/index.js.map +1 -1
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/gpt/specializations.d.ts +1 -1
- package/dist/infra/lib/gpt/specializations.js +1 -1
- package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/infra/lib/memory/MemorySearch.js +57 -57
- package/dist/infra/lib/memory/MemoryStorage.js +181 -181
- package/dist/infra/lib/memory/ObservationStore.js +28 -28
- package/dist/infra/lib/memory/ReflectionStore.js +30 -30
- package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
- package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
- package/dist/infra/lib/telemetry/SkillTelemetry.d.ts +6 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.d.ts.map +1 -1
- package/dist/infra/lib/telemetry/SkillTelemetry.js +11 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.js.map +1 -1
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/BackgroundManager.d.ts.map +1 -1
- package/dist/infra/orchestrator/BackgroundManager.js +2 -0
- package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/PhasePipeline.js +1 -1
- package/dist/infra/orchestrator/PhasePipeline.js.map +1 -1
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/infra/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/index.d.ts +16 -19
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +15 -27
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/memory/startSession.js +1 -1
- package/dist/tools/memory/startSession.js.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/index.d.ts +0 -4
- package/dist/tools/spec/index.d.ts.map +1 -1
- package/dist/tools/spec/index.js +0 -4
- package/dist/tools/spec/index.js.map +1 -1
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/hooks/gemini-hooks.json +73 -73
- package/hooks/hooks.json +137 -137
- package/hooks/scripts/code-check.js +77 -77
- package/hooks/scripts/context-save.js +212 -212
- package/hooks/scripts/evolution-engine.js +69 -0
- package/hooks/scripts/hud-status.js +291 -291
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +475 -475
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pre-tool-guard.js +125 -125
- package/hooks/scripts/prompt-dispatcher.js +185 -185
- package/hooks/scripts/sentinel-guard.js +104 -104
- package/hooks/scripts/session-start.js +106 -106
- package/hooks/scripts/skill-injector.js +83 -0
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +100 -100
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +101 -123
- package/skills/agents-md/SKILL.md +120 -120
- package/skills/arch-guard/SKILL.md +180 -180
- package/skills/brand-assets/SKILL.md +146 -146
- package/skills/capability-loop/SKILL.md +167 -167
- package/skills/characterization-test/SKILL.md +206 -206
- package/skills/commerce-patterns/SKILL.md +63 -63
- package/skills/commit-push-pr/SKILL.md +75 -75
- package/skills/context7-usage/SKILL.md +105 -105
- package/skills/core-capabilities/SKILL.md +13 -13
- package/skills/e2e-commerce/SKILL.md +61 -61
- package/skills/event-comms/SKILL.md +161 -0
- package/skills/event-ops/SKILL.md +197 -0
- package/skills/event-planning/SKILL.md +131 -0
- package/skills/exec-plan/SKILL.md +147 -147
- package/skills/frontend-design/SKILL.md +12 -12
- package/skills/git-worktree/SKILL.md +72 -72
- package/skills/handoff/SKILL.md +109 -109
- package/skills/parallel-research/SKILL.md +87 -87
- package/skills/priority-todos/SKILL.md +63 -63
- package/skills/seo-checklist/SKILL.md +57 -57
- package/skills/techdebt/SKILL.md +122 -122
- package/skills/tool-fallback/SKILL.md +103 -103
- package/skills/typescript-advanced-types/SKILL.md +66 -66
- package/skills/ui-ux-pro-max/SKILL.md +221 -221
- package/skills/vercel-react-best-practices/SKILL.md +59 -59
- package/skills/video-production/SKILL.md +51 -51
- package/vibe/config.json +29 -29
- package/vibe/constitution.md +227 -227
- package/vibe/rules/principles/communication-guide.md +98 -98
- package/vibe/rules/principles/development-philosophy.md +52 -52
- package/vibe/rules/principles/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/performance.md +236 -236
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/git-workflow.md +237 -237
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/rules/standards/security.md +305 -305
- package/vibe/rules/writing/document-style.md +74 -74
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
- package/vibe/ui-ux-data/charts.csv +26 -26
- package/vibe/ui-ux-data/colors.csv +97 -97
- package/vibe/ui-ux-data/icons.csv +101 -101
- package/vibe/ui-ux-data/landing.csv +31 -31
- package/vibe/ui-ux-data/products.csv +96 -96
- package/vibe/ui-ux-data/react-performance.csv +45 -45
- package/vibe/ui-ux-data/stacks/astro.csv +54 -54
- package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
- package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
- package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
- package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
- package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
- package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
- package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
- package/vibe/ui-ux-data/stacks/react.csv +54 -54
- package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
- package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
- package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
- package/vibe/ui-ux-data/stacks/vue.csv +50 -50
- package/vibe/ui-ux-data/styles.csv +68 -68
- package/vibe/ui-ux-data/typography.csv +57 -57
- package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
- package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
- package/vibe/ui-ux-data/version.json +31 -31
- package/vibe/ui-ux-data/web-interface.csv +31 -31
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/architecture.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { globSync } from 'glob';
|
|
5
|
+
const SRC_DIR = path.resolve(__dirname, '..');
|
|
6
|
+
/** Extract all static and dynamic import paths from a TypeScript source file */
|
|
7
|
+
function extractImports(filePath) {
|
|
8
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
9
|
+
const results = [];
|
|
10
|
+
const staticRegex = /(?:import|export)\s+(?:(?:type\s+)?(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*(?:\{[^}]*\}|\*\s+as\s+\w+|\w+))*\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
11
|
+
const dynamicRegex = /import\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
12
|
+
let match;
|
|
13
|
+
while ((match = staticRegex.exec(content)) !== null) {
|
|
14
|
+
results.push(match[1]);
|
|
15
|
+
}
|
|
16
|
+
while ((match = dynamicRegex.exec(content)) !== null) {
|
|
17
|
+
results.push(match[1]);
|
|
18
|
+
}
|
|
19
|
+
return results.filter((p) => p.startsWith('.') || p.startsWith('/'));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check whether every import of a given path in a file is type-only.
|
|
23
|
+
* Returns true only if all matching import statements use `import type`.
|
|
24
|
+
*/
|
|
25
|
+
function importsAreTypeOnly(filePath, importPath) {
|
|
26
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
27
|
+
const lines = content.split('\n');
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
if (!line.includes(importPath))
|
|
30
|
+
continue;
|
|
31
|
+
// Must match an import statement containing this path
|
|
32
|
+
if (!/(?:import|export)/.test(line))
|
|
33
|
+
continue;
|
|
34
|
+
// If the line is NOT a type-only import, return false
|
|
35
|
+
if (/^\s*import\s+(?!type[\s{])/.test(line)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
/** Resolve a relative import path to a layer category */
|
|
42
|
+
function categorizeImport(fromFile, importPath) {
|
|
43
|
+
const fromDir = path.dirname(fromFile);
|
|
44
|
+
// Strip .js extension for resolution
|
|
45
|
+
const cleanImport = importPath.replace(/\.js$/, '');
|
|
46
|
+
const resolved = path.resolve(fromDir, cleanImport);
|
|
47
|
+
const relative = path.relative(SRC_DIR, resolved).replace(/\\/g, '/');
|
|
48
|
+
if (relative.startsWith('cli/'))
|
|
49
|
+
return 'cli';
|
|
50
|
+
if (relative.startsWith('tools/'))
|
|
51
|
+
return 'tools';
|
|
52
|
+
if (relative.startsWith('infra/orchestrator/') || relative.startsWith('infra/lib/orchestrator'))
|
|
53
|
+
return 'infra/orchestrator';
|
|
54
|
+
if (relative.startsWith('infra/lib/') || relative.startsWith('infra/'))
|
|
55
|
+
return 'infra/lib';
|
|
56
|
+
if (relative.startsWith('test-helpers/'))
|
|
57
|
+
return 'test-helpers';
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
/** Collect all non-test .ts files in a layer directory (if it exists) */
|
|
61
|
+
function filesInLayer(layerRelPath) {
|
|
62
|
+
const layerDir = path.join(SRC_DIR, layerRelPath);
|
|
63
|
+
if (!fs.existsSync(layerDir))
|
|
64
|
+
return [];
|
|
65
|
+
return globSync('**/*.ts', { cwd: layerDir, absolute: true }).filter((f) => !f.includes('__tests__') && !f.endsWith('.test.ts') && !f.endsWith('.spec.ts'));
|
|
66
|
+
}
|
|
67
|
+
/** Build a layer-level dependency graph from all source files */
|
|
68
|
+
function buildLayerGraph() {
|
|
69
|
+
const layers = ['cli', 'tools', 'infra/lib', 'infra/orchestrator', 'test-helpers'];
|
|
70
|
+
const graph = new Map();
|
|
71
|
+
for (const layer of layers) {
|
|
72
|
+
graph.set(layer, new Set());
|
|
73
|
+
}
|
|
74
|
+
const layerDirMap = {
|
|
75
|
+
'cli': 'cli',
|
|
76
|
+
'tools': 'tools',
|
|
77
|
+
'infra/lib': 'infra/lib',
|
|
78
|
+
'infra/orchestrator': 'infra/orchestrator',
|
|
79
|
+
'test-helpers': 'test-helpers',
|
|
80
|
+
};
|
|
81
|
+
for (const [layer, relDir] of Object.entries(layerDirMap)) {
|
|
82
|
+
const files = filesInLayer(relDir);
|
|
83
|
+
for (const file of files) {
|
|
84
|
+
const imports = extractImports(file);
|
|
85
|
+
for (const imp of imports) {
|
|
86
|
+
const target = categorizeImport(file, imp);
|
|
87
|
+
if (target === null || target === layer)
|
|
88
|
+
continue;
|
|
89
|
+
// infra/lib may use type-only imports from cli/types — skip that edge
|
|
90
|
+
if (layer === 'infra/lib' && target === 'cli') {
|
|
91
|
+
const resolved = path.resolve(path.dirname(file), imp.replace(/\.js$/, ''));
|
|
92
|
+
const relative = path.relative(SRC_DIR, resolved).replace(/\\/g, '/');
|
|
93
|
+
if (relative.startsWith('cli/types') && importsAreTypeOnly(file, imp)) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
graph.get(layer).add(target);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return graph;
|
|
102
|
+
}
|
|
103
|
+
/** Detect cycles in a directed graph using DFS; returns cycle path or null */
|
|
104
|
+
function findCycle(graph) {
|
|
105
|
+
const visited = new Set();
|
|
106
|
+
const stack = new Set();
|
|
107
|
+
const stackArr = [];
|
|
108
|
+
function dfs(node) {
|
|
109
|
+
visited.add(node);
|
|
110
|
+
stack.add(node);
|
|
111
|
+
stackArr.push(node);
|
|
112
|
+
for (const neighbor of graph.get(node) ?? []) {
|
|
113
|
+
if (!visited.has(neighbor)) {
|
|
114
|
+
const cycle = dfs(neighbor);
|
|
115
|
+
if (cycle)
|
|
116
|
+
return cycle;
|
|
117
|
+
}
|
|
118
|
+
else if (stack.has(neighbor)) {
|
|
119
|
+
const cycleStart = stackArr.indexOf(neighbor);
|
|
120
|
+
return [...stackArr.slice(cycleStart), neighbor];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
stack.delete(node);
|
|
124
|
+
stackArr.pop();
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
for (const node of graph.keys()) {
|
|
128
|
+
if (!visited.has(node)) {
|
|
129
|
+
const cycle = dfs(node);
|
|
130
|
+
if (cycle)
|
|
131
|
+
return cycle;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// Helpers for violation collection
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
function collectViolations(layerRelPath, forbiddenLayer) {
|
|
140
|
+
const violations = [];
|
|
141
|
+
const files = filesInLayer(layerRelPath);
|
|
142
|
+
for (const file of files) {
|
|
143
|
+
const imports = extractImports(file);
|
|
144
|
+
for (const imp of imports) {
|
|
145
|
+
const target = categorizeImport(file, imp);
|
|
146
|
+
if (target === forbiddenLayer) {
|
|
147
|
+
violations.push(`${path.relative(SRC_DIR, file)} → ${imp}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return violations;
|
|
152
|
+
}
|
|
153
|
+
function collectViolationsExceptTypeOnly(layerRelPath, forbiddenLayer, allowedTypesPath) {
|
|
154
|
+
const violations = [];
|
|
155
|
+
const files = filesInLayer(layerRelPath);
|
|
156
|
+
for (const file of files) {
|
|
157
|
+
const imports = extractImports(file);
|
|
158
|
+
for (const imp of imports) {
|
|
159
|
+
const target = categorizeImport(file, imp);
|
|
160
|
+
if (target !== forbiddenLayer)
|
|
161
|
+
continue;
|
|
162
|
+
// Allow type-only imports from cli/types
|
|
163
|
+
const resolved = path.resolve(path.dirname(file), imp.replace(/\.js$/, ''));
|
|
164
|
+
const relative = path.relative(SRC_DIR, resolved).replace(/\\/g, '/');
|
|
165
|
+
if (relative.startsWith(allowedTypesPath) && importsAreTypeOnly(file, imp)) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
violations.push(`${path.relative(SRC_DIR, file)} → ${imp}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return violations;
|
|
172
|
+
}
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Tests
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
describe('Architecture boundary tests', () => {
|
|
177
|
+
it('tools/ never imports from cli/', () => {
|
|
178
|
+
const violations = collectViolations('tools', 'cli');
|
|
179
|
+
expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
|
|
180
|
+
});
|
|
181
|
+
it('tools/ never imports from infra/orchestrator/', () => {
|
|
182
|
+
const violations = collectViolations('tools', 'infra/orchestrator');
|
|
183
|
+
expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
|
|
184
|
+
});
|
|
185
|
+
it('infra/lib/ never imports from cli/ (except type-only from cli/types)', () => {
|
|
186
|
+
const violations = collectViolationsExceptTypeOnly('infra/lib', 'cli', 'cli/types');
|
|
187
|
+
expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
|
|
188
|
+
});
|
|
189
|
+
it('infra/lib/ never imports from tools/', () => {
|
|
190
|
+
const violations = collectViolations('infra/lib', 'tools');
|
|
191
|
+
expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
|
|
192
|
+
});
|
|
193
|
+
it('infra/orchestrator/ never imports from cli/', () => {
|
|
194
|
+
const violations = collectViolations('infra/orchestrator', 'cli');
|
|
195
|
+
expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
|
|
196
|
+
});
|
|
197
|
+
it('infra/orchestrator/ never imports from tools/', () => {
|
|
198
|
+
const violations = collectViolations('infra/orchestrator', 'tools');
|
|
199
|
+
expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
|
|
200
|
+
});
|
|
201
|
+
it('no circular module dependencies between layers', () => {
|
|
202
|
+
const graph = buildLayerGraph();
|
|
203
|
+
const cycle = findCycle(graph);
|
|
204
|
+
expect(cycle, `Circular dependency detected: ${cycle?.join(' → ')}`).toBeNull();
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=architecture.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.test.js","sourceRoot":"","sources":["../../src/__tests__/architecture.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/auth.js
CHANGED
|
@@ -80,8 +80,8 @@ export function formatClaudeCodeStatus(status) {
|
|
|
80
80
|
*/
|
|
81
81
|
export function formatAuthMethods(auths, cliInstalled) {
|
|
82
82
|
const parts = [];
|
|
83
|
-
if (cliInstalled !== undefined) {
|
|
84
|
-
parts.push(
|
|
83
|
+
if (cliInstalled !== undefined && cliInstalled) {
|
|
84
|
+
parts.push('✓ CLI');
|
|
85
85
|
}
|
|
86
86
|
parts.push(...auths.map(a => {
|
|
87
87
|
const icon = a.valid ? '✓' : '⚠';
|
|
@@ -89,7 +89,7 @@ export function formatAuthMethods(auths, cliInstalled) {
|
|
|
89
89
|
return `${icon} ${method}`;
|
|
90
90
|
}));
|
|
91
91
|
if (parts.length === 0)
|
|
92
|
-
return '
|
|
92
|
+
return '⬚ Not connected';
|
|
93
93
|
return parts.join(', ');
|
|
94
94
|
}
|
|
95
95
|
export function formatLLMStatus(claudeStatus) {
|
package/dist/cli/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/collaborator.js
CHANGED
|
@@ -56,64 +56,64 @@ export function setupCollaboratorAutoInstall(projectRoot) {
|
|
|
56
56
|
fs.mkdirSync(coreDir, { recursive: true });
|
|
57
57
|
}
|
|
58
58
|
if (!fs.existsSync(setupShPath)) {
|
|
59
|
-
const setupScript = `#!/bin/bash
|
|
60
|
-
# Core collaborator auto-install script
|
|
61
|
-
# Usage: ./.claude/vibe/setup.sh
|
|
62
|
-
|
|
63
|
-
set -e
|
|
64
|
-
|
|
65
|
-
echo "🔧 Checking Core installation..."
|
|
66
|
-
|
|
67
|
-
# Check npm/npx
|
|
68
|
-
if ! command -v npx &> /dev/null; then
|
|
69
|
-
echo "❌ Node.js/npm is not installed."
|
|
70
|
-
echo " Please install from https://nodejs.org"
|
|
71
|
-
exit 1
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
# Check core installation and update
|
|
75
|
-
if command -v vibe &> /dev/null; then
|
|
76
|
-
echo "✅ Core is already installed."
|
|
77
|
-
vibe update --silent
|
|
78
|
-
echo "✅ Core updated!"
|
|
79
|
-
else
|
|
80
|
-
echo "📦 Installing Core..."
|
|
81
|
-
npm install -g @su-record/vibe
|
|
82
|
-
vibe update --silent
|
|
83
|
-
echo "✅ Core installed and configured!"
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
echo ""
|
|
87
|
-
echo "Get started with:"
|
|
88
|
-
echo " /vibe.spec \\"feature\\" Create SPEC"
|
|
89
|
-
echo " /vibe.run \\"feature\\" Implement"
|
|
59
|
+
const setupScript = `#!/bin/bash
|
|
60
|
+
# Core collaborator auto-install script
|
|
61
|
+
# Usage: ./.claude/vibe/setup.sh
|
|
62
|
+
|
|
63
|
+
set -e
|
|
64
|
+
|
|
65
|
+
echo "🔧 Checking Core installation..."
|
|
66
|
+
|
|
67
|
+
# Check npm/npx
|
|
68
|
+
if ! command -v npx &> /dev/null; then
|
|
69
|
+
echo "❌ Node.js/npm is not installed."
|
|
70
|
+
echo " Please install from https://nodejs.org"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# Check core installation and update
|
|
75
|
+
if command -v vibe &> /dev/null; then
|
|
76
|
+
echo "✅ Core is already installed."
|
|
77
|
+
vibe update --silent
|
|
78
|
+
echo "✅ Core updated!"
|
|
79
|
+
else
|
|
80
|
+
echo "📦 Installing Core..."
|
|
81
|
+
npm install -g @su-record/vibe
|
|
82
|
+
vibe update --silent
|
|
83
|
+
echo "✅ Core installed and configured!"
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
echo ""
|
|
87
|
+
echo "Get started with:"
|
|
88
|
+
echo " /vibe.spec \\"feature\\" Create SPEC"
|
|
89
|
+
echo " /vibe.run \\"feature\\" Implement"
|
|
90
90
|
`;
|
|
91
91
|
fs.writeFileSync(setupShPath, setupScript);
|
|
92
92
|
fs.chmodSync(setupShPath, '755');
|
|
93
93
|
}
|
|
94
94
|
// 3. README.md에 협업자 안내 추가
|
|
95
95
|
const readmePath = path.join(projectRoot, 'README.md');
|
|
96
|
-
const coreSetupSection = `
|
|
97
|
-
## Core Setup (AI Coding)
|
|
98
|
-
|
|
99
|
-
This project uses [VIBE](https://github.com/su-record/vibe) AI coding framework.
|
|
100
|
-
|
|
101
|
-
### Collaborator Install
|
|
102
|
-
|
|
103
|
-
\`\`\`bash
|
|
104
|
-
# Global install (recommended)
|
|
105
|
-
npm install -g @su-record/vibe
|
|
106
|
-
vibe update
|
|
107
|
-
|
|
108
|
-
# Or use vibe init to setup
|
|
109
|
-
vibe init
|
|
110
|
-
\`\`\`
|
|
111
|
-
|
|
112
|
-
### Usage
|
|
113
|
-
|
|
114
|
-
Use slash commands in Claude Code:
|
|
115
|
-
- \`/vibe.spec "feature"\` - Create SPEC document
|
|
116
|
-
- \`/vibe.run "feature"\` - Execute implementation
|
|
96
|
+
const coreSetupSection = `
|
|
97
|
+
## Core Setup (AI Coding)
|
|
98
|
+
|
|
99
|
+
This project uses [VIBE](https://github.com/su-record/vibe) AI coding framework.
|
|
100
|
+
|
|
101
|
+
### Collaborator Install
|
|
102
|
+
|
|
103
|
+
\`\`\`bash
|
|
104
|
+
# Global install (recommended)
|
|
105
|
+
npm install -g @su-record/vibe
|
|
106
|
+
vibe update
|
|
107
|
+
|
|
108
|
+
# Or use vibe init to setup
|
|
109
|
+
vibe init
|
|
110
|
+
\`\`\`
|
|
111
|
+
|
|
112
|
+
### Usage
|
|
113
|
+
|
|
114
|
+
Use slash commands in Claude Code:
|
|
115
|
+
- \`/vibe.spec "feature"\` - Create SPEC document
|
|
116
|
+
- \`/vibe.run "feature"\` - Execute implementation
|
|
117
117
|
`;
|
|
118
118
|
if (fs.existsSync(readmePath)) {
|
|
119
119
|
const readme = fs.readFileSync(readmePath, 'utf-8');
|
|
@@ -193,18 +193,18 @@ export function evolutionGaps() {
|
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
export function evolutionHelp() {
|
|
196
|
-
console.log(`
|
|
197
|
-
Evolution Commands:
|
|
198
|
-
vibe evolution status Show overall status
|
|
199
|
-
vibe evolution list List all generations
|
|
200
|
-
vibe evolution approve <id> Approve draft → testing
|
|
201
|
-
vibe evolution reject <id> Reject draft
|
|
202
|
-
vibe evolution disable <id> Disable a generation
|
|
203
|
-
vibe evolution rollback <id> Rollback to previous version
|
|
204
|
-
vibe evolution disable-all Emergency disable all
|
|
205
|
-
vibe evolution run Manual evolution cycle
|
|
206
|
-
vibe evolution insights Show confirmed insights
|
|
207
|
-
vibe evolution gaps Show detected skill gaps
|
|
196
|
+
console.log(`
|
|
197
|
+
Evolution Commands:
|
|
198
|
+
vibe evolution status Show overall status
|
|
199
|
+
vibe evolution list List all generations
|
|
200
|
+
vibe evolution approve <id> Approve draft → testing
|
|
201
|
+
vibe evolution reject <id> Reject draft
|
|
202
|
+
vibe evolution disable <id> Disable a generation
|
|
203
|
+
vibe evolution rollback <id> Rollback to previous version
|
|
204
|
+
vibe evolution disable-all Emergency disable all
|
|
205
|
+
vibe evolution run Manual evolution cycle
|
|
206
|
+
vibe evolution insights Show confirmed insights
|
|
207
|
+
vibe evolution gaps Show detected skill gaps
|
|
208
208
|
`);
|
|
209
209
|
}
|
|
210
210
|
//# sourceMappingURL=evolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAqC/B;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAsCjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
|
|
@@ -10,41 +10,41 @@ import { detectCodexCli, detectGeminiCli } from '../utils/cli-detector.js';
|
|
|
10
10
|
* 도움말 표시
|
|
11
11
|
*/
|
|
12
12
|
export function showHelp() {
|
|
13
|
-
console.log(`
|
|
14
|
-
VIBE - Personalized AI Agent (Claude Code exclusive)
|
|
15
|
-
|
|
16
|
-
Commands:
|
|
17
|
-
vibe setup 셋업 위자드 (인증, 채널, 설정 한번에)
|
|
18
|
-
vibe init [project] 프로젝트 초기화
|
|
19
|
-
vibe update 설정 업데이트
|
|
20
|
-
vibe upgrade 최신 버전으로 업그레이드
|
|
21
|
-
vibe remove 프로젝트에서 제거
|
|
22
|
-
vibe status 전체 상태 확인
|
|
23
|
-
|
|
24
|
-
LLM:
|
|
25
|
-
vibe claude <cmd> Claude (key, status, logout)
|
|
26
|
-
vibe gpt <cmd> GPT (auth, key, status, logout)
|
|
27
|
-
vibe gemini <cmd> Gemini (auth, key, status, logout)
|
|
28
|
-
vibe env import [path] .env → ~/.vibe/config.json 가져오기
|
|
29
|
-
|
|
30
|
-
Skills:
|
|
31
|
-
vibe skills add <pkg> Install skill from skills.sh
|
|
32
|
-
|
|
33
|
-
Channels:
|
|
34
|
-
vibe telegram <cmd> Telegram (setup, chat, status)
|
|
35
|
-
vibe slack <cmd> Slack (setup, channel, status)
|
|
36
|
-
|
|
37
|
-
Slash Commands (Claude Code):
|
|
38
|
-
/vibe.spec "feature" SPEC 작성 + 리서치
|
|
39
|
-
/vibe.run "feature" 구현 실행
|
|
40
|
-
/vibe.verify "feature" BDD 검증
|
|
41
|
-
/vibe.review 병렬 코드 리뷰 (13+ agents)
|
|
42
|
-
/vibe.reason "problem" 체계적 추론
|
|
43
|
-
/vibe.analyze 프로젝트 분석
|
|
44
|
-
/vibe.trace "feature" 요구사항 추적 매트릭스
|
|
45
|
-
/vibe.utils 유틸리티 (--e2e, --diagram, --continue)
|
|
46
|
-
|
|
47
|
-
Docs: https://github.com/su-record/vibe
|
|
13
|
+
console.log(`
|
|
14
|
+
VIBE - Personalized AI Agent (Claude Code exclusive)
|
|
15
|
+
|
|
16
|
+
Commands:
|
|
17
|
+
vibe setup 셋업 위자드 (인증, 채널, 설정 한번에)
|
|
18
|
+
vibe init [project] 프로젝트 초기화
|
|
19
|
+
vibe update 설정 업데이트
|
|
20
|
+
vibe upgrade 최신 버전으로 업그레이드
|
|
21
|
+
vibe remove 프로젝트에서 제거
|
|
22
|
+
vibe status 전체 상태 확인
|
|
23
|
+
|
|
24
|
+
LLM:
|
|
25
|
+
vibe claude <cmd> Claude (key, status, logout)
|
|
26
|
+
vibe gpt <cmd> GPT (auth, key, status, logout)
|
|
27
|
+
vibe gemini <cmd> Gemini (auth, key, status, logout)
|
|
28
|
+
vibe env import [path] .env → ~/.vibe/config.json 가져오기
|
|
29
|
+
|
|
30
|
+
Skills:
|
|
31
|
+
vibe skills add <pkg> Install skill from skills.sh
|
|
32
|
+
|
|
33
|
+
Channels:
|
|
34
|
+
vibe telegram <cmd> Telegram (setup, chat, status)
|
|
35
|
+
vibe slack <cmd> Slack (setup, channel, status)
|
|
36
|
+
|
|
37
|
+
Slash Commands (Claude Code):
|
|
38
|
+
/vibe.spec "feature" SPEC 작성 + 리서치
|
|
39
|
+
/vibe.run "feature" 구현 실행
|
|
40
|
+
/vibe.verify "feature" BDD 검증
|
|
41
|
+
/vibe.review 병렬 코드 리뷰 (13+ agents)
|
|
42
|
+
/vibe.reason "problem" 체계적 추론
|
|
43
|
+
/vibe.analyze 프로젝트 분석
|
|
44
|
+
/vibe.trace "feature" 요구사항 추적 매트릭스
|
|
45
|
+
/vibe.utils 유틸리티 (--e2e, --diagram, --continue)
|
|
46
|
+
|
|
47
|
+
Docs: https://github.com/su-record/vibe
|
|
48
48
|
`);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
@@ -70,52 +70,16 @@ export function showStatus() {
|
|
|
70
70
|
const projectStatus = isCoreProject
|
|
71
71
|
? `✅ ${projectRoot}`
|
|
72
72
|
: `⬚ Not a core project (run: vibe init)`;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const dbPath = path.join(coreDir, 'memory.db');
|
|
84
|
-
if (fs.existsSync(dbPath)) {
|
|
85
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
86
|
-
const Database = require('better-sqlite3');
|
|
87
|
-
const db = new Database(dbPath, { readonly: true });
|
|
88
|
-
const last24h = new Date(Date.now() - 86_400_000).toISOString();
|
|
89
|
-
let totalActions = 0;
|
|
90
|
-
let blockedActions = 0;
|
|
91
|
-
try {
|
|
92
|
-
totalActions = db.prepare('SELECT COUNT(*) as c FROM audit_events WHERE createdAt >= ?').get(last24h)?.c ?? 0;
|
|
93
|
-
blockedActions = db.prepare("SELECT COUNT(*) as c FROM audit_events WHERE createdAt >= ? AND outcome = 'blocked'").get(last24h)?.c ?? 0;
|
|
94
|
-
}
|
|
95
|
-
catch { /* table may not exist */ }
|
|
96
|
-
if (totalActions > 0) {
|
|
97
|
-
dbStats = ` Last 24h: ${totalActions} actions (${blockedActions} blocked)\n`;
|
|
98
|
-
}
|
|
99
|
-
db.close();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch { /* DB not available */ }
|
|
103
|
-
console.log(`
|
|
104
|
-
VIBE Status (v${packageJson.version})
|
|
105
|
-
|
|
106
|
-
Project: ${projectStatus}
|
|
107
|
-
${isCoreProject ? `Language: ${config.language || 'ko'}` : ''}
|
|
108
|
-
|
|
109
|
-
LLM:
|
|
110
|
-
Claude ${claudeStatusText}
|
|
111
|
-
GPT ${gptStatusText}
|
|
112
|
-
Gemini ${geminiStatusText}
|
|
113
|
-
|
|
114
|
-
Agent:
|
|
115
|
-
Autonomy ${autonomyMode} mode
|
|
116
|
-
Sentinel ${sentinelOn ? 'ON' : 'OFF'}
|
|
117
|
-
Proactive ${proactiveOn ? 'ON' : 'OFF'}
|
|
118
|
-
${dbStats}
|
|
73
|
+
console.log(`
|
|
74
|
+
VIBE Status (v${packageJson.version})
|
|
75
|
+
|
|
76
|
+
Project: ${projectStatus}
|
|
77
|
+
${isCoreProject ? `Language: ${config.language || 'ko'}` : ''}
|
|
78
|
+
|
|
79
|
+
LLM:
|
|
80
|
+
Claude ${claudeStatusText}
|
|
81
|
+
GPT ${gptStatusText}
|
|
82
|
+
Gemini ${geminiStatusText}
|
|
119
83
|
`);
|
|
120
84
|
}
|
|
121
85
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,MAAM,GAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClF,IAAI,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAEtC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEnF,UAAU;IACV,MAAM,aAAa,GAAG,aAAa;QACjC,CAAC,CAAC,KAAK,WAAW,EAAE;QACpB,CAAC,CAAC,uCAAuC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC;gBACE,WAAW,CAAC,OAAO;;WAExB,aAAa;EACtB,aAAa,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;oBAGzC,gBAAgB;oBAChB,aAAa;oBACb,gBAAgB;GACjC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -264,11 +264,11 @@ export async function init(projectName) {
|
|
|
264
264
|
const packageJson = getPackageJson();
|
|
265
265
|
const authStatus = getLLMAuthStatus();
|
|
266
266
|
const claudeStatus = getClaudeCodeStatus(true);
|
|
267
|
-
log(`✅ vibe initialized (v${packageJson.version})
|
|
268
|
-
${formatLLMStatus(claudeStatus)}
|
|
269
|
-
📦 Context7 plugin (recommended): /plugin install context7
|
|
270
|
-
|
|
271
|
-
Next: ${isNewProject ? `cd ${projectName} && ` : ''}/vibe.spec "feature"
|
|
267
|
+
log(`✅ vibe initialized (v${packageJson.version})
|
|
268
|
+
${formatLLMStatus(claudeStatus)}
|
|
269
|
+
📦 Context7 plugin (recommended): /plugin install context7
|
|
270
|
+
|
|
271
|
+
Next: ${isNewProject ? `cd ${projectName} && ` : ''}/vibe.spec "feature"
|
|
272
272
|
`);
|
|
273
273
|
}
|
|
274
274
|
catch (error) {
|
|
@@ -123,20 +123,20 @@ export function remove() {
|
|
|
123
123
|
console.log(` ✅ Cursor rules template removed (${removedRules})\n`);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
console.log(`
|
|
127
|
-
✅ vibe removed!
|
|
128
|
-
|
|
129
|
-
Removed:
|
|
130
|
-
- MCP server (context7)
|
|
131
|
-
- .claude/vibe/ folder
|
|
132
|
-
- Slash commands (7)
|
|
133
|
-
- Subagents (5)
|
|
134
|
-
- Hooks settings
|
|
135
|
-
- Cursor agents (12)
|
|
136
|
-
- Cursor skills (7)
|
|
137
|
-
- Cursor rules template (5)
|
|
138
|
-
|
|
139
|
-
To reinstall: vibe init
|
|
126
|
+
console.log(`
|
|
127
|
+
✅ vibe removed!
|
|
128
|
+
|
|
129
|
+
Removed:
|
|
130
|
+
- MCP server (context7)
|
|
131
|
+
- .claude/vibe/ folder
|
|
132
|
+
- Slash commands (7)
|
|
133
|
+
- Subagents (5)
|
|
134
|
+
- Hooks settings
|
|
135
|
+
- Cursor agents (12)
|
|
136
|
+
- Cursor skills (7)
|
|
137
|
+
- Cursor rules template (5)
|
|
138
|
+
|
|
139
|
+
To reinstall: vibe init
|
|
140
140
|
`);
|
|
141
141
|
}
|
|
142
142
|
//# sourceMappingURL=remove.js.map
|