@hasna/recordings 0.1.34 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +308 -87
- package/dist/index.js +62 -50
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/mcp/index.js +65 -53
- package/dist/storage.js +62 -50
- package/dist/version.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -2940,7 +2940,7 @@ var require_dist = __commonJS((exports) => {
|
|
|
2940
2940
|
function parse(stream, callback) {
|
|
2941
2941
|
const parser = new parser_1.Parser;
|
|
2942
2942
|
stream.on("data", (buffer) => parser.parse(buffer, callback));
|
|
2943
|
-
return new Promise((
|
|
2943
|
+
return new Promise((resolve2) => stream.on("end", () => resolve2()));
|
|
2944
2944
|
}
|
|
2945
2945
|
exports.parse = parse;
|
|
2946
2946
|
});
|
|
@@ -3619,12 +3619,12 @@ var require_client = __commonJS((exports, module) => {
|
|
|
3619
3619
|
this._connect(callback);
|
|
3620
3620
|
return;
|
|
3621
3621
|
}
|
|
3622
|
-
return new this._Promise((
|
|
3622
|
+
return new this._Promise((resolve2, reject) => {
|
|
3623
3623
|
this._connect((error) => {
|
|
3624
3624
|
if (error) {
|
|
3625
3625
|
reject(error);
|
|
3626
3626
|
} else {
|
|
3627
|
-
|
|
3627
|
+
resolve2(this);
|
|
3628
3628
|
}
|
|
3629
3629
|
});
|
|
3630
3630
|
});
|
|
@@ -3956,8 +3956,8 @@ var require_client = __commonJS((exports, module) => {
|
|
|
3956
3956
|
readTimeout = config.query_timeout || this.connectionParameters.query_timeout;
|
|
3957
3957
|
query = new Query(config, values, callback);
|
|
3958
3958
|
if (!query.callback) {
|
|
3959
|
-
result = new this._Promise((
|
|
3960
|
-
query.callback = (err, res) => err ? reject(err) :
|
|
3959
|
+
result = new this._Promise((resolve2, reject) => {
|
|
3960
|
+
query.callback = (err, res) => err ? reject(err) : resolve2(res);
|
|
3961
3961
|
}).catch((err) => {
|
|
3962
3962
|
Error.captureStackTrace(err);
|
|
3963
3963
|
throw err;
|
|
@@ -4032,8 +4032,8 @@ var require_client = __commonJS((exports, module) => {
|
|
|
4032
4032
|
if (cb) {
|
|
4033
4033
|
this.connection.once("end", cb);
|
|
4034
4034
|
} else {
|
|
4035
|
-
return new this._Promise((
|
|
4036
|
-
this.connection.once("end",
|
|
4035
|
+
return new this._Promise((resolve2) => {
|
|
4036
|
+
this.connection.once("end", resolve2);
|
|
4037
4037
|
});
|
|
4038
4038
|
}
|
|
4039
4039
|
}
|
|
@@ -4080,8 +4080,8 @@ var require_pg_pool = __commonJS((exports, module) => {
|
|
|
4080
4080
|
const cb = function(err, client) {
|
|
4081
4081
|
err ? rej(err) : res(client);
|
|
4082
4082
|
};
|
|
4083
|
-
const result = new Promise2(function(
|
|
4084
|
-
res =
|
|
4083
|
+
const result = new Promise2(function(resolve2, reject) {
|
|
4084
|
+
res = resolve2;
|
|
4085
4085
|
rej = reject;
|
|
4086
4086
|
}).catch((err) => {
|
|
4087
4087
|
Error.captureStackTrace(err);
|
|
@@ -4142,7 +4142,7 @@ var require_pg_pool = __commonJS((exports, module) => {
|
|
|
4142
4142
|
if (typeof Promise2.try === "function") {
|
|
4143
4143
|
return Promise2.try(f);
|
|
4144
4144
|
}
|
|
4145
|
-
return new Promise2((
|
|
4145
|
+
return new Promise2((resolve2) => resolve2(f()));
|
|
4146
4146
|
}
|
|
4147
4147
|
_isFull() {
|
|
4148
4148
|
return this._clients.length >= this.options.max;
|
|
@@ -4518,8 +4518,8 @@ var require_query2 = __commonJS((exports, module) => {
|
|
|
4518
4518
|
NativeQuery.prototype._getPromise = function() {
|
|
4519
4519
|
if (this._promise)
|
|
4520
4520
|
return this._promise;
|
|
4521
|
-
this._promise = new Promise(function(
|
|
4522
|
-
this._once("end",
|
|
4521
|
+
this._promise = new Promise(function(resolve2, reject) {
|
|
4522
|
+
this._once("end", resolve2);
|
|
4523
4523
|
this._once("error", reject);
|
|
4524
4524
|
}.bind(this));
|
|
4525
4525
|
return this._promise;
|
|
@@ -4693,12 +4693,12 @@ var require_client2 = __commonJS((exports, module) => {
|
|
|
4693
4693
|
this._connect(callback);
|
|
4694
4694
|
return;
|
|
4695
4695
|
}
|
|
4696
|
-
return new this._Promise((
|
|
4696
|
+
return new this._Promise((resolve2, reject) => {
|
|
4697
4697
|
this._connect((error) => {
|
|
4698
4698
|
if (error) {
|
|
4699
4699
|
reject(error);
|
|
4700
4700
|
} else {
|
|
4701
|
-
|
|
4701
|
+
resolve2(this);
|
|
4702
4702
|
}
|
|
4703
4703
|
});
|
|
4704
4704
|
});
|
|
@@ -4722,8 +4722,8 @@ var require_client2 = __commonJS((exports, module) => {
|
|
|
4722
4722
|
query = new NativeQuery(config, values, callback);
|
|
4723
4723
|
if (!query.callback) {
|
|
4724
4724
|
let resolveOut, rejectOut;
|
|
4725
|
-
result = new this._Promise((
|
|
4726
|
-
resolveOut =
|
|
4725
|
+
result = new this._Promise((resolve2, reject) => {
|
|
4726
|
+
resolveOut = resolve2;
|
|
4727
4727
|
rejectOut = reject;
|
|
4728
4728
|
}).catch((err) => {
|
|
4729
4729
|
Error.captureStackTrace(err);
|
|
@@ -4781,8 +4781,8 @@ var require_client2 = __commonJS((exports, module) => {
|
|
|
4781
4781
|
}
|
|
4782
4782
|
let result;
|
|
4783
4783
|
if (!cb) {
|
|
4784
|
-
result = new this._Promise(function(
|
|
4785
|
-
cb = (err) => err ? reject(err) :
|
|
4784
|
+
result = new this._Promise(function(resolve2, reject) {
|
|
4785
|
+
cb = (err) => err ? reject(err) : resolve2();
|
|
4786
4786
|
});
|
|
4787
4787
|
}
|
|
4788
4788
|
this.native.end(function() {
|
|
@@ -4963,11 +4963,11 @@ class SqliteAdapter {
|
|
|
4963
4963
|
|
|
4964
4964
|
// src/db/database.ts
|
|
4965
4965
|
import { mkdirSync as mkdirSync2 } from "fs";
|
|
4966
|
-
import { dirname } from "path";
|
|
4966
|
+
import { dirname as dirname2 } from "path";
|
|
4967
4967
|
|
|
4968
4968
|
// src/lib/config.ts
|
|
4969
|
-
import { existsSync, readFileSync, mkdirSync,
|
|
4970
|
-
import { join } from "path";
|
|
4969
|
+
import { copyFileSync, existsSync, readFileSync, mkdirSync, readdirSync, statSync } from "fs";
|
|
4970
|
+
import { dirname, join, resolve } from "path";
|
|
4971
4971
|
import { homedir } from "os";
|
|
4972
4972
|
var DEFAULT_CONFIG = {
|
|
4973
4973
|
openai_api_key: "",
|
|
@@ -5061,44 +5061,53 @@ function expandEnvBackedConfig(config) {
|
|
|
5061
5061
|
return expanded;
|
|
5062
5062
|
}
|
|
5063
5063
|
function findConfigFile() {
|
|
5064
|
-
|
|
5065
|
-
const root = "/";
|
|
5066
|
-
while (dir !== root) {
|
|
5067
|
-
const candidate = join(dir, ".recordings", "config.json");
|
|
5068
|
-
if (existsSync(candidate))
|
|
5069
|
-
return candidate;
|
|
5070
|
-
const parent = join(dir, "..");
|
|
5071
|
-
if (parent === dir)
|
|
5072
|
-
break;
|
|
5073
|
-
dir = parent;
|
|
5074
|
-
}
|
|
5075
|
-
return null;
|
|
5064
|
+
return findProjectRecordingsPath("config.json");
|
|
5076
5065
|
}
|
|
5077
5066
|
function getDataDir() {
|
|
5078
|
-
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
if (existsSync(candidate))
|
|
5083
|
-
return candidate;
|
|
5084
|
-
const parent = join(dir, "..");
|
|
5085
|
-
if (parent === dir)
|
|
5086
|
-
break;
|
|
5087
|
-
dir = parent;
|
|
5088
|
-
}
|
|
5089
|
-
const home = homedir();
|
|
5067
|
+
const projectLocalDir = findProjectRecordingsPath();
|
|
5068
|
+
if (projectLocalDir)
|
|
5069
|
+
return projectLocalDir;
|
|
5070
|
+
const home = getHomeDir();
|
|
5090
5071
|
const newDir = join(home, ".hasna", "recordings");
|
|
5091
5072
|
const oldDir = join(home, ".recordings");
|
|
5092
|
-
if (
|
|
5073
|
+
if (existsSync(oldDir)) {
|
|
5093
5074
|
try {
|
|
5094
|
-
|
|
5095
|
-
cpSync(oldDir, newDir, { recursive: true });
|
|
5075
|
+
mergeDirectoryContents(oldDir, newDir);
|
|
5096
5076
|
} catch {}
|
|
5097
5077
|
}
|
|
5098
5078
|
return newDir;
|
|
5099
5079
|
}
|
|
5080
|
+
function findProjectRecordingsPath(entry) {
|
|
5081
|
+
const home = resolve(getHomeDir());
|
|
5082
|
+
let dir = resolve(process.cwd());
|
|
5083
|
+
while (true) {
|
|
5084
|
+
if (dir !== home) {
|
|
5085
|
+
const candidate = entry ? join(dir, ".recordings", entry) : join(dir, ".recordings");
|
|
5086
|
+
if (existsSync(candidate))
|
|
5087
|
+
return candidate;
|
|
5088
|
+
}
|
|
5089
|
+
const parent = dirname(dir);
|
|
5090
|
+
if (parent === dir)
|
|
5091
|
+
break;
|
|
5092
|
+
dir = parent;
|
|
5093
|
+
}
|
|
5094
|
+
return null;
|
|
5095
|
+
}
|
|
5096
|
+
function mergeDirectoryContents(sourceDir, targetDir) {
|
|
5097
|
+
mkdirSync(targetDir, { recursive: true });
|
|
5098
|
+
for (const entry of readdirSync(sourceDir)) {
|
|
5099
|
+
const sourcePath = join(sourceDir, entry);
|
|
5100
|
+
const targetPath = join(targetDir, entry);
|
|
5101
|
+
const sourceStats = statSync(sourcePath);
|
|
5102
|
+
if (sourceStats.isDirectory()) {
|
|
5103
|
+
mergeDirectoryContents(sourcePath, targetPath);
|
|
5104
|
+
} else if (!existsSync(targetPath)) {
|
|
5105
|
+
copyFileSync(sourcePath, targetPath);
|
|
5106
|
+
}
|
|
5107
|
+
}
|
|
5108
|
+
}
|
|
5100
5109
|
function loadSecretKey(keyName) {
|
|
5101
|
-
const secretsPath = join(
|
|
5110
|
+
const secretsPath = join(getHomeDir(), ".secrets");
|
|
5102
5111
|
if (!existsSync(secretsPath))
|
|
5103
5112
|
return "";
|
|
5104
5113
|
for (const candidate of listSecretFiles(secretsPath)) {
|
|
@@ -5139,6 +5148,9 @@ function listSecretFiles(path) {
|
|
|
5139
5148
|
return [];
|
|
5140
5149
|
}
|
|
5141
5150
|
}
|
|
5151
|
+
function getHomeDir() {
|
|
5152
|
+
return process.env["HOME"] || process.env["USERPROFILE"] || homedir();
|
|
5153
|
+
}
|
|
5142
5154
|
function ensureDataDir(config) {
|
|
5143
5155
|
const { mkdirSync: mkdirSync2 } = __require("fs");
|
|
5144
5156
|
mkdirSync2(config.audio_dir, { recursive: true });
|
|
@@ -5233,7 +5245,7 @@ function getDatabase(dbPath) {
|
|
|
5233
5245
|
if (_db)
|
|
5234
5246
|
return _db;
|
|
5235
5247
|
const path = dbPath || loadConfig().db_path;
|
|
5236
|
-
const dir =
|
|
5248
|
+
const dir = dirname2(path);
|
|
5237
5249
|
mkdirSync2(dir, { recursive: true });
|
|
5238
5250
|
_adapter = new SqliteAdapter(path);
|
|
5239
5251
|
_db = _adapter.raw;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,cAAc,EAAE,gBA2B5B,CAAC;AAEF,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAqEhE;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,cAAc,EAAE,gBA2B5B,CAAC;AAEF,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAqEhE;AAmBD,wBAAgB,UAAU,IAAI,MAAM,CAoBnC;AAwFD,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAU5D"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -2954,7 +2954,7 @@ var require_dist = __commonJS((exports) => {
|
|
|
2954
2954
|
function parse(stream, callback) {
|
|
2955
2955
|
const parser = new parser_1.Parser;
|
|
2956
2956
|
stream.on("data", (buffer) => parser.parse(buffer, callback));
|
|
2957
|
-
return new Promise((
|
|
2957
|
+
return new Promise((resolve2) => stream.on("end", () => resolve2()));
|
|
2958
2958
|
}
|
|
2959
2959
|
exports.parse = parse;
|
|
2960
2960
|
});
|
|
@@ -3633,12 +3633,12 @@ var require_client = __commonJS((exports, module) => {
|
|
|
3633
3633
|
this._connect(callback);
|
|
3634
3634
|
return;
|
|
3635
3635
|
}
|
|
3636
|
-
return new this._Promise((
|
|
3636
|
+
return new this._Promise((resolve2, reject) => {
|
|
3637
3637
|
this._connect((error) => {
|
|
3638
3638
|
if (error) {
|
|
3639
3639
|
reject(error);
|
|
3640
3640
|
} else {
|
|
3641
|
-
|
|
3641
|
+
resolve2(this);
|
|
3642
3642
|
}
|
|
3643
3643
|
});
|
|
3644
3644
|
});
|
|
@@ -3970,8 +3970,8 @@ var require_client = __commonJS((exports, module) => {
|
|
|
3970
3970
|
readTimeout = config.query_timeout || this.connectionParameters.query_timeout;
|
|
3971
3971
|
query = new Query(config, values, callback);
|
|
3972
3972
|
if (!query.callback) {
|
|
3973
|
-
result = new this._Promise((
|
|
3974
|
-
query.callback = (err, res) => err ? reject(err) :
|
|
3973
|
+
result = new this._Promise((resolve2, reject) => {
|
|
3974
|
+
query.callback = (err, res) => err ? reject(err) : resolve2(res);
|
|
3975
3975
|
}).catch((err) => {
|
|
3976
3976
|
Error.captureStackTrace(err);
|
|
3977
3977
|
throw err;
|
|
@@ -4046,8 +4046,8 @@ var require_client = __commonJS((exports, module) => {
|
|
|
4046
4046
|
if (cb) {
|
|
4047
4047
|
this.connection.once("end", cb);
|
|
4048
4048
|
} else {
|
|
4049
|
-
return new this._Promise((
|
|
4050
|
-
this.connection.once("end",
|
|
4049
|
+
return new this._Promise((resolve2) => {
|
|
4050
|
+
this.connection.once("end", resolve2);
|
|
4051
4051
|
});
|
|
4052
4052
|
}
|
|
4053
4053
|
}
|
|
@@ -4094,8 +4094,8 @@ var require_pg_pool = __commonJS((exports, module) => {
|
|
|
4094
4094
|
const cb = function(err, client) {
|
|
4095
4095
|
err ? rej(err) : res(client);
|
|
4096
4096
|
};
|
|
4097
|
-
const result = new Promise2(function(
|
|
4098
|
-
res =
|
|
4097
|
+
const result = new Promise2(function(resolve2, reject) {
|
|
4098
|
+
res = resolve2;
|
|
4099
4099
|
rej = reject;
|
|
4100
4100
|
}).catch((err) => {
|
|
4101
4101
|
Error.captureStackTrace(err);
|
|
@@ -4156,7 +4156,7 @@ var require_pg_pool = __commonJS((exports, module) => {
|
|
|
4156
4156
|
if (typeof Promise2.try === "function") {
|
|
4157
4157
|
return Promise2.try(f);
|
|
4158
4158
|
}
|
|
4159
|
-
return new Promise2((
|
|
4159
|
+
return new Promise2((resolve2) => resolve2(f()));
|
|
4160
4160
|
}
|
|
4161
4161
|
_isFull() {
|
|
4162
4162
|
return this._clients.length >= this.options.max;
|
|
@@ -4532,8 +4532,8 @@ var require_query2 = __commonJS((exports, module) => {
|
|
|
4532
4532
|
NativeQuery.prototype._getPromise = function() {
|
|
4533
4533
|
if (this._promise)
|
|
4534
4534
|
return this._promise;
|
|
4535
|
-
this._promise = new Promise(function(
|
|
4536
|
-
this._once("end",
|
|
4535
|
+
this._promise = new Promise(function(resolve2, reject) {
|
|
4536
|
+
this._once("end", resolve2);
|
|
4537
4537
|
this._once("error", reject);
|
|
4538
4538
|
}.bind(this));
|
|
4539
4539
|
return this._promise;
|
|
@@ -4707,12 +4707,12 @@ var require_client2 = __commonJS((exports, module) => {
|
|
|
4707
4707
|
this._connect(callback);
|
|
4708
4708
|
return;
|
|
4709
4709
|
}
|
|
4710
|
-
return new this._Promise((
|
|
4710
|
+
return new this._Promise((resolve2, reject) => {
|
|
4711
4711
|
this._connect((error) => {
|
|
4712
4712
|
if (error) {
|
|
4713
4713
|
reject(error);
|
|
4714
4714
|
} else {
|
|
4715
|
-
|
|
4715
|
+
resolve2(this);
|
|
4716
4716
|
}
|
|
4717
4717
|
});
|
|
4718
4718
|
});
|
|
@@ -4736,8 +4736,8 @@ var require_client2 = __commonJS((exports, module) => {
|
|
|
4736
4736
|
query = new NativeQuery(config, values, callback);
|
|
4737
4737
|
if (!query.callback) {
|
|
4738
4738
|
let resolveOut, rejectOut;
|
|
4739
|
-
result = new this._Promise((
|
|
4740
|
-
resolveOut =
|
|
4739
|
+
result = new this._Promise((resolve2, reject) => {
|
|
4740
|
+
resolveOut = resolve2;
|
|
4741
4741
|
rejectOut = reject;
|
|
4742
4742
|
}).catch((err) => {
|
|
4743
4743
|
Error.captureStackTrace(err);
|
|
@@ -4795,8 +4795,8 @@ var require_client2 = __commonJS((exports, module) => {
|
|
|
4795
4795
|
}
|
|
4796
4796
|
let result;
|
|
4797
4797
|
if (!cb) {
|
|
4798
|
-
result = new this._Promise(function(
|
|
4799
|
-
cb = (err) => err ? reject(err) :
|
|
4798
|
+
result = new this._Promise(function(resolve2, reject) {
|
|
4799
|
+
cb = (err) => err ? reject(err) : resolve2();
|
|
4800
4800
|
});
|
|
4801
4801
|
}
|
|
4802
4802
|
this.native.end(function() {
|
|
@@ -4920,7 +4920,7 @@ var require_lib2 = __commonJS((exports, module) => {
|
|
|
4920
4920
|
var require_package = __commonJS((exports, module) => {
|
|
4921
4921
|
module.exports = {
|
|
4922
4922
|
name: "@hasna/recordings",
|
|
4923
|
-
version: "0.1.
|
|
4923
|
+
version: "0.1.35",
|
|
4924
4924
|
type: "module",
|
|
4925
4925
|
description: "Speech-to-text recording tool with MCP and CLI \u2014 records, transcribes, and optionally enhances text using AI",
|
|
4926
4926
|
repository: {
|
|
@@ -4970,7 +4970,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
4970
4970
|
"LICENSE"
|
|
4971
4971
|
],
|
|
4972
4972
|
dependencies: {
|
|
4973
|
-
"@hasna/events": "^0.1.
|
|
4973
|
+
"@hasna/events": "^0.1.11",
|
|
4974
4974
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
4975
4975
|
chalk: "^5.4.1",
|
|
4976
4976
|
commander: "^13.1.0",
|
|
@@ -9015,8 +9015,8 @@ var coerce = {
|
|
|
9015
9015
|
};
|
|
9016
9016
|
var NEVER = INVALID;
|
|
9017
9017
|
// src/lib/config.ts
|
|
9018
|
-
import { existsSync, readFileSync, mkdirSync,
|
|
9019
|
-
import { join } from "path";
|
|
9018
|
+
import { copyFileSync, existsSync, readFileSync, mkdirSync, readdirSync, statSync } from "fs";
|
|
9019
|
+
import { dirname, join, resolve } from "path";
|
|
9020
9020
|
import { homedir } from "os";
|
|
9021
9021
|
var DEFAULT_CONFIG = {
|
|
9022
9022
|
openai_api_key: "",
|
|
@@ -9110,44 +9110,53 @@ function expandEnvBackedConfig(config) {
|
|
|
9110
9110
|
return expanded;
|
|
9111
9111
|
}
|
|
9112
9112
|
function findConfigFile() {
|
|
9113
|
-
|
|
9114
|
-
const root = "/";
|
|
9115
|
-
while (dir !== root) {
|
|
9116
|
-
const candidate = join(dir, ".recordings", "config.json");
|
|
9117
|
-
if (existsSync(candidate))
|
|
9118
|
-
return candidate;
|
|
9119
|
-
const parent = join(dir, "..");
|
|
9120
|
-
if (parent === dir)
|
|
9121
|
-
break;
|
|
9122
|
-
dir = parent;
|
|
9123
|
-
}
|
|
9124
|
-
return null;
|
|
9113
|
+
return findProjectRecordingsPath("config.json");
|
|
9125
9114
|
}
|
|
9126
9115
|
function getDataDir() {
|
|
9127
|
-
|
|
9128
|
-
|
|
9129
|
-
|
|
9130
|
-
|
|
9131
|
-
if (existsSync(candidate))
|
|
9132
|
-
return candidate;
|
|
9133
|
-
const parent = join(dir, "..");
|
|
9134
|
-
if (parent === dir)
|
|
9135
|
-
break;
|
|
9136
|
-
dir = parent;
|
|
9137
|
-
}
|
|
9138
|
-
const home = homedir();
|
|
9116
|
+
const projectLocalDir = findProjectRecordingsPath();
|
|
9117
|
+
if (projectLocalDir)
|
|
9118
|
+
return projectLocalDir;
|
|
9119
|
+
const home = getHomeDir();
|
|
9139
9120
|
const newDir = join(home, ".hasna", "recordings");
|
|
9140
9121
|
const oldDir = join(home, ".recordings");
|
|
9141
|
-
if (
|
|
9122
|
+
if (existsSync(oldDir)) {
|
|
9142
9123
|
try {
|
|
9143
|
-
|
|
9144
|
-
cpSync(oldDir, newDir, { recursive: true });
|
|
9124
|
+
mergeDirectoryContents(oldDir, newDir);
|
|
9145
9125
|
} catch {}
|
|
9146
9126
|
}
|
|
9147
9127
|
return newDir;
|
|
9148
9128
|
}
|
|
9129
|
+
function findProjectRecordingsPath(entry) {
|
|
9130
|
+
const home = resolve(getHomeDir());
|
|
9131
|
+
let dir = resolve(process.cwd());
|
|
9132
|
+
while (true) {
|
|
9133
|
+
if (dir !== home) {
|
|
9134
|
+
const candidate = entry ? join(dir, ".recordings", entry) : join(dir, ".recordings");
|
|
9135
|
+
if (existsSync(candidate))
|
|
9136
|
+
return candidate;
|
|
9137
|
+
}
|
|
9138
|
+
const parent = dirname(dir);
|
|
9139
|
+
if (parent === dir)
|
|
9140
|
+
break;
|
|
9141
|
+
dir = parent;
|
|
9142
|
+
}
|
|
9143
|
+
return null;
|
|
9144
|
+
}
|
|
9145
|
+
function mergeDirectoryContents(sourceDir, targetDir) {
|
|
9146
|
+
mkdirSync(targetDir, { recursive: true });
|
|
9147
|
+
for (const entry of readdirSync(sourceDir)) {
|
|
9148
|
+
const sourcePath = join(sourceDir, entry);
|
|
9149
|
+
const targetPath = join(targetDir, entry);
|
|
9150
|
+
const sourceStats = statSync(sourcePath);
|
|
9151
|
+
if (sourceStats.isDirectory()) {
|
|
9152
|
+
mergeDirectoryContents(sourcePath, targetPath);
|
|
9153
|
+
} else if (!existsSync(targetPath)) {
|
|
9154
|
+
copyFileSync(sourcePath, targetPath);
|
|
9155
|
+
}
|
|
9156
|
+
}
|
|
9157
|
+
}
|
|
9149
9158
|
function loadSecretKey(keyName) {
|
|
9150
|
-
const secretsPath = join(
|
|
9159
|
+
const secretsPath = join(getHomeDir(), ".secrets");
|
|
9151
9160
|
if (!existsSync(secretsPath))
|
|
9152
9161
|
return "";
|
|
9153
9162
|
for (const candidate of listSecretFiles(secretsPath)) {
|
|
@@ -9188,6 +9197,9 @@ function listSecretFiles(path) {
|
|
|
9188
9197
|
return [];
|
|
9189
9198
|
}
|
|
9190
9199
|
}
|
|
9200
|
+
function getHomeDir() {
|
|
9201
|
+
return process.env["HOME"] || process.env["USERPROFILE"] || homedir();
|
|
9202
|
+
}
|
|
9191
9203
|
function ensureDataDir(config) {
|
|
9192
9204
|
const { mkdirSync: mkdirSync2 } = __require("fs");
|
|
9193
9205
|
mkdirSync2(config.audio_dir, { recursive: true });
|
|
@@ -9229,7 +9241,7 @@ class SqliteAdapter {
|
|
|
9229
9241
|
|
|
9230
9242
|
// src/db/database.ts
|
|
9231
9243
|
import { mkdirSync as mkdirSync2 } from "fs";
|
|
9232
|
-
import { dirname } from "path";
|
|
9244
|
+
import { dirname as dirname2 } from "path";
|
|
9233
9245
|
var _db = null;
|
|
9234
9246
|
var _adapter = null;
|
|
9235
9247
|
var MIGRATIONS = [
|
|
@@ -9315,7 +9327,7 @@ function getDatabase(dbPath) {
|
|
|
9315
9327
|
if (_db)
|
|
9316
9328
|
return _db;
|
|
9317
9329
|
const path = dbPath || loadConfig().db_path;
|
|
9318
|
-
const dir =
|
|
9330
|
+
const dir = dirname2(path);
|
|
9319
9331
|
mkdirSync2(dir, { recursive: true });
|
|
9320
9332
|
_adapter = new SqliteAdapter(path);
|
|
9321
9333
|
_db = _adapter.raw;
|
|
@@ -9798,7 +9810,7 @@ async function processText(rawText, config, systemPrompt) {
|
|
|
9798
9810
|
}
|
|
9799
9811
|
|
|
9800
9812
|
// src/version.ts
|
|
9801
|
-
var VERSION = "0.1.
|
|
9813
|
+
var VERSION = "0.1.35";
|
|
9802
9814
|
|
|
9803
9815
|
// src/db/storage-config.ts
|
|
9804
9816
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|