@vheins/local-memory-mcp 0.19.5 → 0.19.7

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.
@@ -1070,7 +1070,15 @@ var BaseEntity = class {
1070
1070
  status: r.status || "active",
1071
1071
  is_global: r.is_global === 1,
1072
1072
  tags: this.safeJSONParse(r.tags, []),
1073
- metadata: this.safeJSONParse(r.metadata, {})
1073
+ metadata: (() => {
1074
+ const meta = this.safeJSONParse(r.metadata, {});
1075
+ delete meta.structuredData;
1076
+ return meta;
1077
+ })(),
1078
+ structuredData: (() => {
1079
+ const meta = this.safeJSONParse(r.metadata, {});
1080
+ return meta.structuredData ?? void 0;
1081
+ })()
1074
1082
  };
1075
1083
  }
1076
1084
  rowToTask(row) {
@@ -1162,6 +1170,7 @@ var VALID_COLUMNS = /* @__PURE__ */ new Set([
1162
1170
  ]);
1163
1171
  var MemoryEntity = class extends BaseEntity {
1164
1172
  insert(entry) {
1173
+ const mergedMeta = this.mergeStructuredData(entry.metadata, entry.structuredData);
1165
1174
  this.run(
1166
1175
  `INSERT INTO memories (
1167
1176
  id, code, repo, owner, type, title, content, importance, folder, language,
@@ -1186,7 +1195,7 @@ var MemoryEntity = class extends BaseEntity {
1186
1195
  entry.status || "active",
1187
1196
  entry.is_global ? 1 : 0,
1188
1197
  entry.tags ? JSON.stringify(entry.tags) : null,
1189
- entry.metadata ? JSON.stringify(entry.metadata) : null,
1198
+ mergedMeta ? JSON.stringify(mergedMeta) : null,
1190
1199
  entry.agent || "unknown",
1191
1200
  entry.role || "unknown",
1192
1201
  entry.model || "unknown",
@@ -1194,6 +1203,9 @@ var MemoryEntity = class extends BaseEntity {
1194
1203
  ]
1195
1204
  );
1196
1205
  }
1206
+ mergeStructuredData(metadata, structuredData) {
1207
+ return { ...metadata, structuredData: structuredData ?? {} };
1208
+ }
1197
1209
  update(id, updates) {
1198
1210
  const fields = [];
1199
1211
  const values = [];
@@ -1219,6 +1231,12 @@ var MemoryEntity = class extends BaseEntity {
1219
1231
  fields.push("language = ?");
1220
1232
  values.push(scope.language);
1221
1233
  }
1234
+ } else if (k === "structuredData") {
1235
+ const existingRow = this.get("SELECT metadata FROM memories WHERE id = ?", [id]);
1236
+ const existingMeta = existingRow ? this.safeJSONParse(existingRow.metadata, {}) : {};
1237
+ const merged = { ...existingMeta, structuredData: val };
1238
+ fields.push("metadata = ?");
1239
+ values.push(JSON.stringify(merged));
1222
1240
  } else if (k === "tags" || k === "metadata") {
1223
1241
  fields.push(`${k} = ?`);
1224
1242
  values.push(JSON.stringify(val));
@@ -1322,6 +1340,7 @@ var MemoryEntity = class extends BaseEntity {
1322
1340
  return this.transaction(() => {
1323
1341
  let count = 0;
1324
1342
  for (const entry of entries) {
1343
+ const mergedMeta = this.mergeStructuredData(entry.metadata, entry.structuredData);
1325
1344
  this.run(
1326
1345
  `INSERT INTO memories (
1327
1346
  id, repo, owner, type, title, content, importance, folder, language,
@@ -1345,7 +1364,7 @@ var MemoryEntity = class extends BaseEntity {
1345
1364
  entry.status || "active",
1346
1365
  entry.is_global ? 1 : 0,
1347
1366
  entry.tags ? JSON.stringify(entry.tags) : null,
1348
- entry.metadata ? JSON.stringify(entry.metadata) : null,
1367
+ mergedMeta ? JSON.stringify(mergedMeta) : null,
1349
1368
  entry.agent || "unknown",
1350
1369
  entry.role || "unknown",
1351
1370
  entry.model || "unknown",
@@ -3479,6 +3498,10 @@ function inferRepoFromSession(session) {
3479
3498
  if (roots.length === 1) {
3480
3499
  return path3.basename(roots[0]);
3481
3500
  }
3501
+ if (roots.length === 0) {
3502
+ const cwd = process.cwd();
3503
+ return path3.basename(cwd);
3504
+ }
3482
3505
  return void 0;
3483
3506
  }
3484
3507
  function inferOwnerFromSession(session) {
@@ -3489,6 +3512,13 @@ function inferOwnerFromSession(session) {
3489
3512
  return parts[parts.length - 2];
3490
3513
  }
3491
3514
  }
3515
+ if (roots.length === 0) {
3516
+ const cwd = process.cwd();
3517
+ const parts = cwd.split(path3.sep).filter(Boolean);
3518
+ if (parts.length >= 2) {
3519
+ return parts[parts.length - 2];
3520
+ }
3521
+ }
3492
3522
  return void 0;
3493
3523
  }
3494
3524
 
@@ -3595,9 +3625,12 @@ var MEMORY_TOOL_DEFINITIONS = [
3595
3625
  properties: {
3596
3626
  owner: {
3597
3627
  type: "string",
3598
- description: "Organization/namespace (e.g., GitHub org or username)"
3628
+ description: "Organization/namespace (e.g., GitHub org or username)."
3629
+ },
3630
+ repo: {
3631
+ type: "string",
3632
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Optional when a single MCP root is active."
3599
3633
  },
3600
- repo: { type: "string", description: "Repository/project name. Optional when a single MCP root is active." },
3601
3634
  objective: { type: "string", minLength: 5, description: "Question or synthesis objective." },
3602
3635
  current_file_path: {
3603
3636
  type: "string",
@@ -3651,7 +3684,7 @@ var MEMORY_TOOL_DEFINITIONS = [
3651
3684
  properties: {
3652
3685
  code: { type: "string", description: "Short memory code." },
3653
3686
  owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
3654
- repo: { type: "string", description: "Repository/project name." },
3687
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
3655
3688
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON details." }
3656
3689
  }
3657
3690
  }
@@ -3713,7 +3746,7 @@ var MEMORY_TOOL_DEFINITIONS = [
3713
3746
  type: "object",
3714
3747
  properties: {
3715
3748
  owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
3716
- repo: { type: "string", description: "Repository/project name" },
3749
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')" },
3717
3750
  branch: { type: "string", description: "Git branch this memory relates to" },
3718
3751
  folder: { type: "string", description: "Subdirectory within the repo" },
3719
3752
  language: { type: "string", description: "Programming language (e.g., 'typescript', 'python')" }
@@ -3771,7 +3804,7 @@ var MEMORY_TOOL_DEFINITIONS = [
3771
3804
  type: "object",
3772
3805
  properties: {
3773
3806
  owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
3774
- repo: { type: "string", description: "Repository/project name" },
3807
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')" },
3775
3808
  branch: { type: "string", description: "Git branch this memory relates to" },
3776
3809
  folder: { type: "string", description: "Subdirectory within the repo" },
3777
3810
  language: { type: "string", description: "Programming language" }
@@ -3860,8 +3893,8 @@ var MEMORY_TOOL_DEFINITIONS = [
3860
3893
  title: "By ID",
3861
3894
  required: ["owner", "repo", "id"],
3862
3895
  properties: {
3863
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
3864
- repo: { type: "string", description: "Repository name" },
3896
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
3897
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
3865
3898
  id: { type: "string", format: "uuid", description: "Memory entry ID." },
3866
3899
  type: { type: "string", enum: ["code_fact", "decision", "mistake", "pattern", "task_archive"] },
3867
3900
  title: { type: "string", minLength: 3, maxLength: 100 },
@@ -3886,8 +3919,8 @@ var MEMORY_TOOL_DEFINITIONS = [
3886
3919
  title: "By code",
3887
3920
  required: ["owner", "repo", "code"],
3888
3921
  properties: {
3889
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
3890
- repo: { type: "string", description: "Repository name" },
3922
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
3923
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
3891
3924
  code: { type: "string", maxLength: 20, description: "Short memory code." },
3892
3925
  type: { type: "string", enum: ["code_fact", "decision", "mistake", "pattern", "task_archive"] },
3893
3926
  title: { type: "string", minLength: 3, maxLength: 100 },
@@ -3943,8 +3976,8 @@ var MEMORY_TOOL_DEFINITIONS = [
3943
3976
  description: "Search keyword to match against memory titles and content"
3944
3977
  },
3945
3978
  prompt: { type: "string", description: "Natural language prompt for semantic search" },
3946
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
3947
- repo: { type: "string", description: "Repository/project name" },
3979
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
3980
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
3948
3981
  current_tags: {
3949
3982
  type: "array",
3950
3983
  items: { type: "string" },
@@ -3972,7 +4005,7 @@ var MEMORY_TOOL_DEFINITIONS = [
3972
4005
  type: "object",
3973
4006
  properties: {
3974
4007
  owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
3975
- repo: { type: "string", description: "Repository/project name" },
4008
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')" },
3976
4009
  branch: { type: "string", description: "Git branch filter" },
3977
4010
  folder: { type: "string", description: "Subdirectory filter" },
3978
4011
  language: { type: "string", description: "Programming language filter" }
@@ -4027,8 +4060,8 @@ var MEMORY_TOOL_DEFINITIONS = [
4027
4060
  inputSchema: {
4028
4061
  type: "object",
4029
4062
  properties: {
4030
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4031
- repo: { type: "string", description: "Repository/project name" },
4063
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
4064
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4032
4065
  signals: {
4033
4066
  type: "array",
4034
4067
  items: { type: "string", maxLength: 200 },
@@ -4067,8 +4100,8 @@ var MEMORY_TOOL_DEFINITIONS = [
4067
4100
  title: "By single ID",
4068
4101
  required: ["owner", "repo", "id"],
4069
4102
  properties: {
4070
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4071
- repo: { type: "string", description: "Repository name." },
4103
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
4104
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4072
4105
  id: { type: "string", format: "uuid", description: "Memory entry ID to delete." },
4073
4106
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
4074
4107
  }
@@ -4077,8 +4110,8 @@ var MEMORY_TOOL_DEFINITIONS = [
4077
4110
  title: "By bulk IDs",
4078
4111
  required: ["owner", "repo", "ids"],
4079
4112
  properties: {
4080
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4081
- repo: { type: "string", description: "Repository name." },
4113
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
4114
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4082
4115
  ids: {
4083
4116
  type: "array",
4084
4117
  items: { type: "string", format: "uuid" },
@@ -4092,8 +4125,8 @@ var MEMORY_TOOL_DEFINITIONS = [
4092
4125
  title: "By single code",
4093
4126
  required: ["owner", "repo", "code"],
4094
4127
  properties: {
4095
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4096
- repo: { type: "string", description: "Repository name." },
4128
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
4129
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4097
4130
  code: { type: "string", maxLength: 20, description: "Short memory code." },
4098
4131
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
4099
4132
  }
@@ -4102,8 +4135,8 @@ var MEMORY_TOOL_DEFINITIONS = [
4102
4135
  title: "By bulk codes",
4103
4136
  required: ["owner", "repo", "codes"],
4104
4137
  properties: {
4105
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4106
- repo: { type: "string", description: "Repository name." },
4138
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
4139
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4107
4140
  codes: {
4108
4141
  type: "array",
4109
4142
  items: { type: "string", maxLength: 20 },
@@ -4141,8 +4174,8 @@ var MEMORY_TOOL_DEFINITIONS = [
4141
4174
  inputSchema: {
4142
4175
  type: "object",
4143
4176
  properties: {
4144
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4145
- repo: { type: "string", description: "Repository/project name (required)" },
4177
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
4178
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4146
4179
  limit: {
4147
4180
  type: "number",
4148
4181
  minimum: 1,
@@ -4220,10 +4253,13 @@ var TASK_TOOL_DEFINITIONS = [
4220
4253
  inputSchema: {
4221
4254
  type: "object",
4222
4255
  properties: {
4223
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4256
+ owner: {
4257
+ type: "string",
4258
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4259
+ },
4224
4260
  repo: {
4225
4261
  type: "string",
4226
- description: "Repository name. Optional when it can be inferred from MCP roots or elicited from the user."
4262
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4227
4263
  },
4228
4264
  task_code: { type: "string" },
4229
4265
  phase: { type: "string" },
@@ -4246,7 +4282,7 @@ var TASK_TOOL_DEFINITIONS = [
4246
4282
  doc_path: { type: "string" },
4247
4283
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
4248
4284
  },
4249
- required: ["owner"]
4285
+ required: []
4250
4286
  },
4251
4287
  outputSchema: {
4252
4288
  type: "object",
@@ -4270,10 +4306,16 @@ var TASK_TOOL_DEFINITIONS = [
4270
4306
  oneOf: [
4271
4307
  {
4272
4308
  title: "By ID",
4273
- required: ["owner", "repo", "id"],
4309
+ required: ["id"],
4274
4310
  properties: {
4275
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4276
- repo: { type: "string", description: "Repository name" },
4311
+ owner: {
4312
+ type: "string",
4313
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4314
+ },
4315
+ repo: {
4316
+ type: "string",
4317
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4318
+ },
4277
4319
  id: { type: "string", format: "uuid", description: "Task ID" },
4278
4320
  structured: {
4279
4321
  type: "boolean",
@@ -4284,10 +4326,16 @@ var TASK_TOOL_DEFINITIONS = [
4284
4326
  },
4285
4327
  {
4286
4328
  title: "By task_code",
4287
- required: ["owner", "repo", "task_code"],
4329
+ required: ["task_code"],
4288
4330
  properties: {
4289
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4290
- repo: { type: "string", description: "Repository name" },
4331
+ owner: {
4332
+ type: "string",
4333
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4334
+ },
4335
+ repo: {
4336
+ type: "string",
4337
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4338
+ },
4291
4339
  task_code: {
4292
4340
  type: "string",
4293
4341
  description: "Task code (e.g. PERF-1, TASK-001). Use instead of 'id' for string code lookup."
@@ -4301,10 +4349,16 @@ var TASK_TOOL_DEFINITIONS = [
4301
4349
  },
4302
4350
  {
4303
4351
  title: "By task_codes",
4304
- required: ["owner", "repo", "task_codes"],
4352
+ required: ["task_codes"],
4305
4353
  properties: {
4306
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4307
- repo: { type: "string", description: "Repository name" },
4354
+ owner: {
4355
+ type: "string",
4356
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4357
+ },
4358
+ repo: {
4359
+ type: "string",
4360
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4361
+ },
4308
4362
  task_codes: {
4309
4363
  type: "array",
4310
4364
  items: { type: "string" },
@@ -4333,8 +4387,14 @@ var TASK_TOOL_DEFINITIONS = [
4333
4387
  inputSchema: {
4334
4388
  type: "object",
4335
4389
  properties: {
4336
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4337
- repo: { type: "string", description: "Repository/project name" },
4390
+ owner: {
4391
+ type: "string",
4392
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4393
+ },
4394
+ repo: {
4395
+ type: "string",
4396
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4397
+ },
4338
4398
  task_code: { type: "string", description: "Unique task code (e.g. TASK-001) (Required for single task)" },
4339
4399
  phase: { type: "string", description: "Project phase (Required for single task)" },
4340
4400
  title: {
@@ -4415,7 +4475,7 @@ var TASK_TOOL_DEFINITIONS = [
4415
4475
  },
4416
4476
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
4417
4477
  },
4418
- required: ["owner", "repo"]
4478
+ required: []
4419
4479
  },
4420
4480
  outputSchema: {
4421
4481
  type: "object",
@@ -4448,10 +4508,16 @@ var TASK_TOOL_DEFINITIONS = [
4448
4508
  oneOf: [
4449
4509
  {
4450
4510
  title: "By ID",
4451
- required: ["owner", "repo", "id"],
4511
+ required: ["id"],
4452
4512
  properties: {
4453
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4454
- repo: { type: "string", description: "Repository name" },
4513
+ owner: {
4514
+ type: "string",
4515
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4516
+ },
4517
+ repo: {
4518
+ type: "string",
4519
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4520
+ },
4455
4521
  id: { type: "string", format: "uuid", description: "Task ID (for single update)" },
4456
4522
  phase: { type: "string" },
4457
4523
  title: { type: "string", minLength: 3, maxLength: 100 },
@@ -4511,10 +4577,16 @@ var TASK_TOOL_DEFINITIONS = [
4511
4577
  },
4512
4578
  {
4513
4579
  title: "By IDs",
4514
- required: ["owner", "repo", "ids"],
4580
+ required: ["ids"],
4515
4581
  properties: {
4516
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4517
- repo: { type: "string", description: "Repository name" },
4582
+ owner: {
4583
+ type: "string",
4584
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4585
+ },
4586
+ repo: {
4587
+ type: "string",
4588
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4589
+ },
4518
4590
  ids: {
4519
4591
  type: "array",
4520
4592
  items: { type: "string", format: "uuid" },
@@ -4578,10 +4650,16 @@ var TASK_TOOL_DEFINITIONS = [
4578
4650
  },
4579
4651
  {
4580
4652
  title: "By task_code",
4581
- required: ["owner", "repo", "task_code"],
4653
+ required: ["task_code"],
4582
4654
  properties: {
4583
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4584
- repo: { type: "string", description: "Repository name" },
4655
+ owner: {
4656
+ type: "string",
4657
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4658
+ },
4659
+ repo: {
4660
+ type: "string",
4661
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4662
+ },
4585
4663
  task_code: { type: "string" },
4586
4664
  phase: { type: "string" },
4587
4665
  title: { type: "string", minLength: 3, maxLength: 100 },
@@ -4641,10 +4719,16 @@ var TASK_TOOL_DEFINITIONS = [
4641
4719
  },
4642
4720
  {
4643
4721
  title: "By task_codes",
4644
- required: ["owner", "repo", "task_codes"],
4722
+ required: ["task_codes"],
4645
4723
  properties: {
4646
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4647
- repo: { type: "string", description: "Repository name" },
4724
+ owner: {
4725
+ type: "string",
4726
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4727
+ },
4728
+ repo: {
4729
+ type: "string",
4730
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4731
+ },
4648
4732
  task_codes: {
4649
4733
  type: "array",
4650
4734
  items: { type: "string" },
@@ -4742,20 +4826,32 @@ var TASK_TOOL_DEFINITIONS = [
4742
4826
  oneOf: [
4743
4827
  {
4744
4828
  title: "By ID",
4745
- required: ["owner", "repo", "id"],
4829
+ required: ["id"],
4746
4830
  properties: {
4747
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4748
- repo: { type: "string", description: "Repository name" },
4831
+ owner: {
4832
+ type: "string",
4833
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4834
+ },
4835
+ repo: {
4836
+ type: "string",
4837
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4838
+ },
4749
4839
  id: { type: "string", format: "uuid", description: "Task ID (for single deletion)" },
4750
4840
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
4751
4841
  }
4752
4842
  },
4753
4843
  {
4754
4844
  title: "By IDs",
4755
- required: ["owner", "repo", "ids"],
4845
+ required: ["ids"],
4756
4846
  properties: {
4757
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4758
- repo: { type: "string", description: "Repository name" },
4847
+ owner: {
4848
+ type: "string",
4849
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4850
+ },
4851
+ repo: {
4852
+ type: "string",
4853
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4854
+ },
4759
4855
  ids: {
4760
4856
  type: "array",
4761
4857
  items: { type: "string", format: "uuid" },
@@ -4766,10 +4862,16 @@ var TASK_TOOL_DEFINITIONS = [
4766
4862
  },
4767
4863
  {
4768
4864
  title: "By task_code",
4769
- required: ["owner", "repo", "task_code"],
4865
+ required: ["task_code"],
4770
4866
  properties: {
4771
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4772
- repo: { type: "string", description: "Repository name" },
4867
+ owner: {
4868
+ type: "string",
4869
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4870
+ },
4871
+ repo: {
4872
+ type: "string",
4873
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4874
+ },
4773
4875
  task_code: {
4774
4876
  type: "string",
4775
4877
  description: "Task code (e.g. PERF-1, TASK-001). Use instead of 'id' for string code lookup."
@@ -4779,10 +4881,16 @@ var TASK_TOOL_DEFINITIONS = [
4779
4881
  },
4780
4882
  {
4781
4883
  title: "By task_codes",
4782
- required: ["owner", "repo", "task_codes"],
4884
+ required: ["task_codes"],
4783
4885
  properties: {
4784
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4785
- repo: { type: "string", description: "Repository name" },
4886
+ owner: {
4887
+ type: "string",
4888
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4889
+ },
4890
+ repo: {
4891
+ type: "string",
4892
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4893
+ },
4786
4894
  task_codes: {
4787
4895
  type: "array",
4788
4896
  items: { type: "string" },
@@ -4819,10 +4927,13 @@ var TASK_TOOL_DEFINITIONS = [
4819
4927
  inputSchema: {
4820
4928
  type: "object",
4821
4929
  properties: {
4822
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4930
+ owner: {
4931
+ type: "string",
4932
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
4933
+ },
4823
4934
  repo: {
4824
4935
  type: "string",
4825
- description: "Repository/project name (required)"
4936
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
4826
4937
  },
4827
4938
  status: {
4828
4939
  type: "string",
@@ -4856,7 +4967,7 @@ var TASK_TOOL_DEFINITIONS = [
4856
4967
  description: "If true, returns structured JSON without the text content summary."
4857
4968
  }
4858
4969
  },
4859
- required: ["owner", "repo"]
4970
+ required: []
4860
4971
  },
4861
4972
  outputSchema: {
4862
4973
  type: "object",
@@ -4896,8 +5007,14 @@ var TASK_TOOL_DEFINITIONS = [
4896
5007
  inputSchema: {
4897
5008
  type: "object",
4898
5009
  properties: {
4899
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4900
- repo: { type: "string", description: "Repository/project name" },
5010
+ owner: {
5011
+ type: "string",
5012
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5013
+ },
5014
+ repo: {
5015
+ type: "string",
5016
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5017
+ },
4901
5018
  query: {
4902
5019
  type: "string",
4903
5020
  minLength: 1,
@@ -4910,7 +5027,7 @@ var TASK_TOOL_DEFINITIONS = [
4910
5027
  offset: { type: "number", minimum: 0, default: 0 },
4911
5028
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
4912
5029
  },
4913
- required: ["owner", "repo", "query"]
5030
+ required: ["query"]
4914
5031
  },
4915
5032
  outputSchema: {
4916
5033
  type: "object",
@@ -4958,8 +5075,8 @@ var HANDOFF_TOOL_DEFINITIONS = [
4958
5075
  inputSchema: {
4959
5076
  type: "object",
4960
5077
  properties: {
4961
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
4962
- repo: { type: "string", description: "Repository/project name" },
5078
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5079
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
4963
5080
  from_agent: { type: "string", description: "Agent creating the handoff" },
4964
5081
  to_agent: { type: "string", description: "Optional target agent" },
4965
5082
  task_id: { type: "string", format: "uuid", description: "Optional task id to associate" },
@@ -5033,8 +5150,8 @@ var HANDOFF_TOOL_DEFINITIONS = [
5033
5150
  inputSchema: {
5034
5151
  type: "object",
5035
5152
  properties: {
5036
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5037
- repo: { type: "string", description: "Repository/project name" },
5153
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5154
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5038
5155
  status: { type: "string", enum: ["pending", "accepted", "rejected", "expired"] },
5039
5156
  from_agent: { type: "string" },
5040
5157
  to_agent: { type: "string" },
@@ -5083,8 +5200,8 @@ var HANDOFF_TOOL_DEFINITIONS = [
5083
5200
  inputSchema: {
5084
5201
  type: "object",
5085
5202
  properties: {
5086
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5087
- repo: { type: "string", description: "Repository/project name" },
5203
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5204
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5088
5205
  task_id: {
5089
5206
  type: "string",
5090
5207
  format: "uuid",
@@ -5127,8 +5244,8 @@ var HANDOFF_TOOL_DEFINITIONS = [
5127
5244
  inputSchema: {
5128
5245
  type: "object",
5129
5246
  properties: {
5130
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5131
- repo: { type: "string", description: "Repository/project name" },
5247
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5248
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5132
5249
  agent: { type: "string", description: "Optional agent filter" },
5133
5250
  active_only: { type: "boolean", description: "When true, return only unreleased claims" },
5134
5251
  limit: { type: "number", minimum: 1, maximum: 100, default: 20 },
@@ -5176,8 +5293,8 @@ var HANDOFF_TOOL_DEFINITIONS = [
5176
5293
  inputSchema: {
5177
5294
  type: "object",
5178
5295
  properties: {
5179
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5180
- repo: { type: "string", description: "Repository name" },
5296
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5297
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5181
5298
  task_id: {
5182
5299
  type: "string",
5183
5300
  format: "uuid",
@@ -5226,7 +5343,7 @@ var STANDARD_TOOL_DEFINITIONS = [
5226
5343
  properties: {
5227
5344
  code: { type: "string", description: "Short standard code (e.g. 'A3KPQ2')." },
5228
5345
  owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5229
- repo: { type: "string", description: "Repository/project name." },
5346
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5230
5347
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON details." }
5231
5348
  }
5232
5349
  }
@@ -5250,8 +5367,8 @@ var STANDARD_TOOL_DEFINITIONS = [
5250
5367
  title: "By single ID",
5251
5368
  required: ["owner", "repo", "id"],
5252
5369
  properties: {
5253
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5254
- repo: { type: "string", description: "Repository name." },
5370
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5371
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5255
5372
  id: { type: "string", format: "uuid", description: "Coding standard ID to delete." },
5256
5373
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
5257
5374
  }
@@ -5260,8 +5377,8 @@ var STANDARD_TOOL_DEFINITIONS = [
5260
5377
  title: "By bulk IDs",
5261
5378
  required: ["owner", "repo", "ids"],
5262
5379
  properties: {
5263
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5264
- repo: { type: "string", description: "Repository name." },
5380
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5381
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5265
5382
  ids: {
5266
5383
  type: "array",
5267
5384
  items: { type: "string", format: "uuid" },
@@ -5275,8 +5392,8 @@ var STANDARD_TOOL_DEFINITIONS = [
5275
5392
  title: "By single code",
5276
5393
  required: ["owner", "repo", "code"],
5277
5394
  properties: {
5278
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5279
- repo: { type: "string", description: "Repository name." },
5395
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5396
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5280
5397
  code: { type: "string", maxLength: 20, description: "Short standard code." },
5281
5398
  structured: { type: "boolean", default: false, description: "If true, returns structured JSON result." }
5282
5399
  }
@@ -5285,8 +5402,8 @@ var STANDARD_TOOL_DEFINITIONS = [
5285
5402
  title: "By bulk codes",
5286
5403
  required: ["owner", "repo", "codes"],
5287
5404
  properties: {
5288
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5289
- repo: { type: "string", description: "Repository name." },
5405
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5406
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5290
5407
  codes: {
5291
5408
  type: "array",
5292
5409
  items: { type: "string", maxLength: 20 },
@@ -5325,7 +5442,7 @@ var STANDARD_TOOL_DEFINITIONS = [
5325
5442
  inputSchema: {
5326
5443
  type: "object",
5327
5444
  properties: {
5328
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5445
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5329
5446
  name: { type: "string", minLength: 3, maxLength: 255, description: "Human-readable standard name" },
5330
5447
  content: {
5331
5448
  type: "string",
@@ -5346,7 +5463,7 @@ var STANDARD_TOOL_DEFINITIONS = [
5346
5463
  },
5347
5464
  repo: {
5348
5465
  type: "string",
5349
- description: "Repository name for repo-specific standards. Omit only for global standards."
5466
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Required for repo-specific standards. Omit only for global standards."
5350
5467
  },
5351
5468
  is_global: { type: "boolean", description: "Whether standard applies globally or repo-specific" },
5352
5469
  tags: {
@@ -5449,8 +5566,8 @@ var STANDARD_TOOL_DEFINITIONS = [
5449
5566
  title: "By ID",
5450
5567
  required: ["owner", "repo", "id"],
5451
5568
  properties: {
5452
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5453
- repo: { type: "string", description: "Repository name" },
5569
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5570
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5454
5571
  id: { type: "string", format: "uuid", description: "Standard ID to update." },
5455
5572
  code: { type: "string", maxLength: 20, description: "Short standard code." },
5456
5573
  name: { type: "string", minLength: 3, maxLength: 255 },
@@ -5472,8 +5589,8 @@ var STANDARD_TOOL_DEFINITIONS = [
5472
5589
  title: "By code",
5473
5590
  required: ["owner", "repo", "code"],
5474
5591
  properties: {
5475
- owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)" },
5476
- repo: { type: "string", description: "Repository name" },
5592
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5593
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp')." },
5477
5594
  code: { type: "string", maxLength: 20, description: "Short standard code." },
5478
5595
  id: { type: "string", format: "uuid", description: "Standard ID." },
5479
5596
  name: { type: "string", minLength: 3, maxLength: 255 },
@@ -5515,6 +5632,7 @@ var STANDARD_TOOL_DEFINITIONS = [
5515
5632
  inputSchema: {
5516
5633
  type: "object",
5517
5634
  properties: {
5635
+ owner: { type: "string", description: "Organization/namespace (e.g., GitHub org or username)." },
5518
5636
  query: { type: "string", description: "Search query (optional, searches title/content)" },
5519
5637
  stack: {
5520
5638
  type: "array",
@@ -5529,7 +5647,7 @@ var STANDARD_TOOL_DEFINITIONS = [
5529
5647
  language: { type: "string", description: "Programming language filter" },
5530
5648
  context: { type: "string", description: "Context/category filter" },
5531
5649
  version: { type: "string", description: "Version filter" },
5532
- repo: { type: "string", description: "Repository filter (optional)" },
5650
+ repo: { type: "string", description: "Repository/project name (e.g., 'local-memory-mcp'). Optional filter." },
5533
5651
  is_global: { type: "boolean", description: "Filter by global/repo-specific" },
5534
5652
  limit: { type: "number", minimum: 1, maximum: 100, default: 20 },
5535
5653
  offset: { type: "number", minimum: 0, default: 0 },
@@ -5583,11 +5701,11 @@ var AGENT_TOOL_DEFINITIONS = [
5583
5701
  properties: {
5584
5702
  owner: {
5585
5703
  type: "string",
5586
- description: "Organization/namespace (e.g., GitHub org or username). Auto-detected from session when omitted."
5704
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5587
5705
  },
5588
5706
  repo: {
5589
5707
  type: "string",
5590
- description: "Repository/project name. Auto-detected from session when omitted."
5708
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5591
5709
  },
5592
5710
  objective: {
5593
5711
  type: "string",
@@ -5694,11 +5812,11 @@ var AGENT_TOOL_DEFINITIONS = [
5694
5812
  },
5695
5813
  owner: {
5696
5814
  type: "string",
5697
- description: "Organization/namespace. Auto-detected from session when omitted."
5815
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5698
5816
  },
5699
5817
  repo: {
5700
5818
  type: "string",
5701
- description: "Repository/project name. Auto-detected from session when omitted."
5819
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5702
5820
  },
5703
5821
  structured: {
5704
5822
  type: "boolean",
@@ -5753,11 +5871,11 @@ var AGENT_TOOL_DEFINITIONS = [
5753
5871
  },
5754
5872
  owner: {
5755
5873
  type: "string",
5756
- description: "Organization/namespace. Auto-detected from session when omitted."
5874
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5757
5875
  },
5758
5876
  repo: {
5759
5877
  type: "string",
5760
- description: "Repository/project name. Auto-detected from session when omitted."
5878
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5761
5879
  },
5762
5880
  structured: {
5763
5881
  type: "boolean",
@@ -5788,8 +5906,14 @@ var AGENT_TOOL_DEFINITIONS = [
5788
5906
  inputSchema: {
5789
5907
  type: "object",
5790
5908
  properties: {
5791
- owner: { type: "string", description: "Auto-detected from session." },
5792
- repo: { type: "string", description: "Auto-detected from session." },
5909
+ owner: {
5910
+ type: "string",
5911
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5912
+ },
5913
+ repo: {
5914
+ type: "string",
5915
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5916
+ },
5793
5917
  title: { type: "string", description: "Title for the fact/memory." },
5794
5918
  content: { type: "string", description: "The fact content to store." },
5795
5919
  type: { type: "string", default: "code_fact" },
@@ -5811,8 +5935,14 @@ var AGENT_TOOL_DEFINITIONS = [
5811
5935
  inputSchema: {
5812
5936
  type: "object",
5813
5937
  properties: {
5814
- owner: { type: "string" },
5815
- repo: { type: "string" },
5938
+ owner: {
5939
+ type: "string",
5940
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5941
+ },
5942
+ repo: {
5943
+ type: "string",
5944
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5945
+ },
5816
5946
  facts: { type: "array", items: { type: "object" }, description: "Array of fact objects." }
5817
5947
  },
5818
5948
  required: ["facts"]
@@ -5827,8 +5957,14 @@ var AGENT_TOOL_DEFINITIONS = [
5827
5957
  inputSchema: {
5828
5958
  type: "object",
5829
5959
  properties: {
5830
- owner: { type: "string" },
5831
- repo: { type: "string" },
5960
+ owner: {
5961
+ type: "string",
5962
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5963
+ },
5964
+ repo: {
5965
+ type: "string",
5966
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5967
+ },
5832
5968
  query: { type: "string", description: "Search query." },
5833
5969
  type: { type: "string", description: "Filter by memory type." },
5834
5970
  limit: { type: "number", default: 10 }
@@ -5845,8 +5981,14 @@ var AGENT_TOOL_DEFINITIONS = [
5845
5981
  inputSchema: {
5846
5982
  type: "object",
5847
5983
  properties: {
5848
- owner: { type: "string" },
5849
- repo: { type: "string" },
5984
+ owner: {
5985
+ type: "string",
5986
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5987
+ },
5988
+ repo: {
5989
+ type: "string",
5990
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5991
+ },
5850
5992
  id: { type: "string", description: "Memory ID to delete." },
5851
5993
  code: { type: "string", description: "Memory code to delete." }
5852
5994
  },
@@ -5886,11 +6028,11 @@ var KG_TOOL_DEFINITIONS = [
5886
6028
  },
5887
6029
  owner: {
5888
6030
  type: "string",
5889
- description: "Organization/namespace. Auto-detected from session when omitted."
6031
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5890
6032
  },
5891
6033
  repo: {
5892
6034
  type: "string",
5893
- description: "Repository/project name. Auto-detected from session when omitted."
6035
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5894
6036
  },
5895
6037
  structured: {
5896
6038
  type: "boolean",
@@ -5936,11 +6078,11 @@ var KG_TOOL_DEFINITIONS = [
5936
6078
  },
5937
6079
  owner: {
5938
6080
  type: "string",
5939
- description: "Organization/namespace. Auto-detected from session when omitted."
6081
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5940
6082
  },
5941
6083
  repo: {
5942
6084
  type: "string",
5943
- description: "Repository/project name. Auto-detected from session when omitted."
6085
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5944
6086
  },
5945
6087
  structured: {
5946
6088
  type: "boolean",
@@ -5985,11 +6127,11 @@ var KG_TOOL_DEFINITIONS = [
5985
6127
  },
5986
6128
  owner: {
5987
6129
  type: "string",
5988
- description: "Organization/namespace. Auto-detected from session when omitted."
6130
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
5989
6131
  },
5990
6132
  repo: {
5991
6133
  type: "string",
5992
- description: "Repository/project name. Auto-detected from session when omitted."
6134
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
5993
6135
  },
5994
6136
  structured: {
5995
6137
  type: "boolean",
@@ -6041,11 +6183,11 @@ var KG_TOOL_DEFINITIONS = [
6041
6183
  },
6042
6184
  owner: {
6043
6185
  type: "string",
6044
- description: "Organization/namespace. Auto-detected from session when omitted."
6186
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
6045
6187
  },
6046
6188
  repo: {
6047
6189
  type: "string",
6048
- description: "Repository/project name. Auto-detected from session when omitted."
6190
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
6049
6191
  },
6050
6192
  structured: {
6051
6193
  type: "boolean",
@@ -6082,11 +6224,11 @@ var KG_TOOL_DEFINITIONS = [
6082
6224
  },
6083
6225
  owner: {
6084
6226
  type: "string",
6085
- description: "Organization/namespace. Auto-detected from session when omitted."
6227
+ description: "Organization/namespace (e.g., GitHub org or username). Auto-inferred from session when omitted."
6086
6228
  },
6087
6229
  repo: {
6088
6230
  type: "string",
6089
- description: "Repository/project name. Auto-detected from session when omitted."
6231
+ description: "Repository/project name (e.g., 'local-memory-mcp'). Auto-inferred from session when omitted."
6090
6232
  },
6091
6233
  structured: {
6092
6234
  type: "boolean",
@@ -6457,6 +6599,28 @@ var SingleStandardSchema = z2.object({
6457
6599
  model: z2.string().optional()
6458
6600
  });
6459
6601
  var TaskStatusValues = TaskStatusSchema.options;
6602
+ function isPlainObject(v) {
6603
+ return typeof v === "object" && v !== null && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
6604
+ }
6605
+ function isJsonSerializable(val) {
6606
+ try {
6607
+ JSON.stringify(val);
6608
+ return true;
6609
+ } catch {
6610
+ return false;
6611
+ }
6612
+ }
6613
+ var StructuredDataValue = z2.lazy(
6614
+ () => z2.union([
6615
+ z2.string(),
6616
+ z2.number().refine((v) => Number.isFinite(v), "Number must be finite"),
6617
+ z2.boolean(),
6618
+ z2.null(),
6619
+ z2.array(StructuredDataValue),
6620
+ z2.record(z2.string(), StructuredDataValue).refine(isPlainObject, "Plain object required")
6621
+ ])
6622
+ );
6623
+ var StructuredDataSchema = z2.unknown().refine(isJsonSerializable, { message: "Value must be JSON-serializable" }).pipe(z2.record(z2.string(), StructuredDataValue));
6460
6624
 
6461
6625
  // src/mcp/tools/schemas/memory.ts
6462
6626
  import { z as z3 } from "zod";
@@ -6538,8 +6702,8 @@ var MemoryAcknowledgeSchema = z3.object({
6538
6702
  message: "Either memory_id or code must be provided"
6539
6703
  });
6540
6704
  var MemoryRecapSchema = z3.object({
6541
- owner: z3.string().min(1),
6542
- repo: z3.string().min(1).transform(normalizeRepo),
6705
+ owner: z3.string().min(1, "owner is required \u2014 provide it explicitly or configure MCP workspace roots"),
6706
+ repo: z3.string().min(1, "repo is required \u2014 provide it explicitly or configure MCP workspace roots").transform(normalizeRepo),
6543
6707
  limit: z3.number().min(1).max(50).default(20),
6544
6708
  offset: z3.number().min(0).default(0),
6545
6709
  structured: z3.boolean().default(false)
@@ -6729,8 +6893,8 @@ var TaskUpdateSchema = z4.object({
6729
6893
  message: "At least one field besides repo and id/ids must be provided for update"
6730
6894
  });
6731
6895
  var TaskListSchema = z4.object({
6732
- owner: z4.string().min(1),
6733
- repo: z4.string().min(1).transform(normalizeRepo),
6896
+ owner: z4.string().min(1, "owner is required \u2014 provide it explicitly or configure MCP workspace roots"),
6897
+ repo: z4.string().min(1, "repo is required \u2014 provide it explicitly or configure MCP workspace roots").transform(normalizeRepo),
6734
6898
  status: TaskStatusListSchema.default("backlog,pending,in_progress,blocked"),
6735
6899
  phase: z4.string().optional(),
6736
6900
  query: z4.string().optional(),
@@ -6759,7 +6923,9 @@ var TaskDeleteSchema = z4.object({
6759
6923
  structured: z4.boolean().default(false)
6760
6924
  }).refine(
6761
6925
  (data) => data.id !== void 0 || data.ids !== void 0 || data.task_code !== void 0 || data.task_codes !== void 0,
6762
- { message: "Either 'id', 'ids', 'task_code', or 'task_codes' must be provided for deletion" }
6926
+ {
6927
+ message: "Either 'id' (UUID), 'ids' (array of UUIDs), 'task_code' (string code like PERF-1), or 'task_codes' (array of string codes) must be provided. Note: 'ids' expects UUID format, not task codes \u2014 use 'task_code'/'task_codes' for string identifiers."
6928
+ }
6763
6929
  );
6764
6930
  var TaskGetSchema = z4.object({
6765
6931
  owner: z4.string().min(1),
@@ -6775,8 +6941,8 @@ var TaskGetSchema = z4.object({
6775
6941
  // src/mcp/tools/schemas/handoff.ts
6776
6942
  import { z as z5 } from "zod";
6777
6943
  var HandoffCreateSchema = z5.object({
6778
- owner: z5.string().min(1).optional().default(""),
6779
- repo: z5.string().min(1).transform(normalizeRepo),
6944
+ owner: z5.string().min(1, "owner is required \u2014 provide it explicitly or configure MCP workspace roots"),
6945
+ repo: z5.string().min(1, "repo is required \u2014 provide it explicitly or configure MCP workspace roots").transform(normalizeRepo),
6780
6946
  from_agent: z5.string().min(1),
6781
6947
  to_agent: z5.string().min(1).optional(),
6782
6948
  task_id: z5.string().uuid().optional(),
@@ -6799,8 +6965,8 @@ var HandoffUpdateSchema = z5.object({
6799
6965
  structured: z5.boolean().default(false)
6800
6966
  });
6801
6967
  var HandoffListSchema = z5.object({
6802
- owner: z5.string().min(1).optional().default(""),
6803
- repo: z5.string().min(1).transform(normalizeRepo),
6968
+ owner: z5.string().min(1, "owner is required \u2014 provide it explicitly or configure MCP workspace roots"),
6969
+ repo: z5.string().min(1, "repo is required \u2014 provide it explicitly or configure MCP workspace roots").transform(normalizeRepo),
6804
6970
  status: HandoffStatusSchema.optional(),
6805
6971
  from_agent: z5.string().min(1).optional(),
6806
6972
  to_agent: z5.string().min(1).optional(),
@@ -6809,8 +6975,8 @@ var HandoffListSchema = z5.object({
6809
6975
  structured: z5.boolean().default(false)
6810
6976
  });
6811
6977
  var TaskClaimSchema = z5.object({
6812
- owner: z5.string().min(1).optional().default(""),
6813
- repo: z5.string().min(1).transform(normalizeRepo),
6978
+ owner: z5.string().min(1, "owner is required \u2014 provide it explicitly or configure MCP workspace roots"),
6979
+ repo: z5.string().min(1, "repo is required \u2014 provide it explicitly or configure MCP workspace roots").transform(normalizeRepo),
6814
6980
  task_id: z5.string().uuid().optional(),
6815
6981
  task_code: z5.string().optional(),
6816
6982
  agent: z5.string().min(1),
@@ -6823,8 +6989,8 @@ var TaskClaimSchema = z5.object({
6823
6989
  message: "Provide either task_id or task_code, not both"
6824
6990
  });
6825
6991
  var ClaimListSchema = z5.object({
6826
- owner: z5.string().min(1).optional().default(""),
6827
- repo: z5.string().min(1).transform(normalizeRepo),
6992
+ owner: z5.string().optional().default(""),
6993
+ repo: z5.string().transform(normalizeRepo).optional().default(""),
6828
6994
  agent: z5.string().min(1).optional(),
6829
6995
  active_only: z5.boolean().default(true),
6830
6996
  limit: z5.number().min(1).max(100).default(20),
@@ -6832,8 +6998,8 @@ var ClaimListSchema = z5.object({
6832
6998
  structured: z5.boolean().default(false)
6833
6999
  });
6834
7000
  var ClaimReleaseSchema = z5.object({
6835
- owner: z5.string().min(1).optional().default(""),
6836
- repo: z5.string().min(1).transform(normalizeRepo),
7001
+ owner: z5.string().min(1, "owner is required \u2014 provide it explicitly or configure MCP workspace roots"),
7002
+ repo: z5.string().min(1, "repo is required \u2014 provide it explicitly or configure MCP workspace roots").transform(normalizeRepo),
6837
7003
  task_id: z5.string().uuid().optional(),
6838
7004
  task_code: z5.string().optional(),
6839
7005
  agent: z5.string().min(1).optional(),
@@ -7070,7 +7236,13 @@ async function handleHandoffCreate(args, storage) {
7070
7236
  });
7071
7237
  }
7072
7238
  async function handleHandoffList(args, storage) {
7073
- const validated = HandoffListSchema.parse(args);
7239
+ const parsed = HandoffListSchema.safeParse(args);
7240
+ if (!parsed.success) {
7241
+ const missing = parsed.error.issues.filter((i) => i.path.some((p) => p === "owner" || p === "repo")).map((i) => i.message).filter(Boolean);
7242
+ const msg = missing.length > 0 ? `Missing required fields: ${missing.join("; ")}. Pass owner/repo explicitly or configure MCP workspace roots so they can be auto-inferred.` : `Validation error: ${parsed.error.message}`;
7243
+ return { content: [{ type: "text", text: msg }], isError: true };
7244
+ }
7245
+ const validated = parsed.data;
7074
7246
  const { owner, repo, status, from_agent, to_agent, limit, offset, structured } = validated;
7075
7247
  const handoffs = storage.handoffs.listHandoffs({
7076
7248
  owner,
@@ -15,7 +15,7 @@ import {
15
15
  handleTaskClaim,
16
16
  listResources,
17
17
  logger
18
- } from "../chunk-ZSGQQS5F.js";
18
+ } from "../chunk-M47LSTGD.js";
19
19
 
20
20
  // src/dashboard/server.ts
21
21
  import express from "express";
@@ -61,7 +61,7 @@ import {
61
61
  parseRepoInput,
62
62
  rankCompletionValues,
63
63
  toContextSlug
64
- } from "../chunk-ZSGQQS5F.js";
64
+ } from "../chunk-M47LSTGD.js";
65
65
 
66
66
  // src/mcp/server.ts
67
67
  import { serveStdio } from "@modelcontextprotocol/server/stdio";
@@ -74,8 +74,8 @@ import path from "path";
74
74
  import { fileURLToPath } from "url";
75
75
  var __dirname = path.dirname(fileURLToPath(import.meta.url));
76
76
  var pkgVersion = "0.1.0";
77
- if ("0.19.5") {
78
- pkgVersion = "0.19.5";
77
+ if ("0.19.7") {
78
+ pkgVersion = "0.19.7";
79
79
  } else {
80
80
  let searchDir = __dirname;
81
81
  for (let i = 0; i < 5; i++) {
@@ -1118,7 +1118,13 @@ function extractAcceptedElicitationContent(result) {
1118
1118
 
1119
1119
  // src/mcp/tools/memory.recap.ts
1120
1120
  async function handleMemoryRecap(params, db2) {
1121
- const validated = MemoryRecapSchema.parse(params);
1121
+ const parsed = MemoryRecapSchema.safeParse(params);
1122
+ if (!parsed.success) {
1123
+ const missing = parsed.error.issues.filter((i) => i.path.some((p) => p === "owner" || p === "repo")).map((i) => i.message).filter(Boolean);
1124
+ const msg = missing.length > 0 ? `Missing required fields: ${missing.join("; ")}. Pass owner/repo explicitly or configure MCP workspace roots so they can be auto-inferred.` : `Validation error: ${parsed.error.message}`;
1125
+ return { content: [{ type: "text", text: msg }], isError: true };
1126
+ }
1127
+ const validated = parsed.data;
1122
1128
  logger.info("[Tool] memory.recap", { repo: validated.repo, limit: validated.limit, offset: validated.offset });
1123
1129
  const stats = db2.memories.getStats(validated.owner, validated.repo);
1124
1130
  const total = db2.memories.getTotalCount(validated.owner, validated.repo, false, ["task_archive"]);
@@ -1241,7 +1247,13 @@ function capitalize3(str) {
1241
1247
  return str.charAt(0).toUpperCase() + str.slice(1);
1242
1248
  }
1243
1249
  async function handleTaskList(args, storage) {
1244
- const validated = TaskListSchema.parse(args);
1250
+ const parsed = TaskListSchema.safeParse(args);
1251
+ if (!parsed.success) {
1252
+ const missing = parsed.error.issues.filter((i) => i.path.some((p) => p === "owner" || p === "repo")).map((i) => i.message).filter(Boolean);
1253
+ const msg = missing.length > 0 ? `Missing required fields: ${missing.join("; ")}. Pass owner/repo explicitly or configure MCP workspace roots so they can be auto-inferred.` : `Validation error: ${parsed.error.message}`;
1254
+ return { content: [{ type: "text", text: msg }], isError: true };
1255
+ }
1256
+ const validated = parsed.data;
1245
1257
  const { owner, repo, status, phase, query, limit, offset, structured: isStructuredRequest = false } = validated;
1246
1258
  let statuses = [];
1247
1259
  if (status !== "all") {
@@ -3554,28 +3566,36 @@ function normalizeToolArgs(args, session) {
3554
3566
  if (!nextArgs.owner) {
3555
3567
  const repoVal2 = nextArgs.repo || "";
3556
3568
  const parsed = parseRepoInput(repoVal2, void 0);
3557
- nextArgs.owner = parsed.owner || inferOwnerFromSession(session) || "";
3558
- if (nextArgs.owner && !repoVal2.includes("/")) {
3559
- logger.warn(
3560
- `[tools] owner inferred from session (${nextArgs.owner}) \u2014 may be incorrect. Agents should pass explicit owner/repo.`
3561
- );
3569
+ const inferredOwner = parsed.owner || inferOwnerFromSession(session);
3570
+ if (inferredOwner !== void 0) {
3571
+ nextArgs.owner = inferredOwner;
3572
+ if (!repoVal2.includes("/")) {
3573
+ logger.warn(
3574
+ `[tools] owner inferred from session (${nextArgs.owner}) \u2014 may be incorrect. Agents should pass explicit owner/repo.`
3575
+ );
3576
+ }
3562
3577
  }
3563
3578
  }
3564
3579
  if (scope && !scope.owner) {
3565
3580
  const repoVal2 = scope.repo || nextArgs.repo || "";
3566
3581
  const parsed = parseRepoInput(repoVal2, void 0);
3567
- scope.owner = parsed.owner || nextArgs.owner || inferOwnerFromSession(session) || "";
3582
+ const inferredOwner = parsed.owner || nextArgs.owner || inferOwnerFromSession(session);
3583
+ if (inferredOwner !== void 0) {
3584
+ scope.owner = inferredOwner;
3585
+ }
3568
3586
  }
3569
- const ownerVal = nextArgs.owner || inferOwnerFromSession(session) || "";
3570
- const repoVal = nextArgs.repo || inferRepoFromSession(session) || "";
3587
+ const ownerVal = nextArgs.owner || inferOwnerFromSession(session) || void 0;
3588
+ const repoVal = nextArgs.repo || inferRepoFromSession(session) || void 0;
3571
3589
  const memories = nextArgs.memories;
3572
3590
  if (memories) {
3573
3591
  for (const mem of memories) {
3574
3592
  const memScope = mem.scope;
3575
3593
  if (memScope) {
3576
- if (!memScope.owner)
3577
- memScope.owner = ownerVal || parseRepoInput(memScope.repo || repoVal, void 0).owner || "";
3578
- if (!memScope.repo) memScope.repo = repoVal;
3594
+ if (!memScope.owner) {
3595
+ const inferredMemOwner = ownerVal || parseRepoInput(memScope.repo || repoVal || "", void 0).owner;
3596
+ if (inferredMemOwner) memScope.owner = inferredMemOwner;
3597
+ }
3598
+ if (!memScope.repo && repoVal) memScope.repo = repoVal;
3579
3599
  }
3580
3600
  }
3581
3601
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vheins/local-memory-mcp",
3
- "version": "0.19.5",
3
+ "version": "0.19.7",
4
4
  "description": "MCP Local Memory Service for coding copilot agents",
5
5
  "mcpName": "io.github.vheins/local-memory-mcp",
6
6
  "type": "module",