ownkey 0.6.0 → 0.8.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 +105 -151
- package/dist/ai/factory.d.ts.map +1 -1
- package/dist/ai/factory.js +5 -1
- package/dist/ai/factory.js.map +1 -1
- package/dist/ai/ollama.d.ts +30 -0
- package/dist/ai/ollama.d.ts.map +1 -0
- package/dist/ai/ollama.js +175 -0
- package/dist/ai/ollama.js.map +1 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +63 -14
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/suggest.d.ts.map +1 -1
- package/dist/commands/suggest.js +4 -0
- package/dist/commands/suggest.js.map +1 -1
- package/dist/commands/undo.d.ts +3 -0
- package/dist/commands/undo.d.ts.map +1 -0
- package/dist/commands/undo.js +197 -0
- package/dist/commands/undo.js.map +1 -0
- package/dist/core/apply/engine.d.ts +36 -0
- package/dist/core/apply/engine.d.ts.map +1 -0
- package/dist/core/apply/engine.js +179 -0
- package/dist/core/apply/engine.js.map +1 -0
- package/dist/core/apply/index.d.ts +3 -0
- package/dist/core/apply/index.d.ts.map +1 -0
- package/dist/core/apply/index.js +3 -0
- package/dist/core/apply/index.js.map +1 -0
- package/dist/core/apply/interactive.d.ts +53 -0
- package/dist/core/apply/interactive.d.ts.map +1 -0
- package/dist/core/apply/interactive.js +188 -0
- package/dist/core/apply/interactive.js.map +1 -0
- package/dist/core/backup/index.d.ts +2 -0
- package/dist/core/backup/index.d.ts.map +1 -0
- package/dist/core/backup/index.js +2 -0
- package/dist/core/backup/index.js.map +1 -0
- package/dist/core/backup/manager.d.ts +49 -0
- package/dist/core/backup/manager.d.ts.map +1 -0
- package/dist/core/backup/manager.js +133 -0
- package/dist/core/backup/manager.js.map +1 -0
- package/dist/core/diff/applier.d.ts +22 -0
- package/dist/core/diff/applier.d.ts.map +1 -0
- package/dist/core/diff/applier.js +98 -0
- package/dist/core/diff/applier.js.map +1 -0
- package/dist/core/diff/index.d.ts +4 -0
- package/dist/core/diff/index.d.ts.map +1 -0
- package/dist/core/diff/index.js +4 -0
- package/dist/core/diff/index.js.map +1 -0
- package/dist/core/diff/parser.d.ts +32 -0
- package/dist/core/diff/parser.d.ts.map +1 -0
- package/dist/core/diff/parser.js +108 -0
- package/dist/core/diff/parser.js.map +1 -0
- package/dist/core/diff/validator.d.ts +21 -0
- package/dist/core/diff/validator.d.ts.map +1 -0
- package/dist/core/diff/validator.js +86 -0
- package/dist/core/diff/validator.js.map +1 -0
- package/dist/db/client.d.ts +2 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +14 -5
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrations/002_applies.sql +32 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff Parser - Parse unified diff format
|
|
3
|
+
*/
|
|
4
|
+
export class DiffParser {
|
|
5
|
+
/**
|
|
6
|
+
* Parse unified diff format into structured data
|
|
7
|
+
*/
|
|
8
|
+
static parse(diffText) {
|
|
9
|
+
const diffs = [];
|
|
10
|
+
const lines = diffText.split('\n');
|
|
11
|
+
let currentDiff = null;
|
|
12
|
+
let currentHunk = null;
|
|
13
|
+
let lineNumber = 0;
|
|
14
|
+
for (let i = 0; i < lines.length; i++) {
|
|
15
|
+
const line = lines[i];
|
|
16
|
+
// File header: --- a/path/to/file.ts
|
|
17
|
+
if (line.startsWith('--- ')) {
|
|
18
|
+
if (currentDiff && currentHunk) {
|
|
19
|
+
currentDiff.hunks.push(currentHunk);
|
|
20
|
+
}
|
|
21
|
+
if (currentDiff) {
|
|
22
|
+
diffs.push(currentDiff);
|
|
23
|
+
}
|
|
24
|
+
const oldPath = line.substring(4).replace(/^a\//, '');
|
|
25
|
+
currentDiff = {
|
|
26
|
+
filePath: oldPath,
|
|
27
|
+
oldPath,
|
|
28
|
+
hunks: [],
|
|
29
|
+
};
|
|
30
|
+
currentHunk = null;
|
|
31
|
+
}
|
|
32
|
+
// File header: +++ b/path/to/file.ts
|
|
33
|
+
else if (line.startsWith('+++ ') && currentDiff) {
|
|
34
|
+
const newPath = line.substring(4).replace(/^b\//, '');
|
|
35
|
+
currentDiff.newPath = newPath;
|
|
36
|
+
currentDiff.filePath = newPath;
|
|
37
|
+
}
|
|
38
|
+
// Hunk header: @@ -10,5 +10,6 @@
|
|
39
|
+
else if (line.startsWith('@@')) {
|
|
40
|
+
if (currentHunk && currentDiff) {
|
|
41
|
+
currentDiff.hunks.push(currentHunk);
|
|
42
|
+
}
|
|
43
|
+
const match = line.match(/@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@/);
|
|
44
|
+
if (match) {
|
|
45
|
+
currentHunk = {
|
|
46
|
+
oldStart: parseInt(match[1], 10),
|
|
47
|
+
oldLines: match[2] ? parseInt(match[2], 10) : 1,
|
|
48
|
+
newStart: parseInt(match[3], 10),
|
|
49
|
+
newLines: match[4] ? parseInt(match[4], 10) : 1,
|
|
50
|
+
changes: [],
|
|
51
|
+
};
|
|
52
|
+
lineNumber = parseInt(match[1], 10);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Change lines
|
|
56
|
+
else if (currentHunk) {
|
|
57
|
+
if (line.startsWith('+')) {
|
|
58
|
+
currentHunk.changes.push({
|
|
59
|
+
type: 'add',
|
|
60
|
+
content: line.substring(1),
|
|
61
|
+
lineNumber: lineNumber,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else if (line.startsWith('-')) {
|
|
65
|
+
currentHunk.changes.push({
|
|
66
|
+
type: 'remove',
|
|
67
|
+
content: line.substring(1),
|
|
68
|
+
lineNumber: lineNumber,
|
|
69
|
+
});
|
|
70
|
+
lineNumber++;
|
|
71
|
+
}
|
|
72
|
+
else if (line.startsWith(' ')) {
|
|
73
|
+
currentHunk.changes.push({
|
|
74
|
+
type: 'context',
|
|
75
|
+
content: line.substring(1),
|
|
76
|
+
lineNumber: lineNumber,
|
|
77
|
+
});
|
|
78
|
+
lineNumber++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Push last hunk and diff
|
|
83
|
+
if (currentHunk && currentDiff) {
|
|
84
|
+
currentDiff.hunks.push(currentHunk);
|
|
85
|
+
}
|
|
86
|
+
if (currentDiff) {
|
|
87
|
+
diffs.push(currentDiff);
|
|
88
|
+
}
|
|
89
|
+
return diffs;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate unified diff format from structured data
|
|
93
|
+
*/
|
|
94
|
+
static generate(diff) {
|
|
95
|
+
let result = '';
|
|
96
|
+
result += `--- a/${diff.oldPath || diff.filePath}\n`;
|
|
97
|
+
result += `+++ b/${diff.newPath || diff.filePath}\n`;
|
|
98
|
+
for (const hunk of diff.hunks) {
|
|
99
|
+
result += `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@\n`;
|
|
100
|
+
for (const change of hunk.changes) {
|
|
101
|
+
const prefix = change.type === 'add' ? '+' : change.type === 'remove' ? '-' : ' ';
|
|
102
|
+
result += `${prefix}${change.content}\n`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/diff/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ParsedDiff } from './parser.js';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: string[];
|
|
5
|
+
warnings: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class DiffValidator {
|
|
8
|
+
/**
|
|
9
|
+
* Validate a parsed diff before applying
|
|
10
|
+
*/
|
|
11
|
+
static validate(diff: ParsedDiff, targetPath: string): Promise<ValidationResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Validate a single hunk against file content
|
|
14
|
+
*/
|
|
15
|
+
private static validateHunk;
|
|
16
|
+
/**
|
|
17
|
+
* Check if diff can be applied cleanly (no conflicts)
|
|
18
|
+
*/
|
|
19
|
+
static canApplyCleanly(diff: ParsedDiff, fileContent: string): boolean;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/core/diff/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,aAAa;IACtB;;OAEG;WACU,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8BtF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAkC3B;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAqBzE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
export class DiffValidator {
|
|
3
|
+
/**
|
|
4
|
+
* Validate a parsed diff before applying
|
|
5
|
+
*/
|
|
6
|
+
static async validate(diff, targetPath) {
|
|
7
|
+
const errors = [];
|
|
8
|
+
const warnings = [];
|
|
9
|
+
try {
|
|
10
|
+
// Check if file exists
|
|
11
|
+
const fileContent = await readFile(targetPath, 'utf-8');
|
|
12
|
+
const lines = fileContent.split('\n');
|
|
13
|
+
// Validate each hunk
|
|
14
|
+
for (const hunk of diff.hunks) {
|
|
15
|
+
const hunkValidation = this.validateHunk(hunk, lines);
|
|
16
|
+
errors.push(...hunkValidation.errors);
|
|
17
|
+
warnings.push(...hunkValidation.warnings);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error.code === 'ENOENT') {
|
|
22
|
+
errors.push(`File not found: ${targetPath}`);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
errors.push(`Failed to read file: ${error.message}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
valid: errors.length === 0,
|
|
30
|
+
errors,
|
|
31
|
+
warnings,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate a single hunk against file content
|
|
36
|
+
*/
|
|
37
|
+
static validateHunk(hunk, fileLines) {
|
|
38
|
+
const errors = [];
|
|
39
|
+
const warnings = [];
|
|
40
|
+
// Check if hunk is within file bounds
|
|
41
|
+
if (hunk.oldStart < 1 || hunk.oldStart > fileLines.length + 1) {
|
|
42
|
+
errors.push(`Hunk starts at line ${hunk.oldStart}, but file only has ${fileLines.length} lines`);
|
|
43
|
+
return { valid: false, errors, warnings };
|
|
44
|
+
}
|
|
45
|
+
// Validate context lines match
|
|
46
|
+
let fileLineIndex = hunk.oldStart - 1;
|
|
47
|
+
for (const change of hunk.changes) {
|
|
48
|
+
if (change.type === 'context' || change.type === 'remove') {
|
|
49
|
+
if (fileLineIndex >= fileLines.length) {
|
|
50
|
+
errors.push(`Context line ${fileLineIndex + 1} is beyond end of file`);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
const fileLine = fileLines[fileLineIndex];
|
|
54
|
+
if (fileLine !== change.content) {
|
|
55
|
+
warnings.push(`Line ${fileLineIndex + 1} doesn't match context:\n` +
|
|
56
|
+
` Expected: "${change.content}"\n` +
|
|
57
|
+
` Found: "${fileLine}"`);
|
|
58
|
+
}
|
|
59
|
+
fileLineIndex++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if diff can be applied cleanly (no conflicts)
|
|
66
|
+
*/
|
|
67
|
+
static canApplyCleanly(diff, fileContent) {
|
|
68
|
+
const lines = fileContent.split('\n');
|
|
69
|
+
for (const hunk of diff.hunks) {
|
|
70
|
+
let fileLineIndex = hunk.oldStart - 1;
|
|
71
|
+
for (const change of hunk.changes) {
|
|
72
|
+
if (change.type === 'context' || change.type === 'remove') {
|
|
73
|
+
if (fileLineIndex >= lines.length) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (lines[fileLineIndex] !== change.content) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
fileLineIndex++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/core/diff/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/db/client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import postgres from 'postgres';
|
|
1
2
|
import { drizzle } from 'drizzle-orm/postgres-js';
|
|
2
3
|
export declare class DatabaseClient {
|
|
3
4
|
private sql;
|
|
@@ -8,6 +9,7 @@ export declare class DatabaseClient {
|
|
|
8
9
|
getDb(): ReturnType<typeof drizzle>;
|
|
9
10
|
isConnected(): boolean;
|
|
10
11
|
isLocalOnlyMode(): boolean;
|
|
12
|
+
getClient(): ReturnType<typeof postgres> | null;
|
|
11
13
|
private runMigrations;
|
|
12
14
|
private runMigration;
|
|
13
15
|
}
|
package/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAYlD,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,EAAE,CAA2C;IACrD,OAAO,CAAC,WAAW,CAAkB;IAE/B,OAAO,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,KAAK,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC;IAUnC,WAAW,IAAI,OAAO;IAItB,eAAe,IAAI,OAAO;IAI1B,SAAS,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,GAAG,IAAI;YAIjC,aAAa;YAuDb,YAAY;CAsB7B;AAED,eAAO,MAAM,QAAQ,gBAAuB,CAAC"}
|
package/dist/db/client.js
CHANGED
|
@@ -59,11 +59,17 @@ export class DatabaseClient {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
async disconnect() {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
try {
|
|
63
|
+
if (this.sql) {
|
|
64
|
+
await this.sql.end();
|
|
65
|
+
this.sql = null;
|
|
66
|
+
this.db = null;
|
|
67
|
+
logger.verbose('Database connection closed');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// Ignore errors during disconnect
|
|
72
|
+
logger.verbose(`Error during disconnect: ${error.message}`);
|
|
67
73
|
}
|
|
68
74
|
}
|
|
69
75
|
getDb() {
|
|
@@ -81,6 +87,9 @@ export class DatabaseClient {
|
|
|
81
87
|
isLocalOnlyMode() {
|
|
82
88
|
return this.isLocalOnly;
|
|
83
89
|
}
|
|
90
|
+
getClient() {
|
|
91
|
+
return this.sql;
|
|
92
|
+
}
|
|
84
93
|
async runMigrations() {
|
|
85
94
|
if (!this.sql) {
|
|
86
95
|
return;
|
package/dist/db/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
-- Migration: Add applies table for tracking applied suggestions
|
|
2
|
+
-- Version: 002
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS applies (
|
|
5
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
6
|
+
suggestion_id UUID NOT NULL,
|
|
7
|
+
files_modified JSONB NOT NULL,
|
|
8
|
+
backup_id TEXT,
|
|
9
|
+
applied_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
10
|
+
status TEXT NOT NULL CHECK (status IN ('success', 'failed', 'rolled_back')),
|
|
11
|
+
error TEXT,
|
|
12
|
+
metadata JSONB,
|
|
13
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- Index for faster lookups
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_applies_suggestion_id ON applies(suggestion_id);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_applies_applied_at ON applies(applied_at DESC);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_applies_status ON applies(status);
|
|
20
|
+
|
|
21
|
+
-- Add foreign key if suggestions table exists
|
|
22
|
+
-- Note: This will fail gracefully if suggestions table doesn't exist yet
|
|
23
|
+
DO $$
|
|
24
|
+
BEGIN
|
|
25
|
+
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'suggestions') THEN
|
|
26
|
+
ALTER TABLE applies
|
|
27
|
+
ADD CONSTRAINT fk_applies_suggestion
|
|
28
|
+
FOREIGN KEY (suggestion_id)
|
|
29
|
+
REFERENCES suggestions(id)
|
|
30
|
+
ON DELETE CASCADE;
|
|
31
|
+
END IF;
|
|
32
|
+
END $$;
|
package/dist/index.js
CHANGED
|
@@ -9,11 +9,12 @@ import { configCommand } from './commands/config.js';
|
|
|
9
9
|
import { scanCommand } from './commands/scan.js';
|
|
10
10
|
import { suggestCommand } from './commands/suggest.js';
|
|
11
11
|
import { applyCommand } from './commands/apply.js';
|
|
12
|
+
import { undoCommand } from './commands/undo.js';
|
|
12
13
|
const program = new Command();
|
|
13
14
|
program
|
|
14
15
|
.name('ownkey')
|
|
15
16
|
.description('Local-first AI coding agent for intelligent codebase analysis')
|
|
16
|
-
.version('0.
|
|
17
|
+
.version('0.8.0');
|
|
17
18
|
// Global options
|
|
18
19
|
program.option('--local-only', 'Run without database persistence');
|
|
19
20
|
program.option('--verbose', 'Enable verbose logging');
|
|
@@ -24,6 +25,7 @@ program.addCommand(configCommand);
|
|
|
24
25
|
program.addCommand(scanCommand);
|
|
25
26
|
program.addCommand(suggestCommand);
|
|
26
27
|
program.addCommand(applyCommand);
|
|
28
|
+
program.addCommand(undoCommand);
|
|
27
29
|
// Pre-parse hook to set up logging and check config
|
|
28
30
|
program.hook('preAction', async (thisCommand) => {
|
|
29
31
|
await logger.init();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ownkey",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Local-first AI coding agent with Google Gemini integration for intelligent codebase analysis",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -69,4 +69,4 @@
|
|
|
69
69
|
"prettier": "^3.4.2",
|
|
70
70
|
"drizzle-kit": "^0.30.1"
|
|
71
71
|
}
|
|
72
|
-
}
|
|
72
|
+
}
|