@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/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((resolve) => stream.on("end", () => resolve()));
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((resolve, reject) => {
3622
+ return new this._Promise((resolve2, reject) => {
3623
3623
  this._connect((error) => {
3624
3624
  if (error) {
3625
3625
  reject(error);
3626
3626
  } else {
3627
- resolve(this);
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((resolve, reject) => {
3960
- query.callback = (err, res) => err ? reject(err) : resolve(res);
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((resolve) => {
4036
- this.connection.once("end", resolve);
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(resolve, reject) {
4084
- res = resolve;
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((resolve) => resolve(f()));
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(resolve, reject) {
4522
- this._once("end", resolve);
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((resolve, reject) => {
4696
+ return new this._Promise((resolve2, reject) => {
4697
4697
  this._connect((error) => {
4698
4698
  if (error) {
4699
4699
  reject(error);
4700
4700
  } else {
4701
- resolve(this);
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((resolve, reject) => {
4726
- resolveOut = resolve;
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(resolve, reject) {
4785
- cb = (err) => err ? reject(err) : resolve();
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, cpSync, readdirSync, statSync } from "fs";
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
- let dir = process.cwd();
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
- let dir = process.cwd();
5079
- const root = "/";
5080
- while (dir !== root) {
5081
- const candidate = join(dir, ".recordings");
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 (!existsSync(newDir) && existsSync(oldDir)) {
5073
+ if (existsSync(oldDir)) {
5093
5074
  try {
5094
- mkdirSync(join(home, ".hasna"), { recursive: true });
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(homedir(), ".secrets");
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 = dirname(path);
5248
+ const dir = dirname2(path);
5237
5249
  mkdirSync2(dir, { recursive: true });
5238
5250
  _adapter = new SqliteAdapter(path);
5239
5251
  _db = _adapter.raw;
@@ -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;AA6BD,wBAAgB,UAAU,IAAI,MAAM,CA4BnC;AAqDD,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAU5D"}
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((resolve) => stream.on("end", () => resolve()));
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((resolve, reject) => {
3636
+ return new this._Promise((resolve2, reject) => {
3637
3637
  this._connect((error) => {
3638
3638
  if (error) {
3639
3639
  reject(error);
3640
3640
  } else {
3641
- resolve(this);
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((resolve, reject) => {
3974
- query.callback = (err, res) => err ? reject(err) : resolve(res);
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((resolve) => {
4050
- this.connection.once("end", resolve);
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(resolve, reject) {
4098
- res = resolve;
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((resolve) => resolve(f()));
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(resolve, reject) {
4536
- this._once("end", resolve);
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((resolve, reject) => {
4710
+ return new this._Promise((resolve2, reject) => {
4711
4711
  this._connect((error) => {
4712
4712
  if (error) {
4713
4713
  reject(error);
4714
4714
  } else {
4715
- resolve(this);
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((resolve, reject) => {
4740
- resolveOut = resolve;
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(resolve, reject) {
4799
- cb = (err) => err ? reject(err) : resolve();
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.34",
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.7",
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, cpSync, readdirSync, statSync } from "fs";
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
- let dir = process.cwd();
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
- let dir = process.cwd();
9128
- const root = "/";
9129
- while (dir !== root) {
9130
- const candidate = join(dir, ".recordings");
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 (!existsSync(newDir) && existsSync(oldDir)) {
9122
+ if (existsSync(oldDir)) {
9142
9123
  try {
9143
- mkdirSync(join(home, ".hasna"), { recursive: true });
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(homedir(), ".secrets");
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 = dirname(path);
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.33";
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";