@claudiv/vite-sdk 0.1.0 → 0.3.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.
Files changed (55) hide show
  1. package/README.md +41 -405
  2. package/bin/dev.js +27 -0
  3. package/bin/gen.js +38 -0
  4. package/bin/init.js +31 -0
  5. package/bin/mode.js +12 -0
  6. package/bin/postinstall.js +31 -0
  7. package/dist/cache.d.ts +12 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +22 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/detector.d.ts +13 -0
  12. package/dist/detector.d.ts.map +1 -0
  13. package/dist/detector.js +68 -0
  14. package/dist/detector.js.map +1 -0
  15. package/dist/dev-runner.d.ts +8 -0
  16. package/dist/dev-runner.d.ts.map +1 -0
  17. package/dist/dev-runner.js +102 -0
  18. package/dist/dev-runner.js.map +1 -0
  19. package/dist/gen-runner.d.ts +6 -0
  20. package/dist/gen-runner.d.ts.map +1 -0
  21. package/dist/gen-runner.js +67 -0
  22. package/dist/gen-runner.js.map +1 -0
  23. package/dist/index.d.ts +11 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +11 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/init.d.ts +9 -0
  28. package/dist/init.d.ts.map +1 -0
  29. package/dist/init.js +72 -0
  30. package/dist/init.js.map +1 -0
  31. package/dist/mode-selector.d.ts +6 -0
  32. package/dist/mode-selector.d.ts.map +1 -0
  33. package/dist/mode-selector.js +40 -0
  34. package/dist/mode-selector.js.map +1 -0
  35. package/dist/package-json.d.ts +6 -0
  36. package/dist/package-json.d.ts.map +1 -0
  37. package/dist/package-json.js +25 -0
  38. package/dist/package-json.js.map +1 -0
  39. package/dist/plugin.d.ts +10 -11
  40. package/dist/plugin.d.ts.map +1 -1
  41. package/dist/plugin.js +25 -45
  42. package/dist/plugin.js.map +1 -1
  43. package/dist/sdk.d.ts +6 -0
  44. package/dist/sdk.d.ts.map +1 -0
  45. package/dist/sdk.js +6 -0
  46. package/dist/sdk.js.map +1 -0
  47. package/dist/types.d.ts +4 -30
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +3 -1
  50. package/dist/types.js.map +1 -1
  51. package/dist/watcher.d.ts +3 -10
  52. package/dist/watcher.d.ts.map +1 -1
  53. package/dist/watcher.js +3 -34
  54. package/dist/watcher.js.map +1 -1
  55. package/package.json +20 -12
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Vite framework detector.
3
+ *
4
+ * Checks if a project uses Vite and extracts project metadata.
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { existsSync } from 'fs';
8
+ import { join, basename } from 'path';
9
+ export class ViteDetector {
10
+ async detect(projectRoot) {
11
+ const configFiles = [
12
+ 'vite.config.ts',
13
+ 'vite.config.js',
14
+ 'vite.config.mts',
15
+ 'vite.config.mjs',
16
+ ];
17
+ for (const config of configFiles) {
18
+ if (existsSync(join(projectRoot, config))) {
19
+ return true;
20
+ }
21
+ }
22
+ try {
23
+ const pkgPath = join(projectRoot, 'package.json');
24
+ if (existsSync(pkgPath)) {
25
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
26
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
27
+ return 'vite' in allDeps;
28
+ }
29
+ }
30
+ catch {
31
+ // Ignore
32
+ }
33
+ return false;
34
+ }
35
+ async getAppName(projectRoot) {
36
+ try {
37
+ const pkgPath = join(projectRoot, 'package.json');
38
+ if (existsSync(pkgPath)) {
39
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
40
+ if (pkg.name)
41
+ return pkg.name.replace(/^@[^/]+\//, '');
42
+ }
43
+ }
44
+ catch {
45
+ // Fall through
46
+ }
47
+ return basename(projectRoot);
48
+ }
49
+ async getSourcePaths(projectRoot) {
50
+ const candidates = ['src', 'lib', 'app', 'pages', 'components'];
51
+ const result = [];
52
+ for (const dir of candidates) {
53
+ if (existsSync(join(projectRoot, dir))) {
54
+ result.push(dir);
55
+ }
56
+ }
57
+ return result.length > 0 ? result : ['src'];
58
+ }
59
+ getIgnorePatterns() {
60
+ return [
61
+ 'node_modules',
62
+ 'dist',
63
+ '.vite',
64
+ 'public',
65
+ ];
66
+ }
67
+ }
68
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGtC,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,MAAM,WAAW,GAAG;YAClB,gBAAgB;YAChB,gBAAgB;YAChB,iBAAiB;YACjB,iBAAiB;SAClB,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;gBAChE,OAAO,MAAM,IAAI,OAAO,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzD,IAAI,GAAG,CAAC,IAAI;oBAAE,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QACD,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAChE,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,cAAc;YACd,MAAM;YACN,OAAO;YACP,QAAQ;SACT,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dev runner — watches .cdml files, diffs, processes changes.
3
+ *
4
+ * Flow: watch .cdml -> diff -> context engine -> headless Claude -> update
5
+ */
6
+ import type { DevOptions } from '@claudiv/core';
7
+ export declare function runDev(projectRoot: string, opts: DevOptions): Promise<void>;
8
+ //# sourceMappingURL=dev-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-runner.d.ts","sourceRoot":"","sources":["../src/dev-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,OAAO,KAAK,EAAE,UAAU,EAAoC,MAAM,eAAe,CAAC;AAGlF,wBAAsB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqGjF"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Dev runner — watches .cdml files, diffs, processes changes.
3
+ *
4
+ * Flow: watch .cdml -> diff -> context engine -> headless Claude -> update
5
+ */
6
+ import { readFile, writeFile } from 'fs/promises';
7
+ import { existsSync } from 'fs';
8
+ import { join } from 'path';
9
+ import chokidar from 'chokidar';
10
+ import { diffCdml, getChangedElements, assembleContext, loadContextManifest, executeClaudeHeadless, loadProject, parsePlanQuestions, allQuestionsAnswered, questionsToFacts, serializeContextManifest, parseSpecFile, } from '@claudiv/core';
11
+ import { CdmlCache } from './cache.js';
12
+ export async function runDev(projectRoot, opts) {
13
+ const cache = new CdmlCache();
14
+ const debounceMs = opts.debounceMs || 300;
15
+ let processing = false;
16
+ // Load project registry
17
+ const manifestPath = join(projectRoot, 'claudiv.project.cdml');
18
+ let registry = null;
19
+ if (existsSync(manifestPath)) {
20
+ registry = await loadProject(manifestPath);
21
+ }
22
+ // Load context manifest
23
+ const contextPath = join(projectRoot, '.claudiv', 'context.cdml');
24
+ let contextManifest = null;
25
+ if (existsSync(contextPath)) {
26
+ contextManifest = await loadContextManifest(contextPath);
27
+ }
28
+ // Watch .cdml files
29
+ const watcher = chokidar.watch('**/*.cdml', {
30
+ cwd: projectRoot,
31
+ persistent: true,
32
+ ignoreInitial: false,
33
+ ignored: ['**/node_modules/**', '**/.claudiv/**', '**/claudiv.project.cdml'],
34
+ awaitWriteFinish: { stabilityThreshold: debounceMs, pollInterval: 50 },
35
+ });
36
+ console.log('[claudiv:dev] Watching for .cdml changes...');
37
+ // Cache files on initial scan
38
+ watcher.on('add', async (relativePath) => {
39
+ try {
40
+ const content = await readFile(join(projectRoot, relativePath), 'utf-8');
41
+ cache.set(relativePath, content);
42
+ }
43
+ catch {
44
+ // Ignore
45
+ }
46
+ });
47
+ watcher.on('change', async (relativePath) => {
48
+ if (processing)
49
+ return;
50
+ processing = true;
51
+ try {
52
+ const filePath = join(projectRoot, relativePath);
53
+ const newContent = await readFile(filePath, 'utf-8');
54
+ const oldContent = cache.get(relativePath);
55
+ if (!oldContent) {
56
+ cache.set(relativePath, newContent);
57
+ return;
58
+ }
59
+ const diff = diffCdml(oldContent, newContent);
60
+ if (!diff.hasChanges)
61
+ return;
62
+ console.log(`[claudiv:dev] Change in ${relativePath}: ` +
63
+ `+${diff.summary.added} -${diff.summary.removed} ~${diff.summary.modified}`);
64
+ const changes = getChangedElements(diff);
65
+ // Handle plan directives and questions
66
+ const parsed = parseSpecFile(newContent);
67
+ if (parsed.hasPlanQuestions) {
68
+ const questions = parsePlanQuestions(parsed.dom);
69
+ if (allQuestionsAnswered(questions)) {
70
+ const facts = questionsToFacts(questions, `plan:${new Date().toISOString().split('T')[0]}`);
71
+ if (contextManifest) {
72
+ contextManifest.global.facts.push(...facts);
73
+ await writeFile(contextPath, serializeContextManifest(contextManifest), 'utf-8');
74
+ }
75
+ }
76
+ }
77
+ // Process changes
78
+ for (const change of changes) {
79
+ if (!contextManifest)
80
+ continue;
81
+ const assembled = await assembleContext(change, change.path, contextManifest, registry, projectRoot);
82
+ const result = await executeClaudeHeadless(assembled, { mode: opts.mode || 'cli', apiKey: opts.apiKey });
83
+ if (result.success) {
84
+ console.log(`[claudiv:dev] Generated (${result.durationMs}ms)`);
85
+ }
86
+ else {
87
+ console.error(`[claudiv:dev] Failed: ${result.error}`);
88
+ }
89
+ }
90
+ cache.set(relativePath, newContent);
91
+ }
92
+ catch (error) {
93
+ console.error(`[claudiv:dev] Error: ${error.message}`);
94
+ }
95
+ finally {
96
+ processing = false;
97
+ }
98
+ });
99
+ // Block forever
100
+ await new Promise(() => { });
101
+ }
102
+ //# sourceMappingURL=dev-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-runner.js","sourceRoot":"","sources":["../src/dev-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gen runner — one-shot diff -> process -> exit.
3
+ */
4
+ import type { GenOptions } from '@claudiv/core';
5
+ export declare function runGen(projectRoot: string, opts: GenOptions): Promise<void>;
6
+ //# sourceMappingURL=gen-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-runner.d.ts","sourceRoot":"","sources":["../src/gen-runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EAAE,UAAU,EAAoC,MAAM,eAAe,CAAC;AAGlF,wBAAsB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEjF"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Gen runner — one-shot diff -> process -> exit.
3
+ */
4
+ import { readFile, readdir } from 'fs/promises';
5
+ import { existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { diffCdml, getChangedElements, assembleContext, loadContextManifest, executeClaudeHeadless, loadProject, parseSpecFile, } from '@claudiv/core';
8
+ import { CdmlCache } from './cache.js';
9
+ export async function runGen(projectRoot, opts) {
10
+ const manifestPath = join(projectRoot, 'claudiv.project.cdml');
11
+ let registry = null;
12
+ if (existsSync(manifestPath)) {
13
+ registry = await loadProject(manifestPath);
14
+ }
15
+ const contextPath = join(projectRoot, '.claudiv', 'context.cdml');
16
+ let contextManifest = null;
17
+ if (existsSync(contextPath)) {
18
+ contextManifest = await loadContextManifest(contextPath);
19
+ }
20
+ const entries = await readdir(projectRoot);
21
+ const cdmlFiles = entries.filter((f) => f.endsWith('.cdml') && f !== 'claudiv.project.cdml');
22
+ if (cdmlFiles.length === 0) {
23
+ console.log('[claudiv:gen] No .cdml files found');
24
+ return;
25
+ }
26
+ const cache = new CdmlCache();
27
+ for (const cdmlFile of cdmlFiles) {
28
+ const filePath = join(projectRoot, cdmlFile);
29
+ const content = await readFile(filePath, 'utf-8');
30
+ const oldContent = cache.get(cdmlFile) || '';
31
+ const diff = diffCdml(oldContent, content);
32
+ if (!diff.hasChanges && oldContent) {
33
+ console.log(`[claudiv:gen] No changes in ${cdmlFile}`);
34
+ continue;
35
+ }
36
+ const changes = getChangedElements(diff);
37
+ console.log(`[claudiv:gen] Processing ${cdmlFile}: ${changes.length} change(s)`);
38
+ const filteredChanges = opts.scope
39
+ ? changes.filter((c) => c.path.includes(opts.scope))
40
+ : changes;
41
+ for (const change of filteredChanges) {
42
+ if (!contextManifest) {
43
+ const parsed = parseSpecFile(content);
44
+ if (parsed.component)
45
+ console.log(`[claudiv:gen] Component: ${parsed.component.name}`);
46
+ continue;
47
+ }
48
+ const assembled = await assembleContext(change, change.path, contextManifest, registry, projectRoot);
49
+ if (opts.dryRun) {
50
+ console.log(`[claudiv:gen] Dry run — prompt: ${assembled.prompt.length} chars`);
51
+ continue;
52
+ }
53
+ const result = await executeClaudeHeadless(assembled, { mode: opts.mode || 'cli', apiKey: opts.apiKey });
54
+ if (result.success) {
55
+ console.log(`[claudiv:gen] Generated (${result.durationMs}ms)`);
56
+ process.stdout.write(result.response);
57
+ }
58
+ else {
59
+ console.error(`[claudiv:gen] Failed: ${result.error}`);
60
+ process.exit(1);
61
+ }
62
+ }
63
+ cache.set(cdmlFile, content);
64
+ }
65
+ console.log('[claudiv:gen] Done');
66
+ }
67
+ //# sourceMappingURL=gen-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-runner.js","sourceRoot":"","sources":["../src/gen-runner.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  /**
2
- * @claudiv/vite-sdk - Vite plugin for Claudiv integration
2
+ * @claudiv/vite-sdk Vite framework SDK for Claudiv.
3
3
  *
4
- * Enables Claudiv generation in Vite projects with HMR support.
4
+ * Add-on package providing `claudiv:*` npm scripts for Vite projects.
5
+ * Implements ClaudivSDK interface for Vite-specific integration.
5
6
  */
6
- export { claudiv, claudivPlugin } from './plugin.js';
7
- export type { ClaudivPluginOptions } from './types.js';
8
- export { ClaudivViteWatcher } from './watcher.js';
7
+ export { ViteSdk } from './sdk.js';
8
+ export { ViteDetector } from './detector.js';
9
+ export { initViteProject } from './init.js';
10
+ export { runDev } from './dev-runner.js';
11
+ export { runGen } from './gen-runner.js';
12
+ export { selectMode } from './mode-selector.js';
13
+ export { CdmlCache } from './cache.js';
14
+ export { addScripts, removeScripts } from './package-json.js';
9
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,15 @@
1
1
  /**
2
- * @claudiv/vite-sdk - Vite plugin for Claudiv integration
2
+ * @claudiv/vite-sdk Vite framework SDK for Claudiv.
3
3
  *
4
- * Enables Claudiv generation in Vite projects with HMR support.
4
+ * Add-on package providing `claudiv:*` npm scripts for Vite projects.
5
+ * Implements ClaudivSDK interface for Vite-specific integration.
5
6
  */
6
- // Main plugin export
7
- export { claudiv, claudivPlugin } from './plugin.js';
8
- // Utilities (for advanced usage)
9
- export { ClaudivViteWatcher } from './watcher.js';
7
+ export { ViteSdk } from './sdk.js';
8
+ export { ViteDetector } from './detector.js';
9
+ export { initViteProject } from './init.js';
10
+ export { runDev } from './dev-runner.js';
11
+ export { runGen } from './gen-runner.js';
12
+ export { selectMode } from './mode-selector.js';
13
+ export { CdmlCache } from './cache.js';
14
+ export { addScripts, removeScripts } from './package-json.js';
10
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKrD,iCAAiC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Vite project initialization for Claudiv.
3
+ *
4
+ * Detects Vite project -> scans source -> generates .cdml + context.cdml
5
+ * + project manifest -> adds claudiv:* scripts to package.json.
6
+ */
7
+ import type { FrameworkDetector, InitResult } from '@claudiv/core';
8
+ export declare function initViteProject(projectRoot: string, detector: FrameworkDetector): Promise<InitResult>;
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAInE,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAoErB"}
package/dist/init.js ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Vite project initialization for Claudiv.
3
+ *
4
+ * Detects Vite project -> scans source -> generates .cdml + context.cdml
5
+ * + project manifest -> adds claudiv:* scripts to package.json.
6
+ */
7
+ import { writeFile, mkdir } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { scanProject } from '@claudiv/core';
11
+ import { addScripts } from './package-json.js';
12
+ export async function initViteProject(projectRoot, detector) {
13
+ const filesCreated = [];
14
+ const warnings = [];
15
+ const isVite = await detector.detect(projectRoot);
16
+ if (!isVite) {
17
+ return {
18
+ success: false,
19
+ filesCreated: [],
20
+ scriptsAdded: {},
21
+ warnings: ['Not a Vite project'],
22
+ };
23
+ }
24
+ const scanResult = await scanProject(projectRoot, detector);
25
+ // Create .claudiv directory
26
+ const claudivDir = join(projectRoot, '.claudiv');
27
+ if (!existsSync(claudivDir)) {
28
+ await mkdir(claudivDir, { recursive: true });
29
+ }
30
+ // Write CDML skeleton
31
+ const cdmlPath = join(projectRoot, `${scanResult.projectName}.cdml`);
32
+ if (!existsSync(cdmlPath)) {
33
+ await writeFile(cdmlPath, scanResult.cdmlContent, 'utf-8');
34
+ filesCreated.push(`${scanResult.projectName}.cdml`);
35
+ }
36
+ else {
37
+ warnings.push(`${scanResult.projectName}.cdml already exists, skipping`);
38
+ }
39
+ // Write context manifest
40
+ const contextPath = join(claudivDir, 'context.cdml');
41
+ if (!existsSync(contextPath)) {
42
+ await writeFile(contextPath, scanResult.contextContent, 'utf-8');
43
+ filesCreated.push('.claudiv/context.cdml');
44
+ }
45
+ // Write project manifest
46
+ const manifestPath = join(projectRoot, 'claudiv.project.cdml');
47
+ if (!existsSync(manifestPath)) {
48
+ await writeFile(manifestPath, scanResult.projectManifestContent, 'utf-8');
49
+ filesCreated.push('claudiv.project.cdml');
50
+ }
51
+ // Write default config
52
+ const configPath = join(claudivDir, 'config.json');
53
+ if (!existsSync(configPath)) {
54
+ await writeFile(configPath, JSON.stringify({ mode: 'cli' }, null, 2), 'utf-8');
55
+ filesCreated.push('.claudiv/config.json');
56
+ }
57
+ // Add scripts to package.json
58
+ const scripts = {
59
+ 'claudiv:init': 'claudiv-vite-init',
60
+ 'claudiv:dev': 'claudiv-vite-dev',
61
+ 'claudiv:gen': 'claudiv-vite-gen',
62
+ 'claudiv:mode': 'claudiv-vite-mode',
63
+ };
64
+ await addScripts(projectRoot, scripts);
65
+ return {
66
+ success: true,
67
+ filesCreated,
68
+ scriptsAdded: scripts,
69
+ warnings: warnings.length > 0 ? warnings : undefined,
70
+ };
71
+ }
72
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,QAA2B;IAE3B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,CAAC,oBAAoB,CAAC;SACjC,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE5D,4BAA4B;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3D,YAAY,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,OAAO,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,gCAAgC,CAAC,CAAC;IAC3E,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjE,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAC1E,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/E,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,mBAAmB;QACnC,aAAa,EAAE,kBAAkB;QACjC,aAAa,EAAE,kBAAkB;QACjC,cAAc,EAAE,mBAAmB;KACpC,CAAC;IAEF,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEvC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,YAAY,EAAE,OAAO;QACrB,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Mode selector — prompt user to choose CLI or API mode.
3
+ * Writes selection to .claudiv/config.json.
4
+ */
5
+ export declare function selectMode(projectRoot: string): Promise<void>;
6
+ //# sourceMappingURL=mode-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-selector.d.ts","sourceRoot":"","sources":["../src/mode-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCnE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Mode selector — prompt user to choose CLI or API mode.
3
+ * Writes selection to .claudiv/config.json.
4
+ */
5
+ import { writeFile, mkdir } from 'fs/promises';
6
+ import { existsSync } from 'fs';
7
+ import { join } from 'path';
8
+ import prompts from 'prompts';
9
+ export async function selectMode(projectRoot) {
10
+ const response = await prompts({
11
+ type: 'select',
12
+ name: 'mode',
13
+ message: 'How should Claudiv invoke Claude?',
14
+ choices: [
15
+ { title: 'CLI (claude --print)', description: 'Requires claude CLI installed', value: 'cli' },
16
+ { title: 'API (Anthropic SDK)', description: 'Requires ANTHROPIC_API_KEY', value: 'api' },
17
+ ],
18
+ initial: 0,
19
+ });
20
+ if (!response.mode) {
21
+ console.log('Cancelled');
22
+ return;
23
+ }
24
+ const config = { mode: response.mode };
25
+ if (response.mode === 'api') {
26
+ const apiKeyResponse = await prompts({
27
+ type: 'text',
28
+ name: 'apiKey',
29
+ message: 'Enter your Anthropic API key (or set ANTHROPIC_API_KEY env var):',
30
+ });
31
+ if (apiKeyResponse.apiKey)
32
+ config.apiKey = apiKeyResponse.apiKey;
33
+ }
34
+ const claudivDir = join(projectRoot, '.claudiv');
35
+ if (!existsSync(claudivDir))
36
+ await mkdir(claudivDir, { recursive: true });
37
+ await writeFile(join(claudivDir, 'config.json'), JSON.stringify(config, null, 2), 'utf-8');
38
+ console.log(`Mode set to: ${response.mode}`);
39
+ }
40
+ //# sourceMappingURL=mode-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-selector.js","sourceRoot":"","sources":["../src/mode-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,+BAA+B,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7F,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,4BAA4B,EAAE,KAAK,EAAE,KAAK,EAAE;SAC1F;QACD,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE5D,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC;YACnC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kEAAkE;SAC5E,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACnE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Package.json script management.
3
+ */
4
+ export declare function addScripts(projectRoot: string, scripts: Record<string, string>): Promise<void>;
5
+ export declare function removeScripts(projectRoot: string, scriptNames: string[]): Promise<void>;
6
+ //# sourceMappingURL=package-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Package.json script management.
3
+ */
4
+ import { readFile, writeFile } from 'fs/promises';
5
+ import { join } from 'path';
6
+ export async function addScripts(projectRoot, scripts) {
7
+ const pkgPath = join(projectRoot, 'package.json');
8
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
9
+ if (!pkg.scripts)
10
+ pkg.scripts = {};
11
+ for (const [name, command] of Object.entries(scripts)) {
12
+ pkg.scripts[name] = command;
13
+ }
14
+ await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
15
+ }
16
+ export async function removeScripts(projectRoot, scriptNames) {
17
+ const pkgPath = join(projectRoot, 'package.json');
18
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
19
+ if (!pkg.scripts)
20
+ return;
21
+ for (const name of scriptNames)
22
+ delete pkg.scripts[name];
23
+ await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
24
+ }
25
+ //# sourceMappingURL=package-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,OAA+B;IAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,WAAqB;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO;IACzB,KAAK,MAAM,IAAI,IAAI,WAAW;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC"}
package/dist/plugin.d.ts CHANGED
@@ -1,14 +1,13 @@
1
1
  /**
2
- * Vite plugin for Claudiv integration
2
+ * Vite SDK — implements ClaudivSDK for Vite-based projects.
3
3
  */
4
- import type { Plugin } from 'vite';
5
- import type { ClaudivPluginOptions } from './types.js';
6
- /**
7
- * Claudiv Vite plugin
8
- *
9
- * Integrates Claudiv generation with Vite's dev server and build process.
10
- * Watches .cdml files and regenerates code with HMR support.
11
- */
12
- export declare function claudiv(options?: ClaudivPluginOptions): Plugin;
13
- export declare const claudivPlugin: typeof claudiv;
4
+ import type { ClaudivSDK, FrameworkDetector, InitResult, DevOptions, GenOptions } from '@claudiv/core';
5
+ export declare class ViteSdk implements ClaudivSDK {
6
+ name: string;
7
+ frameworkDetector: FrameworkDetector;
8
+ init(projectRoot: string): Promise<InitResult>;
9
+ dev(projectRoot: string, opts: DevOptions): Promise<void>;
10
+ gen(projectRoot: string, opts: GenOptions): Promise<void>;
11
+ getScripts(): Record<string, string>;
12
+ }
14
13
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAyClE;AAGD,eAAO,MAAM,aAAa,gBAAU,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMvG,qBAAa,OAAQ,YAAW,UAAU;IACxC,IAAI,SAAU;IACd,iBAAiB,EAAE,iBAAiB,CAAsB;IAEpD,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI9C,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQrC"}