clikit-plugin 0.2.14 → 0.2.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CA0F1E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CA8DnF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM,CA4ChG;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,iBAAiB,CAgBnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAMtE"}
1
+ {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA8BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAoG1E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CAkEnF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM,CA6ChG;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,iBAAiB,CAgBnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAMtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"env-context.d.ts","sourceRoot":"","sources":["../../src/hooks/env-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAc3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAyCnE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,EAAE,CA8BhF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAqB/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmCnD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMtD"}
1
+ {"version":3,"file":"env-context.d.ts","sourceRoot":"","sources":["../../src/hooks/env-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAc3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CA6CnE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,EAAE,CA8BhF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAqB/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmCnD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ritual-enforcer.d.ts","sourceRoot":"","sources":["../../src/hooks/ritual-enforcer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChE,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAsBD,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAkBvD;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAIpD;AAED,wBAAgB,YAAY,IAAI,WAAW,GAAG,IAAI,CAiBjD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,IAAI,CA2BhF;AAED,wBAAgB,mBAAmB,IAAI;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB,CAgCA;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAc3C"}
1
+ {"version":3,"file":"ritual-enforcer.d.ts","sourceRoot":"","sources":["../../src/hooks/ritual-enforcer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChE,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA8ED,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAevD;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAIpD;AAED,wBAAgB,YAAY,IAAI,WAAW,GAAG,IAAI,CAiBjD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,IAAI,CA2BhF;AAED,wBAAgB,mBAAmB,IAAI;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB,CAgCA;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAc3C"}
package/dist/index.js CHANGED
@@ -4100,6 +4100,9 @@ function formatCommentWarning(result) {
4100
4100
  import * as fs4 from "fs";
4101
4101
  import * as path4 from "path";
4102
4102
  import { execSync } from "child_process";
4103
+ function isRecord(value) {
4104
+ return !!value && typeof value === "object" && !Array.isArray(value);
4105
+ }
4103
4106
  function runSilent(cmd, cwd) {
4104
4107
  try {
4105
4108
  return execSync(cmd, { cwd, encoding: "utf-8", timeout: 5000, stdio: ["pipe", "pipe", "pipe"] }).trim();
@@ -4126,8 +4129,10 @@ function getPackageInfo(cwd) {
4126
4129
  if (!fs4.existsSync(pkgPath))
4127
4130
  return;
4128
4131
  try {
4129
- const pkg = JSON.parse(fs4.readFileSync(pkgPath, "utf-8"));
4130
- const scripts = pkg.scripts ? Object.keys(pkg.scripts) : [];
4132
+ const parsed = JSON.parse(fs4.readFileSync(pkgPath, "utf-8"));
4133
+ const pkg = isRecord(parsed) ? parsed : {};
4134
+ const scriptsObj = isRecord(pkg.scripts) ? pkg.scripts : {};
4135
+ const scripts = Object.keys(scriptsObj);
4131
4136
  let packageManager;
4132
4137
  if (fs4.existsSync(path4.join(cwd, "bun.lockb")) || fs4.existsSync(path4.join(cwd, "bun.lock"))) {
4133
4138
  packageManager = "bun";
@@ -4139,7 +4144,9 @@ function getPackageInfo(cwd) {
4139
4144
  packageManager = "npm";
4140
4145
  }
4141
4146
  let framework;
4142
- const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
4147
+ const deps = isRecord(pkg.dependencies) ? pkg.dependencies : {};
4148
+ const devDeps = isRecord(pkg.devDependencies) ? pkg.devDependencies : {};
4149
+ const allDeps = { ...deps, ...devDeps };
4143
4150
  if (allDeps["next"])
4144
4151
  framework = "Next.js";
4145
4152
  else if (allDeps["nuxt"])
@@ -4159,8 +4166,8 @@ function getPackageInfo(cwd) {
4159
4166
  else if (allDeps["hono"])
4160
4167
  framework = "Hono";
4161
4168
  return {
4162
- name: pkg.name,
4163
- version: pkg.version,
4169
+ name: typeof pkg.name === "string" ? pkg.name : undefined,
4170
+ version: typeof pkg.version === "string" ? pkg.version : undefined,
4164
4171
  packageManager,
4165
4172
  scripts,
4166
4173
  framework
@@ -4624,6 +4631,29 @@ function formatTruncationLog(result) {
4624
4631
  import * as fs7 from "fs";
4625
4632
  import * as path7 from "path";
4626
4633
  import { execSync as execSync5 } from "child_process";
4634
+ function isRecord2(value) {
4635
+ return !!value && typeof value === "object" && !Array.isArray(value);
4636
+ }
4637
+ function isTodoStatus(value) {
4638
+ return value === "todo" || value === "in-progress" || value === "in_progress" || value === "completed";
4639
+ }
4640
+ function normalizeTodoEntries(todos) {
4641
+ if (!Array.isArray(todos)) {
4642
+ return [];
4643
+ }
4644
+ const normalized = [];
4645
+ for (const entry of todos) {
4646
+ if (!isRecord2(entry) || !isTodoStatus(entry.status)) {
4647
+ continue;
4648
+ }
4649
+ normalized.push({
4650
+ id: typeof entry.id === "string" ? entry.id : "unknown",
4651
+ content: typeof entry.content === "string" ? entry.content : "(no content)",
4652
+ status: entry.status === "in_progress" ? "in-progress" : entry.status
4653
+ });
4654
+ }
4655
+ return normalized;
4656
+ }
4627
4657
  function readBeadsState(projectDir) {
4628
4658
  if (typeof projectDir !== "string" || !projectDir) {
4629
4659
  return;
@@ -4651,10 +4681,12 @@ function readBeadsState(projectDir) {
4651
4681
  try {
4652
4682
  const raw = fs7.readFileSync(path7.join(reservationsDir, lockFile), "utf-8");
4653
4683
  const lock = JSON.parse(raw);
4654
- if (lock.path)
4684
+ if (isRecord2(lock) && typeof lock.path === "string") {
4655
4685
  reservedFiles.push(lock.path);
4656
- if (lock.agent)
4686
+ }
4687
+ if (isRecord2(lock) && typeof lock.agent === "string") {
4657
4688
  state.agentId = lock.agent;
4689
+ }
4658
4690
  } catch {}
4659
4691
  }
4660
4692
  if (reservedFiles.length > 0) {
@@ -4672,8 +4704,16 @@ function readBeadsState(projectDir) {
4672
4704
  if (output.trim()) {
4673
4705
  const tasks = JSON.parse(output);
4674
4706
  if (Array.isArray(tasks) && tasks.length > 0) {
4675
- state.currentTask = tasks[0].title || tasks[0].t;
4676
- state.taskId = tasks[0].id;
4707
+ const first = tasks[0];
4708
+ if (isRecord2(first)) {
4709
+ const title = typeof first.title === "string" ? first.title : undefined;
4710
+ const shortTitle = typeof first.t === "string" ? first.t : undefined;
4711
+ const id = typeof first.id === "string" ? first.id : undefined;
4712
+ if (title || shortTitle)
4713
+ state.currentTask = title || shortTitle;
4714
+ if (id)
4715
+ state.taskId = id;
4716
+ }
4677
4717
  state.inProgressCount = tasks.length;
4678
4718
  }
4679
4719
  }
@@ -4728,8 +4768,12 @@ function readMemoryRefs(projectDir, limit = 10) {
4728
4768
  summary = headingMatch ? headingMatch[1] : raw.substring(0, 100).trim();
4729
4769
  } else if (ext === ".json") {
4730
4770
  const parsed = JSON.parse(raw);
4731
- const content = parsed.content;
4732
- summary = parsed.summary || parsed.title || (typeof content === "string" ? content.substring(0, 100) : "") || "";
4771
+ const safe = isRecord2(parsed) ? parsed : {};
4772
+ const content = safe.content;
4773
+ const summaryText = typeof safe.summary === "string" ? safe.summary : undefined;
4774
+ const titleText = typeof safe.title === "string" ? safe.title : undefined;
4775
+ const contentText = typeof content === "string" ? content.substring(0, 100) : "";
4776
+ summary = summaryText || titleText || contentText || "";
4733
4777
  } else {
4734
4778
  summary = raw.substring(0, 100).trim();
4735
4779
  }
@@ -4772,11 +4816,12 @@ Beads State:`);
4772
4816
  lines.push(` Reserved files: ${payload.beads.reservedFiles.join(", ")}`);
4773
4817
  }
4774
4818
  }
4775
- if (payload.todos?.length) {
4819
+ const normalizedTodos = normalizeTodoEntries(payload.todos);
4820
+ if (normalizedTodos.length) {
4776
4821
  lines.push(`
4777
4822
  Todo State:`);
4778
- for (const todo of payload.todos) {
4779
- const icon = todo.status === "completed" ? "[x]" : todo.status === "in_progress" ? "[~]" : "[ ]";
4823
+ for (const todo of normalizedTodos) {
4824
+ const icon = todo.status === "completed" ? "[x]" : todo.status === "in-progress" ? "[~]" : "[ ]";
4780
4825
  lines.push(` ${icon} ${todo.id}: ${todo.content}`);
4781
4826
  }
4782
4827
  }
@@ -4894,6 +4939,17 @@ import * as fs9 from "fs";
4894
4939
  import { Database } from "bun:sqlite";
4895
4940
  var MEMORY_DIR = path10.join(process.cwd(), ".opencode", "memory");
4896
4941
  var MEMORY_DB = path10.join(MEMORY_DIR, "memory.db");
4942
+ function parseStringArray(value) {
4943
+ if (typeof value !== "string" || !value.trim()) {
4944
+ return [];
4945
+ }
4946
+ try {
4947
+ const parsed = JSON.parse(value);
4948
+ return Array.isArray(parsed) ? parsed.filter((item) => typeof item === "string") : [];
4949
+ } catch {
4950
+ return [];
4951
+ }
4952
+ }
4897
4953
  function getDb() {
4898
4954
  if (!fs9.existsSync(MEMORY_DIR)) {
4899
4955
  fs9.mkdirSync(MEMORY_DIR, { recursive: true });
@@ -4999,15 +5055,18 @@ function memoryGet(ids) {
4999
5055
  return [];
5000
5056
  }
5001
5057
  const db = getDb();
5002
- const idList = ids.split(",").map((id) => parseInt(id.trim(), 10));
5058
+ const idList = ids.split(",").map((id) => parseInt(id.trim(), 10)).filter((id) => Number.isFinite(id));
5059
+ if (idList.length === 0) {
5060
+ return [];
5061
+ }
5003
5062
  const placeholders = idList.map(() => "?").join(",");
5004
5063
  const sql = `SELECT * FROM observations WHERE id IN (${placeholders})`;
5005
5064
  const rows = db.prepare(sql).all(...idList);
5006
5065
  return rows.map((row) => ({
5007
5066
  ...row,
5008
- facts: JSON.parse(row.facts || "[]"),
5009
- files_read: JSON.parse(row.files_read || "[]"),
5010
- files_modified: JSON.parse(row.files_modified || "[]")
5067
+ facts: parseStringArray(row.facts),
5068
+ files_read: parseStringArray(row.files_read),
5069
+ files_modified: parseStringArray(row.files_modified)
5011
5070
  }));
5012
5071
  }
5013
5072
  function memoryTimeline(params) {
@@ -5033,9 +5092,9 @@ function memoryTimeline(params) {
5033
5092
  const rows = db.prepare(sql).all(p.id, before, p.id, p.id, after);
5034
5093
  return rows.map((row) => ({
5035
5094
  ...row,
5036
- facts: JSON.parse(row.facts || "[]"),
5037
- files_read: JSON.parse(row.files_read || "[]"),
5038
- files_modified: JSON.parse(row.files_modified || "[]")
5095
+ facts: parseStringArray(row.facts),
5096
+ files_read: parseStringArray(row.files_read),
5097
+ files_modified: parseStringArray(row.files_modified)
5039
5098
  }));
5040
5099
  }
5041
5100
  function memoryUpdate(params) {
@@ -5130,6 +5189,17 @@ import * as fs10 from "fs";
5130
5189
  import { Database as Database2 } from "bun:sqlite";
5131
5190
  var MEMORY_DIR2 = path11.join(process.cwd(), ".opencode", "memory");
5132
5191
  var MEMORY_DB2 = path11.join(MEMORY_DIR2, "memory.db");
5192
+ function parseStringArray2(value) {
5193
+ if (typeof value !== "string" || !value.trim()) {
5194
+ return [];
5195
+ }
5196
+ try {
5197
+ const parsed = JSON.parse(value);
5198
+ return Array.isArray(parsed) ? parsed.filter((item) => typeof item === "string") : [];
5199
+ } catch {
5200
+ return [];
5201
+ }
5202
+ }
5133
5203
  function getDb2() {
5134
5204
  if (!fs10.existsSync(MEMORY_DIR2)) {
5135
5205
  fs10.mkdirSync(MEMORY_DIR2, { recursive: true });
@@ -5198,10 +5268,10 @@ function getObservationsByType(type, limit = 10) {
5198
5268
  const rows = db.prepare(sql).all(type, limit);
5199
5269
  return rows.map((row) => ({
5200
5270
  ...row,
5201
- facts: JSON.parse(row.facts || "[]"),
5202
- files_read: JSON.parse(row.files_read || "[]"),
5203
- files_modified: JSON.parse(row.files_modified || "[]"),
5204
- concepts: JSON.parse(row.concepts || "[]")
5271
+ facts: parseStringArray2(row.facts),
5272
+ files_read: parseStringArray2(row.files_read),
5273
+ files_modified: parseStringArray2(row.files_modified),
5274
+ concepts: parseStringArray2(row.concepts)
5205
5275
  }));
5206
5276
  }
5207
5277
  function getObservationsByBead(beadId) {
@@ -5210,17 +5280,17 @@ function getObservationsByBead(beadId) {
5210
5280
  const rows = db.prepare(sql).all(beadId);
5211
5281
  return rows.map((row) => ({
5212
5282
  ...row,
5213
- facts: JSON.parse(row.facts || "[]"),
5214
- files_read: JSON.parse(row.files_read || "[]"),
5215
- files_modified: JSON.parse(row.files_modified || "[]"),
5216
- concepts: JSON.parse(row.concepts || "[]")
5283
+ facts: parseStringArray2(row.facts),
5284
+ files_read: parseStringArray2(row.files_read),
5285
+ files_modified: parseStringArray2(row.files_modified),
5286
+ concepts: parseStringArray2(row.concepts)
5217
5287
  }));
5218
5288
  }
5219
5289
  function linkObservations(observationId, concept) {
5220
5290
  const db = getDb2();
5221
5291
  const row = db.prepare("SELECT concepts FROM observations WHERE id = ?").get(observationId);
5222
5292
  if (row) {
5223
- const concepts = JSON.parse(row.concepts || "[]");
5293
+ const concepts = parseStringArray2(row.concepts);
5224
5294
  if (!concepts.includes(concept)) {
5225
5295
  concepts.push(concept);
5226
5296
  db.prepare("UPDATE observations SET concepts = ? WHERE id = ?").run(JSON.stringify(concepts), observationId);
@@ -5557,6 +5627,17 @@ import * as fs12 from "fs";
5557
5627
  import { Database as Database4 } from "bun:sqlite";
5558
5628
  var MEMORY_DIR4 = path13.join(process.cwd(), ".opencode", "memory");
5559
5629
  var MEMORY_DB4 = path13.join(MEMORY_DIR4, "memory.db");
5630
+ function parseStringArray3(value) {
5631
+ if (typeof value !== "string" || !value.trim()) {
5632
+ return [];
5633
+ }
5634
+ try {
5635
+ const parsed = JSON.parse(value);
5636
+ return Array.isArray(parsed) ? parsed.filter((item) => typeof item === "string") : [];
5637
+ } catch {
5638
+ return [];
5639
+ }
5640
+ }
5560
5641
  function getMemoryDb2() {
5561
5642
  if (!fs12.existsSync(MEMORY_DIR4)) {
5562
5643
  fs12.mkdirSync(MEMORY_DIR4, { recursive: true });
@@ -5615,12 +5696,10 @@ function contextSummary(params = {}) {
5615
5696
  const allFilesRead = new Set;
5616
5697
  const allFilesModified = new Set;
5617
5698
  for (const obs of observations) {
5618
- try {
5619
- const read = JSON.parse(obs.files_read || "[]");
5620
- const modified = JSON.parse(obs.files_modified || "[]");
5621
- read.forEach((f) => allFilesRead.add(f));
5622
- modified.forEach((f) => allFilesModified.add(f));
5623
- } catch {}
5699
+ const read = parseStringArray3(obs.files_read);
5700
+ const modified = parseStringArray3(obs.files_modified);
5701
+ read.forEach((f) => allFilesRead.add(f));
5702
+ modified.forEach((f) => allFilesModified.add(f));
5624
5703
  }
5625
5704
  const summary = buildSummary(sections, p.maxTokens || 2000);
5626
5705
  const tokenEstimate = Math.ceil(summary.length / 4);
@@ -1 +1 @@
1
- {"version":3,"file":"context-summary.d.ts","sourceRoot":"","sources":["../../src/tools/context-summary.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;CACvB;AAgCD,wBAAgB,cAAc,CAAC,MAAM,GAAE,OAAY,GAAG,oBAAoB,CA0EzE"}
1
+ {"version":3,"file":"context-summary.d.ts","sourceRoot":"","sources":["../../src/tools/context-summary.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;CACvB;AA4CD,wBAAgB,cAAc,CAAC,MAAM,GAAE,OAAY,GAAG,oBAAoB,CAwEzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2DD,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,EAAE,CAuClE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAkB3D;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAmCnE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2BnE;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CA8E9D"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuED,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,EAAE,CAuClE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAwB3D;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAmCnE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2BnE;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CA8E9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../src/tools/observation.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAsCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CA2C3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,iBAAiB,EAAE,CAanF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAazE;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY7E"}
1
+ {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../src/tools/observation.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAkDD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CA2C3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,iBAAiB,EAAE,CAanF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAazE;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY7E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clikit-plugin",
3
- "version": "0.2.14",
3
+ "version": "0.2.15",
4
4
  "description": "OpenCode plugin with 10 agents, 19 commands, 48 skills, 14 hooks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",