@kosuke-ai/cli 0.0.56 โ 1.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/README.md +31 -448
- package/dist/commands/auth.js +117 -0
- package/dist/generated/commands/deploy/cancel.js +17 -0
- package/dist/generated/commands/deploy/messages.js +17 -0
- package/dist/generated/commands/deploy/run.js +60 -0
- package/dist/generated/commands/index.js +132 -0
- package/dist/generated/commands/preview/get.js +25 -0
- package/dist/generated/commands/preview/health.js +25 -0
- package/dist/generated/commands/preview/reset.js +27 -0
- package/dist/generated/commands/preview/share-create.js +36 -0
- package/dist/generated/commands/preview/share-delete.js +26 -0
- package/dist/generated/commands/preview/share-get.js +26 -0
- package/dist/generated/commands/preview/shared.js +17 -0
- package/dist/generated/commands/projects/create.js +37 -0
- package/dist/generated/commands/projects/delete.js +17 -0
- package/dist/generated/commands/projects/env-vars-add.js +21 -0
- package/dist/generated/commands/projects/env-vars-remove.js +21 -0
- package/dist/generated/commands/projects/get.js +17 -0
- package/dist/generated/commands/projects/list.js +15 -0
- package/dist/generated/commands/projects/services-add.js +87 -0
- package/dist/generated/commands/projects/services-list.js +18 -0
- package/dist/generated/commands/projects/services-remove.js +19 -0
- package/dist/generated/commands/projects/services-update.js +81 -0
- package/dist/generated/commands/projects/settings-get.js +18 -0
- package/dist/generated/commands/projects/settings-import.js +91 -0
- package/dist/generated/commands/projects/settings-update.js +77 -0
- package/dist/generated/commands/projects/skills.js +35 -0
- package/dist/generated/commands/projects/update.js +27 -0
- package/dist/generated/commands/sessions/activate.js +18 -0
- package/dist/generated/commands/sessions/checklist-generate.js +19 -0
- package/dist/generated/commands/sessions/checklist-get.js +19 -0
- package/dist/generated/commands/sessions/comments-add.js +63 -0
- package/dist/generated/commands/sessions/comments-delete.js +20 -0
- package/dist/generated/commands/sessions/comments-list.js +19 -0
- package/dist/generated/commands/sessions/comments-update.js +23 -0
- package/dist/generated/commands/sessions/create.js +126 -0
- package/dist/generated/commands/sessions/delete.js +18 -0
- package/dist/generated/commands/sessions/diff-files.js +19 -0
- package/dist/generated/commands/sessions/diff-patch.js +86 -0
- package/dist/generated/commands/sessions/edit-prompt.js +59 -0
- package/dist/generated/commands/sessions/files-get.js +27 -0
- package/dist/generated/commands/sessions/files-list.js +19 -0
- package/dist/generated/commands/sessions/files-write.js +41 -0
- package/dist/generated/commands/sessions/get.js +18 -0
- package/dist/generated/commands/sessions/git-commit-message.js +19 -0
- package/dist/generated/commands/sessions/git-commit.js +29 -0
- package/dist/generated/commands/sessions/git-push.js +19 -0
- package/dist/generated/commands/sessions/git-state.js +19 -0
- package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
- package/dist/generated/commands/sessions/jobs-get.js +20 -0
- package/dist/generated/commands/sessions/list.js +81 -0
- package/dist/generated/commands/sessions/messages.js +18 -0
- package/dist/generated/commands/sessions/search.js +23 -0
- package/dist/generated/commands/sessions/send.js +98 -0
- package/dist/generated/commands/sessions/update.js +72 -0
- package/dist/generated/commands/workspaces/access-status.js +29 -0
- package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
- package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
- package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
- package/dist/generated/commands/workspaces/credits.js +17 -0
- package/dist/generated/commands/workspaces/get.js +17 -0
- package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
- package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
- package/dist/generated/commands/workspaces/list.js +15 -0
- package/dist/generated/commands/workspaces/members.js +25 -0
- package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
- package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
- package/dist/generated/commands/workspaces/usage.js +32 -0
- package/dist/index.js +5 -516
- package/dist/program.js +46 -0
- package/dist/runtime/attach.js +139 -0
- package/dist/runtime/attachments.js +58 -0
- package/dist/runtime/client.js +12 -0
- package/dist/runtime/config.js +49 -0
- package/dist/runtime/credentials.js +24 -0
- package/dist/runtime/descriptor.js +7 -0
- package/dist/runtime/invoke.js +152 -0
- package/dist/runtime/runtime.js +41 -0
- package/dist/runtime/version.js +5 -0
- package/openapi.json +5222 -0
- package/package.json +21 -79
- package/LICENSE +0 -21
- package/claude.costs.json +0 -34
- package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
- package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
- package/dist/__tests__/utils/file-discovery.test.js +0 -51
- package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
- package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.js +0 -34
- package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
- package/dist/__tests__/utils/logger.test.d.ts +0 -5
- package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger.test.js +0 -243
- package/dist/__tests__/utils/logger.test.js.map +0 -1
- package/dist/__tests__/utils/validator.test.d.ts +0 -5
- package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
- package/dist/__tests__/utils/validator.test.js +0 -206
- package/dist/__tests__/utils/validator.test.js.map +0 -1
- package/dist/index.d.ts +0 -35
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kosuke/commands/analyse.d.ts +0 -15
- package/dist/kosuke/commands/analyse.d.ts.map +0 -1
- package/dist/kosuke/commands/analyse.js +0 -273
- package/dist/kosuke/commands/analyse.js.map +0 -1
- package/dist/kosuke/commands/build.d.ts +0 -35
- package/dist/kosuke/commands/build.d.ts.map +0 -1
- package/dist/kosuke/commands/build.js +0 -659
- package/dist/kosuke/commands/build.js.map +0 -1
- package/dist/kosuke/commands/getcode.d.ts +0 -29
- package/dist/kosuke/commands/getcode.d.ts.map +0 -1
- package/dist/kosuke/commands/getcode.js +0 -221
- package/dist/kosuke/commands/getcode.js.map +0 -1
- package/dist/kosuke/commands/lint.d.ts +0 -21
- package/dist/kosuke/commands/lint.d.ts.map +0 -1
- package/dist/kosuke/commands/lint.js +0 -321
- package/dist/kosuke/commands/lint.js.map +0 -1
- package/dist/kosuke/commands/migrate.d.ts +0 -38
- package/dist/kosuke/commands/migrate.d.ts.map +0 -1
- package/dist/kosuke/commands/migrate.js +0 -284
- package/dist/kosuke/commands/migrate.js.map +0 -1
- package/dist/kosuke/commands/plan.d.ts +0 -28
- package/dist/kosuke/commands/plan.d.ts.map +0 -1
- package/dist/kosuke/commands/plan.js +0 -630
- package/dist/kosuke/commands/plan.js.map +0 -1
- package/dist/kosuke/commands/requirements.d.ts +0 -52
- package/dist/kosuke/commands/requirements.d.ts.map +0 -1
- package/dist/kosuke/commands/requirements.js +0 -615
- package/dist/kosuke/commands/requirements.js.map +0 -1
- package/dist/kosuke/commands/review.d.ts +0 -26
- package/dist/kosuke/commands/review.d.ts.map +0 -1
- package/dist/kosuke/commands/review.js +0 -303
- package/dist/kosuke/commands/review.js.map +0 -1
- package/dist/kosuke/commands/serve.d.ts +0 -9
- package/dist/kosuke/commands/serve.d.ts.map +0 -1
- package/dist/kosuke/commands/serve.js +0 -17
- package/dist/kosuke/commands/serve.js.map +0 -1
- package/dist/kosuke/commands/ship.d.ts +0 -37
- package/dist/kosuke/commands/ship.d.ts.map +0 -1
- package/dist/kosuke/commands/ship.js +0 -375
- package/dist/kosuke/commands/ship.js.map +0 -1
- package/dist/kosuke/commands/sync-rules.d.ts +0 -9
- package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
- package/dist/kosuke/commands/sync-rules.js +0 -379
- package/dist/kosuke/commands/sync-rules.js.map +0 -1
- package/dist/kosuke/commands/test.d.ts +0 -42
- package/dist/kosuke/commands/test.d.ts.map +0 -1
- package/dist/kosuke/commands/test.js +0 -540
- package/dist/kosuke/commands/test.js.map +0 -1
- package/dist/kosuke/commands/tickets.d.ts +0 -43
- package/dist/kosuke/commands/tickets.d.ts.map +0 -1
- package/dist/kosuke/commands/tickets.js +0 -499
- package/dist/kosuke/commands/tickets.js.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
- package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.js +0 -42
- package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
- package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
- package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/validation.js +0 -38
- package/dist/kosuke/serve/middleware/validation.js.map +0 -1
- package/dist/kosuke/serve/routes/build.d.ts +0 -6
- package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/build.js +0 -226
- package/dist/kosuke/serve/routes/build.js.map +0 -1
- package/dist/kosuke/serve/routes/health.d.ts +0 -6
- package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/health.js +0 -11
- package/dist/kosuke/serve/routes/health.js.map +0 -1
- package/dist/kosuke/serve/routes/plan.d.ts +0 -6
- package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/plan.js +0 -106
- package/dist/kosuke/serve/routes/plan.js.map +0 -1
- package/dist/kosuke/serve/server.d.ts +0 -16
- package/dist/kosuke/serve/server.d.ts.map +0 -1
- package/dist/kosuke/serve/server.js +0 -67
- package/dist/kosuke/serve/server.js.map +0 -1
- package/dist/kosuke/serve/validation/build.d.ts +0 -41
- package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/build.js +0 -20
- package/dist/kosuke/serve/validation/build.js.map +0 -1
- package/dist/kosuke/serve/validation/plan.d.ts +0 -26
- package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/plan.js +0 -15
- package/dist/kosuke/serve/validation/plan.js.map +0 -1
- package/dist/kosuke/types.d.ts +0 -469
- package/dist/kosuke/types.d.ts.map +0 -1
- package/dist/kosuke/types.js +0 -5
- package/dist/kosuke/types.js.map +0 -1
- package/dist/kosuke/utils/batch-creator.d.ts +0 -14
- package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
- package/dist/kosuke/utils/batch-creator.js +0 -76
- package/dist/kosuke/utils/batch-creator.js.map +0 -1
- package/dist/kosuke/utils/claude-agent.d.ts +0 -145
- package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
- package/dist/kosuke/utils/claude-agent.js +0 -504
- package/dist/kosuke/utils/claude-agent.js.map +0 -1
- package/dist/kosuke/utils/constants.d.ts +0 -40
- package/dist/kosuke/utils/constants.d.ts.map +0 -1
- package/dist/kosuke/utils/constants.js +0 -54
- package/dist/kosuke/utils/constants.js.map +0 -1
- package/dist/kosuke/utils/file-discovery.d.ts +0 -15
- package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
- package/dist/kosuke/utils/file-discovery.js +0 -80
- package/dist/kosuke/utils/file-discovery.js.map +0 -1
- package/dist/kosuke/utils/git.d.ts +0 -41
- package/dist/kosuke/utils/git.d.ts.map +0 -1
- package/dist/kosuke/utils/git.js +0 -145
- package/dist/kosuke/utils/git.js.map +0 -1
- package/dist/kosuke/utils/github.d.ts +0 -17
- package/dist/kosuke/utils/github.d.ts.map +0 -1
- package/dist/kosuke/utils/github.js +0 -22
- package/dist/kosuke/utils/github.js.map +0 -1
- package/dist/kosuke/utils/interactive-input.d.ts +0 -22
- package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
- package/dist/kosuke/utils/interactive-input.js +0 -124
- package/dist/kosuke/utils/interactive-input.js.map +0 -1
- package/dist/kosuke/utils/logger.d.ts +0 -161
- package/dist/kosuke/utils/logger.d.ts.map +0 -1
- package/dist/kosuke/utils/logger.js +0 -234
- package/dist/kosuke/utils/logger.js.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
- package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
- package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
- package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.js +0 -154
- package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
- package/dist/kosuke/utils/repository-manager.d.ts +0 -13
- package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-manager.js +0 -94
- package/dist/kosuke/utils/repository-manager.js.map +0 -1
- package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
- package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-resolver.js +0 -186
- package/dist/kosuke/utils/repository-resolver.js.map +0 -1
- package/dist/kosuke/utils/tickets-manager.d.ts +0 -64
- package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/tickets-manager.js +0 -331
- package/dist/kosuke/utils/tickets-manager.js.map +0 -1
- package/dist/kosuke/utils/validator.d.ts +0 -45
- package/dist/kosuke/utils/validator.d.ts.map +0 -1
- package/dist/kosuke/utils/validator.js +0 -248
- package/dist/kosuke/utils/validator.js.map +0 -1
- package/dist/lib.d.ts +0 -96
- package/dist/lib.d.ts.map +0 -1
- package/dist/lib.js +0 -95
- package/dist/lib.js.map +0 -1
- package/dist/package.json +0 -99
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sync rules command - Syncs rules and documentation from kosuke-template
|
|
3
|
-
*/
|
|
4
|
-
import simpleGit from 'simple-git';
|
|
5
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, rmSync } from 'fs';
|
|
6
|
-
import { join, dirname } from 'path';
|
|
7
|
-
import { isKosukeTemplateRepo } from '../utils/git.js';
|
|
8
|
-
import { runWithPR } from '../utils/pr-orchestrator.js';
|
|
9
|
-
import { runFormat, runLint } from '../utils/validator.js';
|
|
10
|
-
import { runAgent } from '../utils/claude-agent.js';
|
|
11
|
-
import { fixLintErrors } from './lint.js';
|
|
12
|
-
import { REPOS_DIR } from '../utils/constants.js';
|
|
13
|
-
// Constants
|
|
14
|
-
const KOSUKE_TEMPLATE_REPO = 'https://github.com/Kosuke-Org/kosuke-template.git';
|
|
15
|
-
const KOSUKE_TEMPLATE_BRANCH = 'main';
|
|
16
|
-
const TEMP_DIR = `${REPOS_DIR}/template`;
|
|
17
|
-
const RULES_FILE = '.cursor/rules/general.mdc';
|
|
18
|
-
const CLAUDE_MD_FILE = 'CLAUDE.md';
|
|
19
|
-
/**
|
|
20
|
-
* Clone or update kosuke-template repository
|
|
21
|
-
*/
|
|
22
|
-
async function cloneOrUpdateKosukeTemplate() {
|
|
23
|
-
const git = simpleGit();
|
|
24
|
-
if (existsSync(TEMP_DIR)) {
|
|
25
|
-
console.log('๐ Updating existing kosuke-template clone...');
|
|
26
|
-
const repoGit = simpleGit(TEMP_DIR);
|
|
27
|
-
await repoGit.fetch(['origin', KOSUKE_TEMPLATE_BRANCH, '--depth=100']);
|
|
28
|
-
await repoGit.checkout(KOSUKE_TEMPLATE_BRANCH);
|
|
29
|
-
await repoGit.pull('origin', KOSUKE_TEMPLATE_BRANCH);
|
|
30
|
-
return repoGit;
|
|
31
|
-
}
|
|
32
|
-
console.log('๐ฅ Cloning kosuke-template repository...');
|
|
33
|
-
mkdirSync(TEMP_DIR, { recursive: true });
|
|
34
|
-
await git.clone(KOSUKE_TEMPLATE_REPO, TEMP_DIR, [
|
|
35
|
-
'--depth',
|
|
36
|
-
'100',
|
|
37
|
-
'--branch',
|
|
38
|
-
KOSUKE_TEMPLATE_BRANCH,
|
|
39
|
-
]);
|
|
40
|
-
return simpleGit(TEMP_DIR);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Check if rules file changed in last 24 hours
|
|
44
|
-
*/
|
|
45
|
-
async function checkRulesChangedInLast24Hours(git) {
|
|
46
|
-
const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
|
|
47
|
-
// Get all commits in last 24 hours
|
|
48
|
-
const log = await git.log({
|
|
49
|
-
maxCount: 100,
|
|
50
|
-
'--since': oneDayAgo,
|
|
51
|
-
});
|
|
52
|
-
for (const commit of log.all) {
|
|
53
|
-
// Check if rules file was modified in this commit
|
|
54
|
-
const diffSummary = await git.diffSummary([`${commit.hash}^`, commit.hash]);
|
|
55
|
-
for (const file of diffSummary.files) {
|
|
56
|
-
if (file.file === RULES_FILE) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Adapt rules conservatively with Claude Agent SDK
|
|
65
|
-
*/
|
|
66
|
-
async function adaptRulesWithClaude(fileName, currentContent) {
|
|
67
|
-
console.log(`๐ค Analyzing ${fileName} with Claude Agent SDK...`);
|
|
68
|
-
const workspaceRoot = process.cwd();
|
|
69
|
-
const kosukeFilePath = join(TEMP_DIR, fileName); // Kosuke-template clone
|
|
70
|
-
const currentFilePath = join(workspaceRoot, fileName); // Current repository
|
|
71
|
-
const systemPrompt = `You are syncing rules/documentation from kosuke-template to a forked repository.
|
|
72
|
-
|
|
73
|
-
TASK:
|
|
74
|
-
Compare kosuke-template's version of ${fileName} with the current repository's version.
|
|
75
|
-
|
|
76
|
-
Your job is to:
|
|
77
|
-
1. Explore the current repository to understand its architecture, tech stack, and features
|
|
78
|
-
2. Read both versions of ${fileName} (kosuke-template vs current)
|
|
79
|
-
3. Adapt the current repository's file with conservative improvements:
|
|
80
|
-
- KEEP repository-specific customizations
|
|
81
|
-
- ADD generic improvements (TypeScript patterns, testing, code quality)
|
|
82
|
-
- SKIP features not present in this repository (discover by exploring the codebase)
|
|
83
|
-
- ADAPT examples to match the repository's domain and features
|
|
84
|
-
|
|
85
|
-
Kosuke-template clone: ${TEMP_DIR}
|
|
86
|
-
Current repository: ${workspaceRoot}
|
|
87
|
-
|
|
88
|
-
Take your time to explore the codebase and understand the context before making changes.`;
|
|
89
|
-
const promptText = `Compare and adapt ${fileName}:
|
|
90
|
-
- Kosuke-template version: ${kosukeFilePath}
|
|
91
|
-
- Current version: ${currentFilePath}
|
|
92
|
-
|
|
93
|
-
Explore the repository, read both files, identify improvements, and update the current version conservatively.`;
|
|
94
|
-
try {
|
|
95
|
-
// Note: Claude Agent SDK doesn't support additionalDirectories in AgentConfig
|
|
96
|
-
// The agent can access TEMP_DIR via relative paths from workspaceRoot
|
|
97
|
-
await runAgent(promptText, {
|
|
98
|
-
systemPrompt,
|
|
99
|
-
maxTurns: 30,
|
|
100
|
-
cwd: workspaceRoot,
|
|
101
|
-
verbosity: 'verbose',
|
|
102
|
-
settingSources: [], // Don't load CLAUDE.md when syncing it
|
|
103
|
-
});
|
|
104
|
-
// Read the adapted content
|
|
105
|
-
const adaptedContent = existsSync(currentFilePath)
|
|
106
|
-
? readFileSync(currentFilePath, 'utf-8')
|
|
107
|
-
: '';
|
|
108
|
-
// Check if content actually changed
|
|
109
|
-
const relevant = adaptedContent !== currentContent;
|
|
110
|
-
const adaptation = {
|
|
111
|
-
relevant,
|
|
112
|
-
adaptedContent,
|
|
113
|
-
summary: relevant ? 'Updated with improvements from kosuke-template' : 'No changes needed',
|
|
114
|
-
};
|
|
115
|
-
console.log(`\n ${relevant ? 'โ
File updated' : 'โน๏ธ No changes needed'}`);
|
|
116
|
-
return adaptation;
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
console.error(`\n โ Error during adaptation:`, error);
|
|
120
|
-
throw error;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Generate CLAUDE.md from general.mdc (strip frontmatter)
|
|
125
|
-
*/
|
|
126
|
-
function generateClaudeMd(generalMdcContent) {
|
|
127
|
-
const lines = generalMdcContent.split('\n');
|
|
128
|
-
// Detect frontmatter: starts with --- and ends with ---
|
|
129
|
-
if (lines[0] === '---') {
|
|
130
|
-
// Find the closing --- (starts from line 1, not 0)
|
|
131
|
-
for (let i = 1; i < lines.length; i++) {
|
|
132
|
-
if (lines[i] === '---') {
|
|
133
|
-
// Skip the closing --- and any empty lines after it
|
|
134
|
-
let skipLines = i + 1;
|
|
135
|
-
while (skipLines < lines.length && lines[skipLines].trim() === '') {
|
|
136
|
-
skipLines++;
|
|
137
|
-
}
|
|
138
|
-
return lines.slice(skipLines).join('\n');
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// No frontmatter detected, return as-is
|
|
143
|
-
return generalMdcContent;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Generate concise summary of changes using Claude
|
|
147
|
-
*/
|
|
148
|
-
async function generateChangesSummary(oldContent, newContent) {
|
|
149
|
-
console.log('๐ค Generating changes summary...');
|
|
150
|
-
const prompt = `Compare these two versions of a development rules file and provide a CONCISE summary of what changed.
|
|
151
|
-
|
|
152
|
-
OLD VERSION:
|
|
153
|
-
\`\`\`
|
|
154
|
-
${oldContent.slice(0, 5000)}${oldContent.length > 5000 ? '\n... (truncated)' : ''}
|
|
155
|
-
\`\`\`
|
|
156
|
-
|
|
157
|
-
NEW VERSION:
|
|
158
|
-
\`\`\`
|
|
159
|
-
${newContent.slice(0, 5000)}${newContent.length > 5000 ? '\n... (truncated)' : ''}
|
|
160
|
-
\`\`\`
|
|
161
|
-
|
|
162
|
-
Provide a brief summary (3-5 bullet points) highlighting:
|
|
163
|
-
- New features or guidelines added
|
|
164
|
-
- Significant updates to existing rules
|
|
165
|
-
- Removed or deprecated items
|
|
166
|
-
|
|
167
|
-
Keep it concise and developer-friendly. Use bullet points starting with emojis.`;
|
|
168
|
-
try {
|
|
169
|
-
const result = await runAgent(prompt, {
|
|
170
|
-
maxTurns: 1,
|
|
171
|
-
cwd: process.cwd(),
|
|
172
|
-
verbosity: 'minimal',
|
|
173
|
-
systemPrompt: '', // No system prompt needed for this simple task
|
|
174
|
-
settingSources: [], // Don't load CLAUDE.md when syncing it
|
|
175
|
-
});
|
|
176
|
-
console.log(' โ
Summary generated\n');
|
|
177
|
-
return result.response.trim();
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
console.warn(' โ ๏ธ Failed to generate summary, using fallback');
|
|
181
|
-
return 'Updated rules and documentation from kosuke-template';
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Core sync logic (git-agnostic)
|
|
186
|
-
*/
|
|
187
|
-
async function syncRulesCore(force) {
|
|
188
|
-
// Clone/update kosuke-template
|
|
189
|
-
const git = await cloneOrUpdateKosukeTemplate();
|
|
190
|
-
if (force) {
|
|
191
|
-
console.log('โก Force mode: Comparing rules file...\n');
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
// Check if rules file changed in last 24 hours
|
|
195
|
-
console.log('๐
Checking for changes in last 24 hours...');
|
|
196
|
-
const hasChanges = await checkRulesChangedInLast24Hours(git);
|
|
197
|
-
if (!hasChanges) {
|
|
198
|
-
console.log('โ
No changes to rules in last 24 hours. Nothing to sync.');
|
|
199
|
-
console.log(' Use --force flag to compare files regardless of recent commits.');
|
|
200
|
-
throw new Error('No recent changes');
|
|
201
|
-
}
|
|
202
|
-
console.log(` โ
Found changes in ${RULES_FILE}\n`);
|
|
203
|
-
}
|
|
204
|
-
// Read current repository versions
|
|
205
|
-
const workspaceRoot = process.cwd();
|
|
206
|
-
const kosukeFile = join(TEMP_DIR, RULES_FILE);
|
|
207
|
-
const currentFile = join(workspaceRoot, RULES_FILE);
|
|
208
|
-
if (!existsSync(kosukeFile)) {
|
|
209
|
-
throw new Error(`${RULES_FILE} not found in kosuke-template`);
|
|
210
|
-
}
|
|
211
|
-
const kosukeContent = readFileSync(kosukeFile, 'utf-8');
|
|
212
|
-
const currentContent = existsSync(currentFile) ? readFileSync(currentFile, 'utf-8') : '';
|
|
213
|
-
// Check if content is actually different
|
|
214
|
-
if (kosukeContent === currentContent) {
|
|
215
|
-
console.log(`โน๏ธ No differences detected in ${RULES_FILE}. Nothing to sync.`);
|
|
216
|
-
throw new Error('No differences detected');
|
|
217
|
-
}
|
|
218
|
-
console.log(`๐ฅ Processing ${RULES_FILE}...`);
|
|
219
|
-
const adaptation = await adaptRulesWithClaude(RULES_FILE, currentContent);
|
|
220
|
-
// Abort if no changes
|
|
221
|
-
if (!adaptation.relevant) {
|
|
222
|
-
console.log('โ
No relevant changes to sync. Aborting.');
|
|
223
|
-
throw new Error('No relevant changes');
|
|
224
|
-
}
|
|
225
|
-
// Generate CLAUDE.md from adapted general.mdc
|
|
226
|
-
console.log(`\n๐ Generating ${CLAUDE_MD_FILE} from ${RULES_FILE}...`);
|
|
227
|
-
const claudeMdContent = generateClaudeMd(adaptation.adaptedContent);
|
|
228
|
-
// Generate LLM summary of changes
|
|
229
|
-
const changesSummary = await generateChangesSummary(currentContent, adaptation.adaptedContent);
|
|
230
|
-
// Write files locally
|
|
231
|
-
const workspaceRootPath = process.cwd();
|
|
232
|
-
console.log('๐ Writing adapted files...');
|
|
233
|
-
// Write general.mdc
|
|
234
|
-
const rulesFile = join(workspaceRootPath, RULES_FILE);
|
|
235
|
-
const rulesDir = dirname(rulesFile);
|
|
236
|
-
if (!existsSync(rulesDir)) {
|
|
237
|
-
mkdirSync(rulesDir, { recursive: true });
|
|
238
|
-
}
|
|
239
|
-
writeFileSync(rulesFile, adaptation.adaptedContent, 'utf-8');
|
|
240
|
-
console.log(` โ
${RULES_FILE}`);
|
|
241
|
-
// Write CLAUDE.md (stripped version)
|
|
242
|
-
const claudeFile = join(workspaceRootPath, CLAUDE_MD_FILE);
|
|
243
|
-
writeFileSync(claudeFile, claudeMdContent, 'utf-8');
|
|
244
|
-
console.log(` โ
${CLAUDE_MD_FILE}`);
|
|
245
|
-
// Run formatting and linting
|
|
246
|
-
console.log('\n๐ง Running formatting and linting...');
|
|
247
|
-
const formatResult = await runFormat();
|
|
248
|
-
if (formatResult.warning) {
|
|
249
|
-
console.log(` ${formatResult.warning}`);
|
|
250
|
-
}
|
|
251
|
-
else if (!formatResult.success) {
|
|
252
|
-
console.error(' โ Formatting failed:\n', formatResult.error);
|
|
253
|
-
throw new Error('Formatting validation failed');
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
console.log(' โ
Formatting completed');
|
|
257
|
-
}
|
|
258
|
-
let lintResult = await runLint();
|
|
259
|
-
if (lintResult.warning) {
|
|
260
|
-
console.log(` ${lintResult.warning}`);
|
|
261
|
-
}
|
|
262
|
-
else if (!lintResult.success) {
|
|
263
|
-
console.log(' โ ๏ธ Linting errors detected, attempting to fix...');
|
|
264
|
-
// Try to fix lint errors with Claude (max 2 attempts)
|
|
265
|
-
let attempts = 0;
|
|
266
|
-
const maxAttempts = 2;
|
|
267
|
-
while (!lintResult.success && attempts < maxAttempts) {
|
|
268
|
-
attempts++;
|
|
269
|
-
console.log(`\n ๐ Lint fix attempt ${attempts}/${maxAttempts}`);
|
|
270
|
-
const fixApplied = await fixLintErrors(lintResult.error || '');
|
|
271
|
-
if (!fixApplied) {
|
|
272
|
-
console.log(` โ ๏ธ No fixes were applied by Claude`);
|
|
273
|
-
break;
|
|
274
|
-
}
|
|
275
|
-
// Re-run lint to check if errors are fixed
|
|
276
|
-
lintResult = await runLint();
|
|
277
|
-
}
|
|
278
|
-
if (!lintResult.success) {
|
|
279
|
-
console.error(' โ Linting failed after attempts:\n', lintResult.error);
|
|
280
|
-
throw new Error('Linting validation failed');
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
console.log(' โ
Linting completed');
|
|
285
|
-
}
|
|
286
|
-
return {
|
|
287
|
-
adaptation,
|
|
288
|
-
claudeMdContent,
|
|
289
|
-
changesSummary,
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Main sync-rules command
|
|
294
|
-
*/
|
|
295
|
-
export async function syncRulesCommand(options = {}) {
|
|
296
|
-
console.log('๐ Starting Rules & Documentation Sync...\n');
|
|
297
|
-
try {
|
|
298
|
-
// Check if running in kosuke-template itself
|
|
299
|
-
if (await isKosukeTemplateRepo()) {
|
|
300
|
-
console.log('โ ๏ธ Detected running in kosuke-template repository itself.');
|
|
301
|
-
console.log(' This script is designed to sync FROM kosuke-template TO forked repos.');
|
|
302
|
-
console.log(' Skipping sync to prevent self-modification.\n');
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
// Validate environment
|
|
306
|
-
if (!process.env.ANTHROPIC_API_KEY) {
|
|
307
|
-
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
308
|
-
}
|
|
309
|
-
// If --pr flag is provided, wrap with PR workflow
|
|
310
|
-
if (options.pr) {
|
|
311
|
-
if (!process.env.GITHUB_TOKEN) {
|
|
312
|
-
throw new Error('GITHUB_TOKEN environment variable is required for --pr flag');
|
|
313
|
-
}
|
|
314
|
-
const date = new Date().toISOString().split('T')[0];
|
|
315
|
-
try {
|
|
316
|
-
const { result, prInfo } = await runWithPR({
|
|
317
|
-
branchPrefix: 'sync/rules',
|
|
318
|
-
baseBranch: options.baseBranch,
|
|
319
|
-
commitMessage: 'chore: sync rules and documentation from kosuke-template',
|
|
320
|
-
prTitle: `chore: sync rules & docs from kosuke-template (${date})`,
|
|
321
|
-
prBody: `## ๐ Sync Rules from Kosuke Template
|
|
322
|
-
|
|
323
|
-
This PR syncs rules and documentation from the kosuke-template repository.
|
|
324
|
-
|
|
325
|
-
### ๐ Changes
|
|
326
|
-
- Updated \`.cursor/rules/general.mdc\`
|
|
327
|
-
- Updated \`CLAUDE.md\`
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
|
-
๐ค *Auto-generated by \`kosuke sync-rules --pr\`*`,
|
|
332
|
-
}, async () => syncRulesCore(options.force || false));
|
|
333
|
-
console.log('\nโ
Rules sync completed successfully!');
|
|
334
|
-
console.log(`๐ Changes summary: ${result.changesSummary}`);
|
|
335
|
-
console.log(`๐ PR: ${prInfo.prUrl}`);
|
|
336
|
-
}
|
|
337
|
-
catch (error) {
|
|
338
|
-
if (error instanceof Error &&
|
|
339
|
-
(error.message === 'No recent changes' ||
|
|
340
|
-
error.message === 'No differences detected' ||
|
|
341
|
-
error.message === 'No relevant changes')) {
|
|
342
|
-
console.log('\nโ
No sync needed.');
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
throw error;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
// Run core logic without PR
|
|
350
|
-
try {
|
|
351
|
-
await syncRulesCore(options.force || false);
|
|
352
|
-
console.log('\nโ
Rules sync completed successfully!');
|
|
353
|
-
console.log('\nโน๏ธ Changes applied locally. Use --pr flag to create a pull request.');
|
|
354
|
-
}
|
|
355
|
-
catch (error) {
|
|
356
|
-
if (error instanceof Error &&
|
|
357
|
-
(error.message === 'No recent changes' ||
|
|
358
|
-
error.message === 'No differences detected' ||
|
|
359
|
-
error.message === 'No relevant changes')) {
|
|
360
|
-
console.log('\nโ
No sync needed.');
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
throw error;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
catch (error) {
|
|
368
|
-
console.error('\nโ Sync failed:', error);
|
|
369
|
-
throw error;
|
|
370
|
-
}
|
|
371
|
-
finally {
|
|
372
|
-
// Cleanup temp directory
|
|
373
|
-
if (existsSync(TEMP_DIR)) {
|
|
374
|
-
console.log('\n๐งน Cleaning up...');
|
|
375
|
-
rmSync(TEMP_DIR, { recursive: true, force: true });
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
//# sourceMappingURL=sync-rules.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-rules.js","sourceRoot":"","sources":["../../../kosuke/commands/sync-rules.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAA6B,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,YAAY;AACZ,MAAM,oBAAoB,GAAG,mDAAmD,CAAC;AACjF,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,QAAQ,GAAG,GAAG,SAAS,WAAW,CAAC;AACzC,MAAM,UAAU,GAAG,2BAA2B,CAAC;AAC/C,MAAM,cAAc,GAAG,WAAW,CAAC;AAQnC;;GAEG;AACH,KAAK,UAAU,2BAA2B;IACxC,MAAM,GAAG,GAAc,SAAS,EAAE,CAAC;IAEnC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAc,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,EAAE;QAC9C,SAAS;QACT,KAAK;QACL,UAAU;QACV,sBAAsB;KACvB,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,8BAA8B,CAAC,GAAc;IAC1D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAE3E,mCAAmC;IACnC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC;QACxB,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QAC7B,kDAAkD;QAClD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,cAAsB;IAEtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,2BAA2B,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB;IACzE,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,qBAAqB;IAE5E,MAAM,YAAY,GAAG;;;uCAGgB,QAAQ;;;;2BAIpB,QAAQ;;;;;;;yBAOV,QAAQ;sBACX,aAAa;;yFAEsD,CAAC;IAExF,MAAM,UAAU,GAAG,qBAAqB,QAAQ;6BACrB,cAAc;qBACtB,eAAe;;+GAE2E,CAAC;IAE9G,IAAI,CAAC;QACH,8EAA8E;QAC9E,sEAAsE;QACtE,MAAM,QAAQ,CAAC,UAAU,EAAE;YACzB,YAAY;YACZ,QAAQ,EAAE,EAAE;YACZ,GAAG,EAAE,aAAa;YAClB,SAAS,EAAE,SAAS;YACpB,cAAc,EAAE,EAAE,EAAE,uCAAuC;SAC5D,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC;YAChD,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;YACxC,CAAC,CAAC,EAAE,CAAC;QAEP,oCAAoC;QACpC,MAAM,QAAQ,GAAG,cAAc,KAAK,cAAc,CAAC;QAEnD,MAAM,UAAU,GAAoB;YAClC,QAAQ;YACR,cAAc;YACd,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,mBAAmB;SAC3F,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,QAAQ,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAE7E,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,iBAAyB;IACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5C,wDAAwD;IACxD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QACvB,mDAAmD;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBACvB,oDAAoD;gBACpD,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAClE,SAAS,EAAE,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CAAC,UAAkB,EAAE,UAAkB;IAC1E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG;;;;EAIf,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;;;;;EAK/E,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;;;;;;;;gFAQD,CAAC;IAE/E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE;YACpC,QAAQ,EAAE,CAAC;YACX,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,EAAE,EAAE,+CAA+C;YACjE,cAAc,EAAE,EAAE,EAAE,uCAAuC;SAC5D,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,sDAAsD,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,KAAc;IACzC,+BAA+B;IAC/B,MAAM,GAAG,GAAG,MAAM,2BAA2B,EAAE,CAAC;IAEhD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,8BAA8B,CAAC,GAAG,CAAC,CAAC;QAE7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,+BAA+B,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzF,yCAAyC;IACzC,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,kCAAkC,UAAU,oBAAoB,CAAC,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,KAAK,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAE1E,sBAAsB;IACtB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,SAAS,UAAU,KAAK,CAAC,CAAC;IACvE,MAAM,eAAe,GAAG,gBAAgB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAEpE,kCAAkC;IAClC,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,cAAc,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IAE/F,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,oBAAoB;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;IAElC,qCAAqC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAC3D,aAAa,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,QAAQ,cAAc,EAAE,CAAC,CAAC;IAEtC,6BAA6B;IAC7B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,MAAM,SAAS,EAAE,CAAC;IACvC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;IACjC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QAEpE,sDAAsD;QACtD,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,CAAC,CAAC;QAEtB,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;YACrD,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;YAEnE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,MAAM;YACR,CAAC;YAED,2CAA2C;YAC3C,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,UAAU;QACV,eAAe;QACf,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAA4B,EAAE;IACnE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,6CAA6C;QAC7C,IAAI,MAAM,oBAAoB,EAAE,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,kDAAkD;QAClD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CACxC;oBACE,YAAY,EAAE,YAAY;oBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,aAAa,EAAE,0DAA0D;oBACzE,OAAO,EAAE,kDAAkD,IAAI,GAAG;oBAClE,MAAM,EAAE;;;;;;;;;;kDAU8B;iBACvC,EACD,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAClD,CAAC;gBAEF,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,KAAK,YAAY,KAAK;oBACtB,CAAC,KAAK,CAAC,OAAO,KAAK,mBAAmB;wBACpC,KAAK,CAAC,OAAO,KAAK,yBAAyB;wBAC3C,KAAK,CAAC,OAAO,KAAK,qBAAqB,CAAC,EAC1C,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnC,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;gBAE5C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;YACxF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,KAAK,YAAY,KAAK;oBACtB,CAAC,KAAK,CAAC,OAAO,KAAK,mBAAmB;wBACpC,KAAK,CAAC,OAAO,KAAK,yBAAyB;wBAC3C,KAAK,CAAC,OAAO,KAAK,qBAAqB,CAAC,EAC1C,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnC,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,yBAAyB;QACzB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test command - Atomic web E2E testing with Playwright MCP
|
|
3
|
-
*
|
|
4
|
-
* This command:
|
|
5
|
-
* 1. Accepts a test prompt with optional ticket context
|
|
6
|
-
* 2. Runs a single web E2E test using Playwright MCP + Claude AI
|
|
7
|
-
* 3. Returns result (success/failure) with logs and trace files
|
|
8
|
-
*
|
|
9
|
-
* Test type:
|
|
10
|
-
* - web-test: Browser E2E testing with Playwright MCP + Claude AI
|
|
11
|
-
*
|
|
12
|
-
* NOTE: This is ATOMIC - no retries, no fixing, no linting
|
|
13
|
-
* For iterative test+fix, use: kosuke build
|
|
14
|
-
*
|
|
15
|
-
* Usage:
|
|
16
|
-
* kosuke test --prompt="Test user login"
|
|
17
|
-
* kosuke test --prompt="..." --url=http://localhost:4000
|
|
18
|
-
* kosuke test --prompt="..." --verbose # Enable verbose output
|
|
19
|
-
* kosuke test --prompt="..." --headless # Run in headless mode
|
|
20
|
-
* kosuke test --prompt="..." --trace # Enable trace recording
|
|
21
|
-
*
|
|
22
|
-
* Programmatic usage (from build command):
|
|
23
|
-
* const result = await testCore({
|
|
24
|
-
* prompt: "Test login functionality",
|
|
25
|
-
* context: { ticketId, ticketTitle, ticketDescription },
|
|
26
|
-
* });
|
|
27
|
-
*/
|
|
28
|
-
import type { TestOptions, TestResult, TestStreamEvent } from '../types.js';
|
|
29
|
-
/**
|
|
30
|
-
* Streaming version of testCore - yields events for SSE integration
|
|
31
|
-
*/
|
|
32
|
-
export declare function testCoreStream(options: TestOptions): AsyncGenerator<TestStreamEvent, void, void>;
|
|
33
|
-
/**
|
|
34
|
-
* Core test logic (atomic - single execution, no retries, no fixes)
|
|
35
|
-
* Consumes testCoreStream and adds console logging
|
|
36
|
-
*/
|
|
37
|
-
export declare function testCore(options: TestOptions): Promise<TestResult>;
|
|
38
|
-
/**
|
|
39
|
-
* Main test command
|
|
40
|
-
*/
|
|
41
|
-
export declare function testCommand(options: TestOptions): Promise<void>;
|
|
42
|
-
//# sourceMappingURL=test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAqY5E;;GAEG;AACH,wBAAuB,cAAc,CACnC,OAAO,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAwD7C;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAqDxE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE"}
|