@funnycode/myclaude 0.1.185 → 0.1.187

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/myclaude.js CHANGED
@@ -4,8 +4,8 @@
4
4
  // MACRO - build-time constants (injected by build.ts)
5
5
  // MACRO injected by build script
6
6
  globalThis.MACRO = {
7
- VERSION: "0.1.185",
8
- BUILD_TIME: "2026-08-10T03:07:07.347Z",
7
+ VERSION: "0.1.187",
8
+ BUILD_TIME: "2026-08-10T04:38:27.202Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -117152,7 +117152,7 @@ var package_default;
117152
117152
  var init_package = __esm(() => {
117153
117153
  package_default = {
117154
117154
  name: "@funnycode/myclaude",
117155
- version: "0.1.185",
117155
+ version: "0.1.187",
117156
117156
  private: false,
117157
117157
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
117158
117158
  license: "MIT",
@@ -209359,6 +209359,13 @@ function parseEventData(event) {
209359
209359
  return null;
209360
209360
  }
209361
209361
  }
209362
+ function isDumpPromptsEnabled() {
209363
+ if (false)
209364
+ ;
209365
+ if (process.env.DUMP_PROMPTS !== "1")
209366
+ return false;
209367
+ return process.env.USER_TYPE === "ant" || process.env.MYCLAUDE_ALLOW_DUMP_PROMPTS === "1";
209368
+ }
209362
209369
  function hashString3(str) {
209363
209370
  return createHash5("sha256").update(str).digest("hex");
209364
209371
  }
@@ -209415,7 +209422,7 @@ function clearAllDumpState() {
209415
209422
  dumpState.clear();
209416
209423
  }
209417
209424
  function addApiRequestToCache(requestData) {
209418
- if (process.env.USER_TYPE !== "ant")
209425
+ if (!isDumpPromptsEnabled())
209419
209426
  return;
209420
209427
  const metadata = {
209421
209428
  timestamp: new Date().toISOString(),
@@ -209454,7 +209461,7 @@ function initFingerprint(req) {
209454
209461
  async function dumpRequest(body, ts, state, filePath) {
209455
209462
  if (false)
209456
209463
  ;
209457
- if (process.env.USER_TYPE !== "ant")
209464
+ if (!isDumpPromptsEnabled())
209458
209465
  return;
209459
209466
  try {
209460
209467
  const req = jsonParse(body);
@@ -209512,7 +209519,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209512
209519
  trimDumpState();
209513
209520
  let timestamp;
209514
209521
  if (init2?.method === "POST" && init2.body) {
209515
- if (process.env.USER_TYPE === "ant") {
209522
+ if (isDumpPromptsEnabled()) {
209516
209523
  timestamp = new Date().toISOString();
209517
209524
  enqueueDumpRequest(agentIdOrSessionId, async () => {
209518
209525
  await dumpRequest(init2.body, timestamp, state, filePath);
@@ -209520,7 +209527,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209520
209527
  }
209521
209528
  }
209522
209529
  const response = await globalThis.fetch(input, init2);
209523
- if (timestamp && response.ok && true && process.env.USER_TYPE === "ant" && process.env.DUMP_PROMPTS === "1") {
209530
+ if (timestamp && response.ok && isDumpPromptsEnabled()) {
209524
209531
  const cloned = response.clone();
209525
209532
  (async () => {
209526
209533
  try {
@@ -209624,7 +209631,7 @@ var init_dumpPrompts = __esm(() => {
209624
209631
  init_debug();
209625
209632
  init_log3();
209626
209633
  init_async_mutex();
209627
- if (process.env.USER_TYPE === "ant" && process.env.DUMP_PROMPTS === "1") {
209634
+ if (isDumpPromptsEnabled()) {
209628
209635
  logForDebugging("DUMP_PROMPTS is enabled. This will write full API payloads (including system prompts, user messages, and tool definitions) to the filesystem. This is intended for debugging only and should NOT be used in production.", { level: "warn" });
209629
209636
  }
209630
209637
  cachedApiRequests = [];
@@ -481384,16 +481391,117 @@ var exports_rewind = {};
481384
481391
  __export(exports_rewind, {
481385
481392
  call: () => call53
481386
481393
  });
481387
- async function call53(_args, context2) {
481388
- if (context2.openMessageSelector) {
481389
- context2.openMessageSelector();
481394
+ async function call53(args, _context) {
481395
+ const isGit = await getIsGit();
481396
+ if (!isGit) {
481397
+ return {
481398
+ type: "text",
481399
+ value: "Checkpoint requires a git repository. Run `git init` first, or use this command inside a git worktree."
481400
+ };
481401
+ }
481402
+ const trimmed = args.trim();
481403
+ if (trimmed === "" || trimmed === "list") {
481404
+ return listCheckpoints();
481405
+ }
481406
+ if (trimmed === "restore" || trimmed === "undo") {
481407
+ return {
481408
+ type: "text",
481409
+ value: "Usage: /checkpoint restore <n> — restore checkpoint #n (see /checkpoint list)."
481410
+ };
481411
+ }
481412
+ const restoreMatch = trimmed.match(/^(?:restore|undo)\s+(\d+)$/);
481413
+ if (restoreMatch) {
481414
+ return restoreCheckpoint(Number(restoreMatch[1]));
481415
+ }
481416
+ return createCheckpoint(trimmed);
481417
+ }
481418
+ async function getCheckpointListRaw() {
481419
+ const { stdout } = await execFileNoThrow(gitExe(), ["--no-optional-locks", "stash", "list"], { preserveOutputOnError: false });
481420
+ return stdout;
481421
+ }
481422
+ async function createCheckpoint(description) {
481423
+ const cwd2 = getCwd();
481424
+ const label = `myclaude-checkpoint: ${description}`;
481425
+ const { stderr } = await execFileNoThrow(gitExe(), ["--no-optional-locks", "stash", "push", "-m", label], { cwd: cwd2, preserveOutputOnError: true });
481426
+ const status2 = await getCheckpointListRaw();
481427
+ if (status2 === "") {
481428
+ return {
481429
+ type: "text",
481430
+ value: "No changes to checkpoint — the workspace is already clean."
481431
+ };
481432
+ }
481433
+ return {
481434
+ type: "text",
481435
+ value: `Checkpoint created: ${label}
481436
+ ${stderr.trim() || ""}
481437
+
481438
+ Use /checkpoint list to see all checkpoints.`.trim()
481439
+ };
481440
+ }
481441
+ async function listCheckpoints() {
481442
+ const stdout = await getCheckpointListRaw();
481443
+ if (stdout.trim() === "") {
481444
+ return {
481445
+ type: "text",
481446
+ value: `No checkpoints yet.
481447
+
481448
+ Usage:
481449
+ /checkpoint <description> — save current workspace state
481450
+ /checkpoint list — list checkpoints
481451
+ /checkpoint restore <n> — restore checkpoint #n`
481452
+ };
481453
+ }
481454
+ const lines2 = stdout.trim().split(`
481455
+ `);
481456
+ const annotated = lines2.map((line, index) => {
481457
+ const marker = line.includes("myclaude-checkpoint") ? " ← /checkpoint" : "";
481458
+ return ` ${index}: ${line.trim()}${marker}`;
481459
+ }).join(`
481460
+ `);
481461
+ return {
481462
+ type: "text",
481463
+ value: `Saved checkpoints:
481464
+ ${annotated}
481465
+
481466
+ Restore with: /checkpoint restore <n>`
481467
+ };
481468
+ }
481469
+ async function restoreCheckpoint(index) {
481470
+ const listRaw = await getCheckpointListRaw();
481471
+ const lines2 = listRaw.trim().split(`
481472
+ `).filter(Boolean);
481473
+ if (lines2.length === 0) {
481474
+ return { type: "text", value: "No checkpoints to restore." };
481390
481475
  }
481391
- return { type: "skip" };
481476
+ if (index < 0 || index >= lines2.length) {
481477
+ return {
481478
+ type: "text",
481479
+ value: `Invalid checkpoint index ${index}. Run /checkpoint list to see valid indices (0–${lines2.length - 1}).`
481480
+ };
481481
+ }
481482
+ const cwd2 = getCwd();
481483
+ const { stdout, stderr } = await execFileNoThrow(gitExe(), ["--no-optional-locks", "stash", "apply", `stash@{${index}}`], { cwd: cwd2, preserveOutputOnError: true });
481484
+ const detail = `${stdout.trim()}${stderr.trim() ? `
481485
+ ${stderr.trim()}` : ""}`;
481486
+ return {
481487
+ type: "text",
481488
+ value: `Restored checkpoint #${index}:
481489
+ ${lines2[index].trim()}
481490
+ ${detail ? `
481491
+ ${detail}` : ""}
481492
+
481493
+ Use /checkpoint list to review; the stash entry is kept so you can re-apply if needed.`.trim()
481494
+ };
481392
481495
  }
481496
+ var init_rewind = __esm(() => {
481497
+ init_execFileNoThrow();
481498
+ init_cwd2();
481499
+ init_git();
481500
+ });
481393
481501
 
481394
481502
  // src/commands/rewind/index.ts
481395
481503
  var rewind, rewind_default;
481396
- var init_rewind = __esm(() => {
481504
+ var init_rewind2 = __esm(() => {
481397
481505
  rewind = {
481398
481506
  description: `Restore the code and/or conversation to a previous point`,
481399
481507
  name: "rewind",
@@ -481401,7 +481509,7 @@ var init_rewind = __esm(() => {
481401
481509
  argumentHint: "",
481402
481510
  type: "local",
481403
481511
  supportsNonInteractive: false,
481404
- load: () => Promise.resolve().then(() => exports_rewind)
481512
+ load: () => Promise.resolve().then(() => (init_rewind(), exports_rewind))
481405
481513
  };
481406
481514
  rewind_default = rewind;
481407
481515
  });
@@ -493523,7 +493631,7 @@ var init_commands2 = __esm(() => {
493523
493631
  init_agents3();
493524
493632
  init_plugin2();
493525
493633
  init_reload_plugins2();
493526
- init_rewind();
493634
+ init_rewind2();
493527
493635
  init_heapdump2();
493528
493636
  init_mock_limits();
493529
493637
  init_bridge_kick();
@@ -563552,6 +563660,7 @@ var init_migrateEnableAllProjectMcpServersToSettings = __esm(() => {
563552
563660
  // src/migrations/migrateFennecToOpus.ts
563553
563661
  var init_migrateFennecToOpus = __esm(() => {
563554
563662
  init_log3();
563663
+ init_config();
563555
563664
  init_providers();
563556
563665
  init_settings2();
563557
563666
  });
package/dist/myclaude.mjs CHANGED
@@ -4,8 +4,8 @@
4
4
  // MACRO - build-time constants (injected by build.ts)
5
5
  // MACRO injected by build script
6
6
  globalThis.MACRO = {
7
- VERSION: "0.1.185",
8
- BUILD_TIME: "2026-08-10T03:07:07.347Z",
7
+ VERSION: "0.1.187",
8
+ BUILD_TIME: "2026-08-10T04:38:27.202Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -117152,7 +117152,7 @@ var package_default;
117152
117152
  var init_package = __esm(() => {
117153
117153
  package_default = {
117154
117154
  name: "@funnycode/myclaude",
117155
- version: "0.1.185",
117155
+ version: "0.1.187",
117156
117156
  private: false,
117157
117157
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
117158
117158
  license: "MIT",
@@ -209359,6 +209359,13 @@ function parseEventData(event) {
209359
209359
  return null;
209360
209360
  }
209361
209361
  }
209362
+ function isDumpPromptsEnabled() {
209363
+ if (false)
209364
+ ;
209365
+ if (process.env.DUMP_PROMPTS !== "1")
209366
+ return false;
209367
+ return process.env.USER_TYPE === "ant" || process.env.MYCLAUDE_ALLOW_DUMP_PROMPTS === "1";
209368
+ }
209362
209369
  function hashString3(str) {
209363
209370
  return createHash5("sha256").update(str).digest("hex");
209364
209371
  }
@@ -209415,7 +209422,7 @@ function clearAllDumpState() {
209415
209422
  dumpState.clear();
209416
209423
  }
209417
209424
  function addApiRequestToCache(requestData) {
209418
- if (process.env.USER_TYPE !== "ant")
209425
+ if (!isDumpPromptsEnabled())
209419
209426
  return;
209420
209427
  const metadata = {
209421
209428
  timestamp: new Date().toISOString(),
@@ -209454,7 +209461,7 @@ function initFingerprint(req) {
209454
209461
  async function dumpRequest(body, ts, state, filePath) {
209455
209462
  if (false)
209456
209463
  ;
209457
- if (process.env.USER_TYPE !== "ant")
209464
+ if (!isDumpPromptsEnabled())
209458
209465
  return;
209459
209466
  try {
209460
209467
  const req = jsonParse(body);
@@ -209512,7 +209519,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209512
209519
  trimDumpState();
209513
209520
  let timestamp;
209514
209521
  if (init2?.method === "POST" && init2.body) {
209515
- if (process.env.USER_TYPE === "ant") {
209522
+ if (isDumpPromptsEnabled()) {
209516
209523
  timestamp = new Date().toISOString();
209517
209524
  enqueueDumpRequest(agentIdOrSessionId, async () => {
209518
209525
  await dumpRequest(init2.body, timestamp, state, filePath);
@@ -209520,7 +209527,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209520
209527
  }
209521
209528
  }
209522
209529
  const response = await globalThis.fetch(input, init2);
209523
- if (timestamp && response.ok && true && process.env.USER_TYPE === "ant" && process.env.DUMP_PROMPTS === "1") {
209530
+ if (timestamp && response.ok && isDumpPromptsEnabled()) {
209524
209531
  const cloned = response.clone();
209525
209532
  (async () => {
209526
209533
  try {
@@ -209624,7 +209631,7 @@ var init_dumpPrompts = __esm(() => {
209624
209631
  init_debug();
209625
209632
  init_log3();
209626
209633
  init_async_mutex();
209627
- if (process.env.USER_TYPE === "ant" && process.env.DUMP_PROMPTS === "1") {
209634
+ if (isDumpPromptsEnabled()) {
209628
209635
  logForDebugging("DUMP_PROMPTS is enabled. This will write full API payloads (including system prompts, user messages, and tool definitions) to the filesystem. This is intended for debugging only and should NOT be used in production.", { level: "warn" });
209629
209636
  }
209630
209637
  cachedApiRequests = [];
@@ -481384,16 +481391,117 @@ var exports_rewind = {};
481384
481391
  __export(exports_rewind, {
481385
481392
  call: () => call53
481386
481393
  });
481387
- async function call53(_args, context2) {
481388
- if (context2.openMessageSelector) {
481389
- context2.openMessageSelector();
481394
+ async function call53(args, _context) {
481395
+ const isGit = await getIsGit();
481396
+ if (!isGit) {
481397
+ return {
481398
+ type: "text",
481399
+ value: "Checkpoint requires a git repository. Run `git init` first, or use this command inside a git worktree."
481400
+ };
481401
+ }
481402
+ const trimmed = args.trim();
481403
+ if (trimmed === "" || trimmed === "list") {
481404
+ return listCheckpoints();
481405
+ }
481406
+ if (trimmed === "restore" || trimmed === "undo") {
481407
+ return {
481408
+ type: "text",
481409
+ value: "Usage: /checkpoint restore <n> — restore checkpoint #n (see /checkpoint list)."
481410
+ };
481411
+ }
481412
+ const restoreMatch = trimmed.match(/^(?:restore|undo)\s+(\d+)$/);
481413
+ if (restoreMatch) {
481414
+ return restoreCheckpoint(Number(restoreMatch[1]));
481415
+ }
481416
+ return createCheckpoint(trimmed);
481417
+ }
481418
+ async function getCheckpointListRaw() {
481419
+ const { stdout } = await execFileNoThrow(gitExe(), ["--no-optional-locks", "stash", "list"], { preserveOutputOnError: false });
481420
+ return stdout;
481421
+ }
481422
+ async function createCheckpoint(description) {
481423
+ const cwd2 = getCwd();
481424
+ const label = `myclaude-checkpoint: ${description}`;
481425
+ const { stderr } = await execFileNoThrow(gitExe(), ["--no-optional-locks", "stash", "push", "-m", label], { cwd: cwd2, preserveOutputOnError: true });
481426
+ const status2 = await getCheckpointListRaw();
481427
+ if (status2 === "") {
481428
+ return {
481429
+ type: "text",
481430
+ value: "No changes to checkpoint — the workspace is already clean."
481431
+ };
481432
+ }
481433
+ return {
481434
+ type: "text",
481435
+ value: `Checkpoint created: ${label}
481436
+ ${stderr.trim() || ""}
481437
+
481438
+ Use /checkpoint list to see all checkpoints.`.trim()
481439
+ };
481440
+ }
481441
+ async function listCheckpoints() {
481442
+ const stdout = await getCheckpointListRaw();
481443
+ if (stdout.trim() === "") {
481444
+ return {
481445
+ type: "text",
481446
+ value: `No checkpoints yet.
481447
+
481448
+ Usage:
481449
+ /checkpoint <description> — save current workspace state
481450
+ /checkpoint list — list checkpoints
481451
+ /checkpoint restore <n> — restore checkpoint #n`
481452
+ };
481453
+ }
481454
+ const lines2 = stdout.trim().split(`
481455
+ `);
481456
+ const annotated = lines2.map((line, index) => {
481457
+ const marker = line.includes("myclaude-checkpoint") ? " ← /checkpoint" : "";
481458
+ return ` ${index}: ${line.trim()}${marker}`;
481459
+ }).join(`
481460
+ `);
481461
+ return {
481462
+ type: "text",
481463
+ value: `Saved checkpoints:
481464
+ ${annotated}
481465
+
481466
+ Restore with: /checkpoint restore <n>`
481467
+ };
481468
+ }
481469
+ async function restoreCheckpoint(index) {
481470
+ const listRaw = await getCheckpointListRaw();
481471
+ const lines2 = listRaw.trim().split(`
481472
+ `).filter(Boolean);
481473
+ if (lines2.length === 0) {
481474
+ return { type: "text", value: "No checkpoints to restore." };
481390
481475
  }
481391
- return { type: "skip" };
481476
+ if (index < 0 || index >= lines2.length) {
481477
+ return {
481478
+ type: "text",
481479
+ value: `Invalid checkpoint index ${index}. Run /checkpoint list to see valid indices (0–${lines2.length - 1}).`
481480
+ };
481481
+ }
481482
+ const cwd2 = getCwd();
481483
+ const { stdout, stderr } = await execFileNoThrow(gitExe(), ["--no-optional-locks", "stash", "apply", `stash@{${index}}`], { cwd: cwd2, preserveOutputOnError: true });
481484
+ const detail = `${stdout.trim()}${stderr.trim() ? `
481485
+ ${stderr.trim()}` : ""}`;
481486
+ return {
481487
+ type: "text",
481488
+ value: `Restored checkpoint #${index}:
481489
+ ${lines2[index].trim()}
481490
+ ${detail ? `
481491
+ ${detail}` : ""}
481492
+
481493
+ Use /checkpoint list to review; the stash entry is kept so you can re-apply if needed.`.trim()
481494
+ };
481392
481495
  }
481496
+ var init_rewind = __esm(() => {
481497
+ init_execFileNoThrow();
481498
+ init_cwd2();
481499
+ init_git();
481500
+ });
481393
481501
 
481394
481502
  // src/commands/rewind/index.ts
481395
481503
  var rewind, rewind_default;
481396
- var init_rewind = __esm(() => {
481504
+ var init_rewind2 = __esm(() => {
481397
481505
  rewind = {
481398
481506
  description: `Restore the code and/or conversation to a previous point`,
481399
481507
  name: "rewind",
@@ -481401,7 +481509,7 @@ var init_rewind = __esm(() => {
481401
481509
  argumentHint: "",
481402
481510
  type: "local",
481403
481511
  supportsNonInteractive: false,
481404
- load: () => Promise.resolve().then(() => exports_rewind)
481512
+ load: () => Promise.resolve().then(() => (init_rewind(), exports_rewind))
481405
481513
  };
481406
481514
  rewind_default = rewind;
481407
481515
  });
@@ -493523,7 +493631,7 @@ var init_commands2 = __esm(() => {
493523
493631
  init_agents3();
493524
493632
  init_plugin2();
493525
493633
  init_reload_plugins2();
493526
- init_rewind();
493634
+ init_rewind2();
493527
493635
  init_heapdump2();
493528
493636
  init_mock_limits();
493529
493637
  init_bridge_kick();
@@ -563552,6 +563660,7 @@ var init_migrateEnableAllProjectMcpServersToSettings = __esm(() => {
563552
563660
  // src/migrations/migrateFennecToOpus.ts
563553
563661
  var init_migrateFennecToOpus = __esm(() => {
563554
563662
  init_log3();
563663
+ init_config();
563555
563664
  init_providers();
563556
563665
  init_settings2();
563557
563666
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.185",
3
+ "version": "0.1.187",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",