@remixhq/claude-plugin 0.1.24 → 0.1.25
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/.claude-plugin/plugin.json +1 -1
- package/dist/hook-post-collab.cjs +3 -3
- package/dist/hook-post-collab.cjs.map +1 -1
- package/dist/hook-stop-collab.cjs +153 -141
- package/dist/hook-stop-collab.cjs.map +1 -1
- package/dist/hook-user-prompt.cjs +176 -189
- package/dist/hook-user-prompt.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.cjs +41 -19
- package/dist/mcp-server.cjs.map +1 -1
- package/package.json +3 -3
- package/skills/submit-change-step/SKILL.md +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// package.json
|
|
4
4
|
var package_default = {
|
|
5
5
|
name: "@remixhq/claude-plugin",
|
|
6
|
-
version: "0.1.
|
|
6
|
+
version: "0.1.25",
|
|
7
7
|
description: "Claude Code plugin for Remix collaboration workflows",
|
|
8
8
|
homepage: "https://github.com/RemixDotOne/remix-claude-plugin",
|
|
9
9
|
license: "MIT",
|
|
@@ -41,8 +41,8 @@ var package_default = {
|
|
|
41
41
|
prepack: "npm run build"
|
|
42
42
|
},
|
|
43
43
|
dependencies: {
|
|
44
|
-
"@remixhq/core": "^0.1.
|
|
45
|
-
"@remixhq/mcp": "^0.1.
|
|
44
|
+
"@remixhq/core": "^0.1.20",
|
|
45
|
+
"@remixhq/mcp": "^0.1.20"
|
|
46
46
|
},
|
|
47
47
|
devDependencies: {
|
|
48
48
|
"@types/node": "^25.4.0",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/metadata.ts"],"sourcesContent":["{\n \"name\": \"@remixhq/claude-plugin\",\n \"version\": \"0.1.
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/metadata.ts"],"sourcesContent":["{\n \"name\": \"@remixhq/claude-plugin\",\n \"version\": \"0.1.25\",\n \"description\": \"Claude Code plugin for Remix collaboration workflows\",\n \"homepage\": \"https://github.com/RemixDotOne/remix-claude-plugin\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/RemixDotOne/remix-claude-plugin.git\"\n },\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=20\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"files\": [\n \"dist\",\n \".claude-plugin/plugin.json\",\n \".mcp.json\",\n \"skills\",\n \"hooks\",\n \"agents\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"postbuild\": \"node -e \\\"const fs=require('node:fs'); for (const p of ['dist/mcp-server.cjs','dist/hook-pre-git.cjs','dist/hook-user-prompt.cjs','dist/hook-post-collab.cjs','dist/hook-stop-collab.cjs']) fs.chmodSync(p, 0o755);\\\"\",\n \"dev\": \"tsx src/mcp-server.ts\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit\",\n \"test\": \"node --import tsx --test 'src/**/*.test.ts'\",\n \"prepack\": \"npm run build\"\n },\n \"dependencies\": {\n \"@remixhq/core\": \"^0.1.20\",\n \"@remixhq/mcp\": \"^0.1.20\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.4.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.3\"\n }\n}\n","import pkg from \"../package.json\";\n\nexport const pluginMetadata = {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n pluginId: \"remix\",\n agentName: \"remix-collab\",\n};\n"],"mappings":";;;AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,EACZ,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,MAAQ;AAAA,EACR,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,KAAK;AAAA,MACH,OAAS;AAAA,MACT,QAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,WAAa;AAAA,IACb,KAAO;AAAA,IACP,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,SAAW;AAAA,EACb;AAAA,EACA,cAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,YAAc;AAAA,EAChB;AACF;;;AC/CO,IAAM,iBAAiB;AAAA,EAC5B,MAAM,gBAAI;AAAA,EACV,SAAS,gBAAI;AAAA,EACb,aAAa,gBAAI;AAAA,EACjB,UAAU;AAAA,EACV,WAAW;AACb;","names":[]}
|
package/dist/mcp-server.cjs
CHANGED
|
@@ -25003,6 +25003,7 @@ async function collabInit(params) {
|
|
|
25003
25003
|
upstreamAppId: existingBinding.upstreamAppId ?? existingBinding.currentAppId,
|
|
25004
25004
|
dashboardUrl: buildDashboardAppUrl(existingBinding.currentAppId),
|
|
25005
25005
|
bindingPath: getCollabBindingPath(repoRoot),
|
|
25006
|
+
repoFingerprint: existingBinding.repoFingerprint ?? repoFingerprint,
|
|
25006
25007
|
bindingMode: existingBinding.bindingMode,
|
|
25007
25008
|
createdCanonicalFamily: false,
|
|
25008
25009
|
remoteUrl: existingBinding.remoteUrl ?? remoteUrl,
|
|
@@ -25019,6 +25020,7 @@ async function collabInit(params) {
|
|
|
25019
25020
|
upstreamAppId: "",
|
|
25020
25021
|
dashboardUrl: "",
|
|
25021
25022
|
bindingPath: getCollabBindingPath(repoRoot),
|
|
25023
|
+
repoFingerprint,
|
|
25022
25024
|
bindingMode: "lane",
|
|
25023
25025
|
createdCanonicalFamily: false,
|
|
25024
25026
|
remoteUrl,
|
|
@@ -25119,6 +25121,7 @@ async function collabInit(params) {
|
|
|
25119
25121
|
upstreamAppId: boundUpstreamAppId2,
|
|
25120
25122
|
bindingPath: import_path11.default.join(repoRoot, ".remix", "config.json"),
|
|
25121
25123
|
repoRoot,
|
|
25124
|
+
repoFingerprint,
|
|
25122
25125
|
bindingMode: defaultBranch && branchName !== defaultBranch ? "lane" : "explicit_root",
|
|
25123
25126
|
createdCanonicalFamily: false,
|
|
25124
25127
|
baselineStatus: await resolveInitBaselineStatus({
|
|
@@ -25231,6 +25234,7 @@ async function collabInit(params) {
|
|
|
25231
25234
|
upstreamAppId: boundUpstreamAppId2,
|
|
25232
25235
|
bindingPath: bindingPath2,
|
|
25233
25236
|
repoRoot,
|
|
25237
|
+
repoFingerprint,
|
|
25234
25238
|
bindingMode: "lane",
|
|
25235
25239
|
createdCanonicalFamily: false,
|
|
25236
25240
|
baselineStatus: await resolveInitBaselineStatus({
|
|
@@ -25361,6 +25365,7 @@ async function collabInit(params) {
|
|
|
25361
25365
|
upstreamAppId: boundUpstreamAppId2,
|
|
25362
25366
|
bindingPath: bindingPath2,
|
|
25363
25367
|
repoRoot,
|
|
25368
|
+
repoFingerprint,
|
|
25364
25369
|
bindingMode: "lane",
|
|
25365
25370
|
createdCanonicalFamily: false,
|
|
25366
25371
|
baselineStatus: await resolveInitBaselineStatus({
|
|
@@ -25581,6 +25586,7 @@ async function collabInit(params) {
|
|
|
25581
25586
|
upstreamAppId: boundUpstreamAppId2,
|
|
25582
25587
|
dashboardUrl: buildDashboardAppUrl(boundCurrentAppId2),
|
|
25583
25588
|
bindingPath: bindingPath2,
|
|
25589
|
+
repoFingerprint,
|
|
25584
25590
|
bindingMode: bindingMode2,
|
|
25585
25591
|
createdCanonicalFamily: Boolean(params.forceNew),
|
|
25586
25592
|
remoteUrl,
|
|
@@ -25763,6 +25769,7 @@ async function collabInit(params) {
|
|
|
25763
25769
|
upstreamAppId: boundUpstreamAppId,
|
|
25764
25770
|
bindingPath,
|
|
25765
25771
|
repoRoot,
|
|
25772
|
+
repoFingerprint,
|
|
25766
25773
|
bindingMode,
|
|
25767
25774
|
createdCanonicalFamily: Boolean(params.forceNew),
|
|
25768
25775
|
baselineStatus,
|
|
@@ -55842,7 +55849,9 @@ async function resolveConfig(_opts) {
|
|
|
55842
55849
|
// node_modules/@remixhq/mcp/dist/index.js
|
|
55843
55850
|
var import_path15 = __toESM(require("path"), 1);
|
|
55844
55851
|
var import_child_process = require("child_process");
|
|
55852
|
+
var import_crypto9 = require("crypto");
|
|
55845
55853
|
var import_fs3 = require("fs");
|
|
55854
|
+
var import_os8 = __toESM(require("os"), 1);
|
|
55846
55855
|
var import_path16 = __toESM(require("path"), 1);
|
|
55847
55856
|
async function createRemixTokenProvider(config2) {
|
|
55848
55857
|
const resolvedConfig = config2 ?? await resolveConfig();
|
|
@@ -57494,11 +57503,30 @@ async function accessDebug(params) {
|
|
|
57494
57503
|
}
|
|
57495
57504
|
};
|
|
57496
57505
|
}
|
|
57497
|
-
var
|
|
57498
|
-
|
|
57499
|
-
|
|
57506
|
+
var LEGACY_MARKER_REL_PATH = import_path16.default.join(".remix", ".history-imported");
|
|
57507
|
+
function collabStateRoot() {
|
|
57508
|
+
const configured = process.env.REMIX_COLLAB_STATE_ROOT?.trim();
|
|
57509
|
+
return configured || import_path16.default.join(import_os8.default.homedir(), ".remix", "collab-state");
|
|
57510
|
+
}
|
|
57511
|
+
function sha256Hex3(value) {
|
|
57512
|
+
return (0, import_crypto9.createHash)("sha256").update(value).digest("hex");
|
|
57513
|
+
}
|
|
57514
|
+
function autoSpawnMarkerPath(repoRoot, repoFingerprint) {
|
|
57515
|
+
const identityKey = typeof repoFingerprint === "string" && repoFingerprint.trim() ? `repoFingerprint:${repoFingerprint.trim()}` : `repoRoot:${repoRoot}`;
|
|
57516
|
+
return import_path16.default.join(collabStateRoot(), "history-import", sha256Hex3(identityKey), "history-imported.json");
|
|
57517
|
+
}
|
|
57518
|
+
function fallbackRepoRootMarkerPath(repoRoot) {
|
|
57519
|
+
return autoSpawnMarkerPath(repoRoot, null);
|
|
57520
|
+
}
|
|
57521
|
+
function legacyLocalRepoRootMarkerPath(repoRoot) {
|
|
57522
|
+
return import_path16.default.join(collabStateRoot(), "history-import", sha256Hex3(repoRoot), "history-imported.json");
|
|
57523
|
+
}
|
|
57524
|
+
function legacyAutoSpawnMarkerPath(repoRoot) {
|
|
57525
|
+
return import_path16.default.join(repoRoot, LEGACY_MARKER_REL_PATH);
|
|
57526
|
+
}
|
|
57527
|
+
function shouldAutoSpawnHistoryImport(repoRoot, repoFingerprint) {
|
|
57500
57528
|
try {
|
|
57501
|
-
return !(0, import_fs3.existsSync)(
|
|
57529
|
+
return !(0, import_fs3.existsSync)(autoSpawnMarkerPath(repoRoot, repoFingerprint)) && !(0, import_fs3.existsSync)(fallbackRepoRootMarkerPath(repoRoot)) && !(0, import_fs3.existsSync)(legacyLocalRepoRootMarkerPath(repoRoot)) && !(0, import_fs3.existsSync)(legacyAutoSpawnMarkerPath(repoRoot));
|
|
57502
57530
|
} catch {
|
|
57503
57531
|
return false;
|
|
57504
57532
|
}
|
|
@@ -57507,14 +57535,6 @@ function isAutoSpawnEligibleBindingMode(bindingMode) {
|
|
|
57507
57535
|
return bindingMode === "explicit_root";
|
|
57508
57536
|
}
|
|
57509
57537
|
function spawnHistoryImportDetached(repoRoot, options) {
|
|
57510
|
-
const remixDir = import_path16.default.join(repoRoot, ".remix");
|
|
57511
|
-
try {
|
|
57512
|
-
(0, import_fs3.mkdirSync)(remixDir, { recursive: true });
|
|
57513
|
-
} catch {
|
|
57514
|
-
}
|
|
57515
|
-
const logPath = import_path16.default.join(repoRoot, LOG_REL_PATH);
|
|
57516
|
-
const out = (0, import_fs3.openSync)(logPath, "a");
|
|
57517
|
-
const err = (0, import_fs3.openSync)(logPath, "a");
|
|
57518
57538
|
const child = (0, import_child_process.spawn)(
|
|
57519
57539
|
"remix",
|
|
57520
57540
|
[
|
|
@@ -57531,12 +57551,12 @@ function spawnHistoryImportDetached(repoRoot, options) {
|
|
|
57531
57551
|
],
|
|
57532
57552
|
{
|
|
57533
57553
|
detached: true,
|
|
57534
|
-
stdio:
|
|
57554
|
+
stdio: "ignore",
|
|
57535
57555
|
env: { ...process.env, REMIX_HISTORY_AUTO_SPAWN: "1" }
|
|
57536
57556
|
}
|
|
57537
57557
|
);
|
|
57538
57558
|
child.unref();
|
|
57539
|
-
return { pid: child.pid
|
|
57559
|
+
return { pid: child.pid };
|
|
57540
57560
|
}
|
|
57541
57561
|
function getAnnotations(access, options) {
|
|
57542
57562
|
if (access === "read") {
|
|
@@ -57704,12 +57724,14 @@ function registerCollabTools(server, context) {
|
|
|
57704
57724
|
try {
|
|
57705
57725
|
const repoRoot = result && typeof result === "object" && "data" in result && result.data && typeof result.data.repoRoot === "string" ? result.data.repoRoot : null;
|
|
57706
57726
|
const bindingMode = result && typeof result === "object" && "data" in result && result.data && typeof result.data.bindingMode === "string" ? result.data.bindingMode : null;
|
|
57707
|
-
|
|
57727
|
+
const resultData = result && typeof result === "object" && "data" in result && result.data && typeof result.data === "object" ? result.data : null;
|
|
57728
|
+
const repoFingerprint = typeof resultData?.repoFingerprint === "string" ? resultData.repoFingerprint : null;
|
|
57729
|
+
if (repoRoot && isAutoSpawnEligibleBindingMode(bindingMode) && shouldAutoSpawnHistoryImport(repoRoot, repoFingerprint)) {
|
|
57708
57730
|
const cutoffAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
57709
57731
|
const spawned = spawnHistoryImportDetached(repoRoot, { cutoffAt });
|
|
57710
57732
|
context.logger.log({
|
|
57711
57733
|
level: "info",
|
|
57712
|
-
message: `history_import_auto_spawned pid=${spawned.pid ?? "?"}
|
|
57734
|
+
message: `history_import_auto_spawned pid=${spawned.pid ?? "?"} cutoffAt=${cutoffAt}`,
|
|
57713
57735
|
tool: "remix_collab_init",
|
|
57714
57736
|
repoRoot
|
|
57715
57737
|
});
|
|
@@ -59743,7 +59765,7 @@ async function listPendingTurnStateSummaries() {
|
|
|
59743
59765
|
// package.json
|
|
59744
59766
|
var package_default = {
|
|
59745
59767
|
name: "@remixhq/claude-plugin",
|
|
59746
|
-
version: "0.1.
|
|
59768
|
+
version: "0.1.25",
|
|
59747
59769
|
description: "Claude Code plugin for Remix collaboration workflows",
|
|
59748
59770
|
homepage: "https://github.com/RemixDotOne/remix-claude-plugin",
|
|
59749
59771
|
license: "MIT",
|
|
@@ -59781,8 +59803,8 @@ var package_default = {
|
|
|
59781
59803
|
prepack: "npm run build"
|
|
59782
59804
|
},
|
|
59783
59805
|
dependencies: {
|
|
59784
|
-
"@remixhq/core": "^0.1.
|
|
59785
|
-
"@remixhq/mcp": "^0.1.
|
|
59806
|
+
"@remixhq/core": "^0.1.20",
|
|
59807
|
+
"@remixhq/mcp": "^0.1.20"
|
|
59786
59808
|
},
|
|
59787
59809
|
devDependencies: {
|
|
59788
59810
|
"@types/node": "^25.4.0",
|