@getmikie/cli 1.1.142 → 1.1.144

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getmikie/cli",
3
- "version": "1.1.142",
3
+ "version": "1.1.144",
4
4
  "description": "Coding-agent context optimization for Codex and Claude Code with MCP retrieval and usage receipts.",
5
5
  "homepage": "https://getmikie.com",
6
6
  "keywords": [
@@ -31,13 +31,13 @@
31
31
  "node": ">=22"
32
32
  },
33
33
  "optionalDependencies": {
34
- "@getmikie/darwin-arm64": "1.1.142",
35
- "@getmikie/linux-x64-gnu": "1.1.142",
36
- "@getmikie/win32-x64": "1.1.142"
34
+ "@getmikie/darwin-arm64": "1.1.144",
35
+ "@getmikie/linux-x64-gnu": "1.1.144",
36
+ "@getmikie/win32-x64": "1.1.144"
37
37
  },
38
38
  "publishConfig": {
39
39
  "access": "public",
40
40
  "registry": "https://registry.npmjs.org"
41
41
  },
42
- "mikieReleaseNote": "mikie usage works again in the installed app, and the end-of-turn line now leads with what Mikie saved."
42
+ "mikieReleaseNote": "Help improve Mikie: content-free product-health reports (opt-in in the EU and UK), and a Devices page that shows each device."
43
43
  }
@@ -103,6 +103,35 @@ function nativeDiagnostic({ code, stdout, stderr }) {
103
103
  return details.join("; ");
104
104
  }
105
105
 
106
+ /**
107
+ * Keep why an update could not bring the clients' setup up to date, next to
108
+ * the marker folder (never inside it: that folder holds only markers). The
109
+ * native output is redacted as in error messages. Best effort: recording
110
+ * never changes the outcome.
111
+ */
112
+ async function recordDeferral(markerRoot, { version, prepared, preparedReceipt, setup }) {
113
+ try {
114
+ const logs = path.join(path.dirname(markerRoot), "logs");
115
+ await mkdir(logs, { recursive: true });
116
+ const record = {
117
+ at: new Date().toISOString(),
118
+ version,
119
+ prepare: {
120
+ before: preparedReceipt.before,
121
+ action: preparedReceipt.action,
122
+ diagnostic: nativeDiagnostic(prepared),
123
+ },
124
+ setup: setup.map(({ client, ok }) => ({ client, ok })),
125
+ };
126
+ await writeFile(
127
+ path.join(logs, "client-setup-deferred.json"),
128
+ `${JSON.stringify(record, null, 2)}\n`,
129
+ );
130
+ } catch {
131
+ // The deferral itself is still reported to the person.
132
+ }
133
+ }
134
+
106
135
  function parseClientRepair({ stdout, stderr, code }, { allowLegacyDeferred = false } = {}) {
107
136
  let receipt;
108
137
  try {
@@ -642,6 +671,7 @@ export async function reconcileInstalledClients({
642
671
  preparedReceipt.schema_version === "mikie.claude-hook-repair.v1" &&
643
672
  preparedReceipt.action === "refused"
644
673
  ) {
674
+ await recordDeferral(markerRoot, { version, prepared, preparedReceipt, setup: [] });
645
675
  return { status: "deferred", providerState: preparedReceipt.before };
646
676
  }
647
677
  const settlementPhase = preparedReceipt.action === "refused" ? "rollback" : "commit";
@@ -662,6 +692,7 @@ export async function reconcileInstalledClients({
662
692
  finalLauncher,
663
693
  };
664
694
  }
695
+ await recordDeferral(markerRoot, { version, prepared, preparedReceipt, setup });
665
696
  return { status: "deferred", providerState: preparedReceipt.before };
666
697
  }
667
698
  throw new Error(