@swarmdo/cli 1.37.0 → 1.50.0
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/README.md +9 -5
- package/dist/src/apply/apply.d.ts.map +1 -1
- package/dist/src/apply/apply.js +6 -1
- package/dist/src/apply/apply.js.map +1 -1
- package/dist/src/changelog/changelog.d.ts +21 -0
- package/dist/src/changelog/changelog.d.ts.map +1 -1
- package/dist/src/changelog/changelog.js +43 -0
- package/dist/src/changelog/changelog.js.map +1 -1
- package/dist/src/commands/changelog.d.ts.map +1 -1
- package/dist/src/commands/changelog.js +15 -4
- package/dist/src/commands/changelog.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +37 -1
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/coupling.d.ts +17 -0
- package/dist/src/commands/coupling.d.ts.map +1 -0
- package/dist/src/commands/coupling.js +85 -0
- package/dist/src/commands/coupling.js.map +1 -0
- package/dist/src/commands/hidden-coupling.d.ts +19 -0
- package/dist/src/commands/hidden-coupling.d.ts.map +1 -0
- package/dist/src/commands/hidden-coupling.js +92 -0
- package/dist/src/commands/hidden-coupling.js.map +1 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +55 -0
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/hotspots.d.ts.map +1 -1
- package/dist/src/commands/hotspots.js +2 -1
- package/dist/src/commands/hotspots.js.map +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +12 -3
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/ownership.d.ts +18 -0
- package/dist/src/commands/ownership.d.ts.map +1 -0
- package/dist/src/commands/ownership.js +88 -0
- package/dist/src/commands/ownership.js.map +1 -0
- package/dist/src/commands/pack.js +4 -4
- package/dist/src/commands/pack.js.map +1 -1
- package/dist/src/commands/redact.d.ts.map +1 -1
- package/dist/src/commands/redact.js +11 -0
- package/dist/src/commands/redact.js.map +1 -1
- package/dist/src/commands/release.d.ts.map +1 -1
- package/dist/src/commands/release.js +27 -5
- package/dist/src/commands/release.js.map +1 -1
- package/dist/src/commands/task.d.ts.map +1 -1
- package/dist/src/commands/task.js +57 -2
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/config-lint/agents-lint.d.ts +30 -0
- package/dist/src/config-lint/agents-lint.d.ts.map +1 -0
- package/dist/src/config-lint/agents-lint.js +87 -0
- package/dist/src/config-lint/agents-lint.js.map +1 -0
- package/dist/src/config-lint/commands-lint.d.ts +31 -0
- package/dist/src/config-lint/commands-lint.d.ts.map +1 -0
- package/dist/src/config-lint/commands-lint.js +127 -0
- package/dist/src/config-lint/commands-lint.js.map +1 -0
- package/dist/src/config-lint/lint.d.ts +8 -0
- package/dist/src/config-lint/lint.d.ts.map +1 -1
- package/dist/src/config-lint/lint.js +7 -0
- package/dist/src/config-lint/lint.js.map +1 -1
- package/dist/src/coupling/coupling.d.ts +56 -0
- package/dist/src/coupling/coupling.d.ts.map +1 -0
- package/dist/src/coupling/coupling.js +86 -0
- package/dist/src/coupling/coupling.js.map +1 -0
- package/dist/src/coupling/hidden.d.ts +45 -0
- package/dist/src/coupling/hidden.d.ts.map +1 -0
- package/dist/src/coupling/hidden.js +66 -0
- package/dist/src/coupling/hidden.js.map +1 -0
- package/dist/src/hooks-recipe/command-guard.d.ts +46 -0
- package/dist/src/hooks-recipe/command-guard.d.ts.map +1 -0
- package/dist/src/hooks-recipe/command-guard.js +120 -0
- package/dist/src/hooks-recipe/command-guard.js.map +1 -0
- package/dist/src/hooks-recipe/recipe.d.ts.map +1 -1
- package/dist/src/hooks-recipe/recipe.js +8 -0
- package/dist/src/hooks-recipe/recipe.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +4 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/coupling-tools.d.ts +14 -0
- package/dist/src/mcp-tools/coupling-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/coupling-tools.js +56 -0
- package/dist/src/mcp-tools/coupling-tools.js.map +1 -0
- package/dist/src/mcp-tools/index.d.ts +2 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +2 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/ownership-tools.d.ts +14 -0
- package/dist/src/mcp-tools/ownership-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/ownership-tools.js +51 -0
- package/dist/src/mcp-tools/ownership-tools.js.map +1 -0
- package/dist/src/mcp-tools/profiles.d.ts.map +1 -1
- package/dist/src/mcp-tools/profiles.js +2 -0
- package/dist/src/mcp-tools/profiles.js.map +1 -1
- package/dist/src/mcp-tools/task-deps.d.ts +35 -0
- package/dist/src/mcp-tools/task-deps.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-deps.js +87 -0
- package/dist/src/mcp-tools/task-deps.js.map +1 -1
- package/dist/src/ownership/ownership.d.ts +61 -0
- package/dist/src/ownership/ownership.d.ts.map +1 -0
- package/dist/src/ownership/ownership.js +151 -0
- package/dist/src/ownership/ownership.js.map +1 -0
- package/dist/src/pack/pack.d.ts +1 -1
- package/dist/src/pack/pack.d.ts.map +1 -1
- package/dist/src/pack/pack.js +12 -4
- package/dist/src/pack/pack.js.map +1 -1
- package/dist/src/redact/redact.d.ts.map +1 -1
- package/dist/src/redact/redact.js +47 -16
- package/dist/src/redact/redact.js.map +1 -1
- package/dist/src/redact/sarif.d.ts +28 -0
- package/dist/src/redact/sarif.d.ts.map +1 -0
- package/dist/src/redact/sarif.js +53 -0
- package/dist/src/redact/sarif.js.map +1 -0
- package/dist/src/release/release.d.ts +19 -0
- package/dist/src/release/release.d.ts.map +1 -1
- package/dist/src/release/release.js +28 -0
- package/dist/src/release/release.js.map +1 -1
- package/dist/src/usage/reflect.d.ts +9 -1
- package/dist/src/usage/reflect.d.ts.map +1 -1
- package/dist/src/usage/reflect.js +14 -4
- package/dist/src/usage/reflect.js.map +1 -1
- package/dist/src/util/since.d.ts +13 -0
- package/dist/src/util/since.d.ts.map +1 -0
- package/dist/src/util/since.js +21 -0
- package/dist/src/util/since.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/config-lint/lint.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/config-lint/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,QAAkB,EAAE,IAAY,EAAE,OAAe,EAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAE5H,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC9G,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AACrO,2EAA2E;AAC3E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oBAAoB;IACpB,cAAc,EAAE,OAAO,EAAE,YAAY;IACrC,WAAW;IACX,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa;IAChE,eAAe;IACf,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB;IAC3G,kBAAkB;IAClB,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe;IAC/E,gBAAgB;IAChB,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa;IAChI,kBAAkB;IAClB,aAAa,EAAE,mBAAmB;IAClC,WAAW;IACX,gBAAgB,EAAE,gBAAgB;CACnC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,GAAkB;IACvD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAoB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;IACrH,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,GAAY;IAC1D,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,GAAG,aAAa,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7K,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,6EAA6E;YAC7E,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACtE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,oGAAoG,CAAC,CAAC,CAAC;YACvJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzH,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC;QAC5I,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,0CAA0C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACzH,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,IAAK,CAAC,CAAC,MAA8C,EAAE,OAAO,CAAY,CAAC;IAC3G,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,MAAM,CAAC,OAAO,CAAC,oBAAoB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACvI,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,GAAY;IAC1D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAI,GAA+B,CAAC,KAAK,CAAC;IACrD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,gDAAgD,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,uBAAuB,KAAK,aAAa,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACtJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACpF,SAAS;QACX,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,CAAC;YACrC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAChD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,KAAgC,CAAC;YAC3C,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACnJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,KAAK,qDAAqD,CAAC,CAAC,CAAC;gBAC9G,OAAO;YACT,CAAC;YACA,CAAC,CAAC,KAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,EAAE,GAAG,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC;gBAClC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;gBAChD,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,gCAAgC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpI,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,qCAAqC,CAAC,CAAC,CAAC;YACzJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,GAAY;IACtD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,OAAO,GAAI,GAA+B,CAAC,UAAU,CAAC;IAC5D,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,0CAA0C,CAAC,CAAC,CAAC;IAClH,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE,qDAAqD,CAAC,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;QAC7E,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,IAAI,qBAAqB,CAAC,CAAC,CAAC;YACrF,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,IAAI,yCAAyC,CAAC,CAAC,CAAC;YAC1K,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,IAAI,8BAA8B,CAAC,CAAC,CAAC;QACjJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,IAAI,MAAM,SAAS,8CAA8C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClM,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,IAAI,8BAA8B,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,YAAsB,EAAE,MAAgB,EAAE,cAAwB,EAAE;IACnG,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EACvD,GAAG,IAAI,CAAC,MAAM,mBAAmB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,0CAA0C,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iGAAiG,CAAC,CAAC,CAAC;IACzQ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAChE,SAAS,CAAC,cAAc,CAAC,qHAAqH,CAAC,CAAC,CAAC;IACrJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAwBD,iDAAiD;AACjD,MAAM,UAAU,OAAO,CAAC,KAAgB;IACtC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1F,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAClF,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1G,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QAC7D,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* coupling.ts — temporal (co-change) coupling mined from git history.
|
|
3
|
+
*
|
|
4
|
+
* "Which files change together?" — the EMPIRICAL complement to `affected`'s
|
|
5
|
+
* STATIC import graph. Files that repeatedly land in the same commit are
|
|
6
|
+
* coupled in practice even when no import edge connects them (a JSON schema and
|
|
7
|
+
* its TS type, a serializer/deserializer split across modules, a feature flag
|
|
8
|
+
* and its consumers, a doc that must track an API). Surfacing that lets an agent
|
|
9
|
+
* or a maintainer catch the edit they'd otherwise forget.
|
|
10
|
+
*
|
|
11
|
+
* This is code-maat's `coupling`/`soc` analysis (Tornhill, *Your Code as a
|
|
12
|
+
* Crime Scene*), productized as "Change Coupling" in CodeScene. The scoring core
|
|
13
|
+
* is a pure fold over the SAME `git log --numstat` dump `hotspots` already
|
|
14
|
+
* parses, so it reuses that Commit type + parseGitLog and is unit-tested without
|
|
15
|
+
* a repo.
|
|
16
|
+
*/
|
|
17
|
+
import type { Commit } from '../hotspots/hotspots.js';
|
|
18
|
+
export interface CouplingPair {
|
|
19
|
+
/** the lexicographically smaller path of the pair */
|
|
20
|
+
a: string;
|
|
21
|
+
/** the lexicographically larger path of the pair */
|
|
22
|
+
b: string;
|
|
23
|
+
/** commits touching BOTH a and b */
|
|
24
|
+
shared: number;
|
|
25
|
+
/** commits touching a (within the file cap) */
|
|
26
|
+
aCommits: number;
|
|
27
|
+
/** commits touching b (within the file cap) */
|
|
28
|
+
bCommits: number;
|
|
29
|
+
/** shared / min(aCommits, bCommits) ∈ (0,1]; 1.0 = they never move apart */
|
|
30
|
+
degree: number;
|
|
31
|
+
}
|
|
32
|
+
export interface CouplingOptions {
|
|
33
|
+
/** drop pairs sharing fewer than this many commits (default 2) — support threshold */
|
|
34
|
+
minShared?: number;
|
|
35
|
+
/**
|
|
36
|
+
* skip commits touching more than this many files (default 30; 0 = no cap).
|
|
37
|
+
* A sweeping rename/format/license commit would otherwise couple everything
|
|
38
|
+
* it touches — the code-maat noise convention drops those wide commits.
|
|
39
|
+
*/
|
|
40
|
+
maxFiles?: number;
|
|
41
|
+
/** keep only the top N pairs after ranking (default: all) */
|
|
42
|
+
top?: number;
|
|
43
|
+
/** keep only pairs involving this exact path (a "what couples with X?" query) */
|
|
44
|
+
focus?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Rank co-changing file pairs. Pure + deterministic.
|
|
48
|
+
*
|
|
49
|
+
* degree(A,B) = shared / min(commits(A), commits(B)) — the fraction of the
|
|
50
|
+
* rarer file's commits that also touched the other. Symmetric, in (0,1].
|
|
51
|
+
*/
|
|
52
|
+
export declare function computeCoupling(commits: Commit[], opts?: CouplingOptions): CouplingPair[];
|
|
53
|
+
export declare function couplingToCsv(pairs: CouplingPair[]): string;
|
|
54
|
+
/** Human-readable table. Pure. */
|
|
55
|
+
export declare function formatCoupling(pairs: CouplingPair[]): string;
|
|
56
|
+
//# sourceMappingURL=coupling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coupling.d.ts","sourceRoot":"","sources":["../../../src/coupling/coupling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,CAAC,EAAE,MAAM,CAAC;IACV,oDAAoD;IACpD,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,YAAY,EAAE,CA2C7F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAI3D;AAED,kCAAkC;AAClC,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAY5D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* coupling.ts — temporal (co-change) coupling mined from git history.
|
|
3
|
+
*
|
|
4
|
+
* "Which files change together?" — the EMPIRICAL complement to `affected`'s
|
|
5
|
+
* STATIC import graph. Files that repeatedly land in the same commit are
|
|
6
|
+
* coupled in practice even when no import edge connects them (a JSON schema and
|
|
7
|
+
* its TS type, a serializer/deserializer split across modules, a feature flag
|
|
8
|
+
* and its consumers, a doc that must track an API). Surfacing that lets an agent
|
|
9
|
+
* or a maintainer catch the edit they'd otherwise forget.
|
|
10
|
+
*
|
|
11
|
+
* This is code-maat's `coupling`/`soc` analysis (Tornhill, *Your Code as a
|
|
12
|
+
* Crime Scene*), productized as "Change Coupling" in CodeScene. The scoring core
|
|
13
|
+
* is a pure fold over the SAME `git log --numstat` dump `hotspots` already
|
|
14
|
+
* parses, so it reuses that Commit type + parseGitLog and is unit-tested without
|
|
15
|
+
* a repo.
|
|
16
|
+
*/
|
|
17
|
+
import { toCsv } from '../util/csv.js';
|
|
18
|
+
const US = '\x1f'; // pair-key separator (never appears in a file path)
|
|
19
|
+
/**
|
|
20
|
+
* Rank co-changing file pairs. Pure + deterministic.
|
|
21
|
+
*
|
|
22
|
+
* degree(A,B) = shared / min(commits(A), commits(B)) — the fraction of the
|
|
23
|
+
* rarer file's commits that also touched the other. Symmetric, in (0,1].
|
|
24
|
+
*/
|
|
25
|
+
export function computeCoupling(commits, opts = {}) {
|
|
26
|
+
const minShared = opts.minShared ?? 2;
|
|
27
|
+
const maxFiles = opts.maxFiles ?? 30;
|
|
28
|
+
const fileCommits = new Map(); // path → # commits touching it
|
|
29
|
+
const pairShared = new Map(); // "a\x1fb" → # commits touching both
|
|
30
|
+
for (const c of commits) {
|
|
31
|
+
const paths = [...new Set(c.files.map((f) => f.path))].filter(Boolean);
|
|
32
|
+
if (maxFiles > 0 && paths.length > maxFiles)
|
|
33
|
+
continue; // skip sweeping commits (both counts + pairs)
|
|
34
|
+
for (const p of paths)
|
|
35
|
+
fileCommits.set(p, (fileCommits.get(p) ?? 0) + 1);
|
|
36
|
+
const sorted = paths.slice().sort(); // canonical (a<b) pair keys
|
|
37
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
38
|
+
for (let j = i + 1; j < sorted.length; j++) {
|
|
39
|
+
const key = sorted[i] + US + sorted[j];
|
|
40
|
+
pairShared.set(key, (pairShared.get(key) ?? 0) + 1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const pairs = [];
|
|
45
|
+
for (const [key, shared] of pairShared) {
|
|
46
|
+
if (shared < minShared)
|
|
47
|
+
continue;
|
|
48
|
+
const sep = key.indexOf(US);
|
|
49
|
+
const a = key.slice(0, sep);
|
|
50
|
+
const b = key.slice(sep + 1);
|
|
51
|
+
if (opts.focus && a !== opts.focus && b !== opts.focus)
|
|
52
|
+
continue;
|
|
53
|
+
const aCommits = fileCommits.get(a) ?? 0;
|
|
54
|
+
const bCommits = fileCommits.get(b) ?? 0;
|
|
55
|
+
const denom = Math.min(aCommits, bCommits) || 1;
|
|
56
|
+
const degree = Math.round((shared / denom) * 100) / 100;
|
|
57
|
+
pairs.push({ a, b, shared, aCommits, bCommits, degree });
|
|
58
|
+
}
|
|
59
|
+
// deterministic: strongest coupling first, then most-shared, then path order
|
|
60
|
+
pairs.sort((x, y) => y.degree - x.degree ||
|
|
61
|
+
y.shared - x.shared ||
|
|
62
|
+
(x.a < y.a ? -1 : x.a > y.a ? 1 : 0) ||
|
|
63
|
+
(x.b < y.b ? -1 : x.b > y.b ? 1 : 0));
|
|
64
|
+
return opts.top && opts.top > 0 ? pairs.slice(0, opts.top) : pairs;
|
|
65
|
+
}
|
|
66
|
+
export function couplingToCsv(pairs) {
|
|
67
|
+
const headers = ['fileA', 'fileB', 'degree', 'shared', 'commitsA', 'commitsB'];
|
|
68
|
+
const rows = pairs.map((p) => [p.a, p.b, p.degree, p.shared, p.aCommits, p.bCommits]);
|
|
69
|
+
return toCsv(headers, rows);
|
|
70
|
+
}
|
|
71
|
+
/** Human-readable table. Pure. */
|
|
72
|
+
export function formatCoupling(pairs) {
|
|
73
|
+
if (pairs.length === 0)
|
|
74
|
+
return 'no co-change coupling found (raise --since or lower --min-shared)';
|
|
75
|
+
const lines = [];
|
|
76
|
+
lines.push('rank degree shared commits(A/B) files');
|
|
77
|
+
pairs.forEach((p, i) => {
|
|
78
|
+
const rank = String(i + 1).padStart(4);
|
|
79
|
+
const degree = `${Math.round(p.degree * 100)}%`.padStart(6);
|
|
80
|
+
const shared = String(p.shared).padStart(6);
|
|
81
|
+
const ab = `${p.aCommits}/${p.bCommits}`.padStart(11);
|
|
82
|
+
lines.push(`${rank} ${degree} ${shared} ${ab} ${p.a} ↔ ${p.b}`);
|
|
83
|
+
});
|
|
84
|
+
return lines.join('\n');
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=coupling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coupling.js","sourceRoot":"","sources":["../../../src/coupling/coupling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hidden.ts — HIDDEN coupling: files that change together but have no import
|
|
3
|
+
* edge to explain it. "Logical coupling minus structural coupling."
|
|
4
|
+
*
|
|
5
|
+
* `coupling` mines temporal (co-change) coupling from git; `codegraph` builds
|
|
6
|
+
* the static import graph. Join them and emit the SET DIFFERENCE: pairs with a
|
|
7
|
+
* high co-change degree yet NO import edge connecting them in either direction.
|
|
8
|
+
* That's a dependency real enough to move two files in lockstep but invisible in
|
|
9
|
+
* the code — a JSON schema and the type that mirrors it, a serializer/parser
|
|
10
|
+
* split across modules, a config file and its consumers, a doc that must track
|
|
11
|
+
* an API. An agent editing A won't reach B by following imports, so it forgets
|
|
12
|
+
* the co-edit; a reviewer sees a missing abstraction / architectural smell.
|
|
13
|
+
*
|
|
14
|
+
* This is the divergence between evolutionary coupling (Gall et al., "Detection
|
|
15
|
+
* of Logical Coupling," ICSM 1998) and structural coupling — CodeScene flags
|
|
16
|
+
* change-coupling that crosses architectural boundaries as "surprising." swarmdo
|
|
17
|
+
* is uniquely positioned to compute it because it already owns BOTH captures.
|
|
18
|
+
*
|
|
19
|
+
* Pure + deterministic: a set-difference over two already-built inputs (the
|
|
20
|
+
* ranked CouplingPair[] from computeCoupling + the ImportEdge[] from the index).
|
|
21
|
+
* No git, no fs — fully fixture-testable.
|
|
22
|
+
*/
|
|
23
|
+
import type { CouplingPair } from './coupling.js';
|
|
24
|
+
import type { ImportEdge } from '../codegraph/codegraph.js';
|
|
25
|
+
export interface AnnotatedPair extends CouplingPair {
|
|
26
|
+
/** true iff an import edge connects a↔b in EITHER direction (a structural link
|
|
27
|
+
* that explains the co-change); the returned pairs are all `false`. */
|
|
28
|
+
importLinked: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface HiddenCouplingOptions {
|
|
31
|
+
/** keep only the top N hidden pairs after ranking (default: all) */
|
|
32
|
+
top?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Return the co-change pairs that NO import edge explains, ranked as they came
|
|
36
|
+
* from `computeCoupling` (degree desc, shared desc, path order). A type-only
|
|
37
|
+
* import still counts as a structural link — it's a real code reference that
|
|
38
|
+
* explains the co-change — so those pairs are excluded too. Pure.
|
|
39
|
+
*/
|
|
40
|
+
export declare function computeHiddenCoupling(pairs: CouplingPair[], imports: ImportEdge[], opts?: HiddenCouplingOptions): AnnotatedPair[];
|
|
41
|
+
/** Export the hidden-coupling ranking as CSV for review. Pure. */
|
|
42
|
+
export declare function hiddenCouplingToCsv(pairs: AnnotatedPair[]): string;
|
|
43
|
+
/** Human-readable table. Pure. */
|
|
44
|
+
export declare function formatHiddenCoupling(pairs: AnnotatedPair[]): string;
|
|
45
|
+
//# sourceMappingURL=hidden.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hidden.d.ts","sourceRoot":"","sources":["../../../src/coupling/hidden.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD;2EACuE;IACvE,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,GAAE,qBAA0B,GAAG,aAAa,EAAE,CAUrI;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAIlE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAYnE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hidden.ts — HIDDEN coupling: files that change together but have no import
|
|
3
|
+
* edge to explain it. "Logical coupling minus structural coupling."
|
|
4
|
+
*
|
|
5
|
+
* `coupling` mines temporal (co-change) coupling from git; `codegraph` builds
|
|
6
|
+
* the static import graph. Join them and emit the SET DIFFERENCE: pairs with a
|
|
7
|
+
* high co-change degree yet NO import edge connecting them in either direction.
|
|
8
|
+
* That's a dependency real enough to move two files in lockstep but invisible in
|
|
9
|
+
* the code — a JSON schema and the type that mirrors it, a serializer/parser
|
|
10
|
+
* split across modules, a config file and its consumers, a doc that must track
|
|
11
|
+
* an API. An agent editing A won't reach B by following imports, so it forgets
|
|
12
|
+
* the co-edit; a reviewer sees a missing abstraction / architectural smell.
|
|
13
|
+
*
|
|
14
|
+
* This is the divergence between evolutionary coupling (Gall et al., "Detection
|
|
15
|
+
* of Logical Coupling," ICSM 1998) and structural coupling — CodeScene flags
|
|
16
|
+
* change-coupling that crosses architectural boundaries as "surprising." swarmdo
|
|
17
|
+
* is uniquely positioned to compute it because it already owns BOTH captures.
|
|
18
|
+
*
|
|
19
|
+
* Pure + deterministic: a set-difference over two already-built inputs (the
|
|
20
|
+
* ranked CouplingPair[] from computeCoupling + the ImportEdge[] from the index).
|
|
21
|
+
* No git, no fs — fully fixture-testable.
|
|
22
|
+
*/
|
|
23
|
+
import { toCsv } from '../util/csv.js';
|
|
24
|
+
const US = '\x1f'; // pair-key separator (never appears in a file path)
|
|
25
|
+
/** Canonical undirected pair key so direction doesn't matter. */
|
|
26
|
+
const pairKey = (a, b) => (a < b ? a + US + b : b + US + a);
|
|
27
|
+
/**
|
|
28
|
+
* Return the co-change pairs that NO import edge explains, ranked as they came
|
|
29
|
+
* from `computeCoupling` (degree desc, shared desc, path order). A type-only
|
|
30
|
+
* import still counts as a structural link — it's a real code reference that
|
|
31
|
+
* explains the co-change — so those pairs are excluded too. Pure.
|
|
32
|
+
*/
|
|
33
|
+
export function computeHiddenCoupling(pairs, imports, opts = {}) {
|
|
34
|
+
// Every file pair connected by a resolved import edge, either direction.
|
|
35
|
+
const linked = new Set();
|
|
36
|
+
for (const e of imports) {
|
|
37
|
+
if (e.resolved)
|
|
38
|
+
linked.add(pairKey(e.from, e.resolved));
|
|
39
|
+
}
|
|
40
|
+
const hidden = pairs
|
|
41
|
+
.map((p) => ({ ...p, importLinked: linked.has(pairKey(p.a, p.b)) }))
|
|
42
|
+
.filter((p) => !p.importLinked);
|
|
43
|
+
return opts.top && opts.top > 0 ? hidden.slice(0, opts.top) : hidden;
|
|
44
|
+
}
|
|
45
|
+
/** Export the hidden-coupling ranking as CSV for review. Pure. */
|
|
46
|
+
export function hiddenCouplingToCsv(pairs) {
|
|
47
|
+
const headers = ['fileA', 'fileB', 'degree', 'shared', 'commitsA', 'commitsB'];
|
|
48
|
+
const rows = pairs.map((p) => [p.a, p.b, p.degree, p.shared, p.aCommits, p.bCommits]);
|
|
49
|
+
return toCsv(headers, rows);
|
|
50
|
+
}
|
|
51
|
+
/** Human-readable table. Pure. */
|
|
52
|
+
export function formatHiddenCoupling(pairs) {
|
|
53
|
+
if (pairs.length === 0)
|
|
54
|
+
return 'no hidden coupling found (every co-change pair has an import edge, or none met the threshold)';
|
|
55
|
+
const lines = [];
|
|
56
|
+
lines.push('rank degree shared commits(A/B) files (co-change, no import edge)');
|
|
57
|
+
pairs.forEach((p, i) => {
|
|
58
|
+
const rank = String(i + 1).padStart(4);
|
|
59
|
+
const degree = `${Math.round(p.degree * 100)}%`.padStart(6);
|
|
60
|
+
const shared = String(p.shared).padStart(6);
|
|
61
|
+
const ab = `${p.aCommits}/${p.bCommits}`.padStart(11);
|
|
62
|
+
lines.push(`${rank} ${degree} ${shared} ${ab} ${p.a} ⇢ ${p.b}`);
|
|
63
|
+
});
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=hidden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hidden.js","sourceRoot":"","sources":["../../../src/coupling/hidden.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* command-guard.ts — classify a bash command as safe or blockable, for a
|
|
3
|
+
* PreToolUse/Bash hook that emits Claude Code's `permissionDecision: "deny"`.
|
|
4
|
+
*
|
|
5
|
+
* swarmdo runs headless `claude -p --dangerously-skip-permissions` in its
|
|
6
|
+
* daemon / worker / repair flows; that flag skips the interactive approval
|
|
7
|
+
* prompt but NOT hooks, so a PreToolUse deny is the only remaining guardrail.
|
|
8
|
+
* The denylist is deliberately CONSERVATIVE — it blocks a small set of clearly
|
|
9
|
+
* destructive / irreversible / remote-exec commands and lets everything else
|
|
10
|
+
* through, so a routine `rm -rf ./build`, `rm -rf node_modules`, or a
|
|
11
|
+
* feature-branch force-push is never blocked. Pure + injection-free → fully
|
|
12
|
+
* unit-tested. This is defense-in-depth, not a sandbox: a determined command
|
|
13
|
+
* (indirection through a variable, an obscure tool) can still get through.
|
|
14
|
+
*/
|
|
15
|
+
export interface GuardVerdict {
|
|
16
|
+
block: boolean;
|
|
17
|
+
/** why it was blocked (present only when block === true) */
|
|
18
|
+
reason?: string;
|
|
19
|
+
/** the matched rule id (stable identifier, useful for tests/telemetry) */
|
|
20
|
+
rule?: string;
|
|
21
|
+
}
|
|
22
|
+
interface Rule {
|
|
23
|
+
id: string;
|
|
24
|
+
reason: string;
|
|
25
|
+
test: (c: string) => boolean;
|
|
26
|
+
}
|
|
27
|
+
/** The denylist. Order determines which reason is reported when several match. */
|
|
28
|
+
export declare const GUARD_RULES: Rule[];
|
|
29
|
+
/** Classify a bash command; blocks on the first matching danger rule, else allows. */
|
|
30
|
+
export declare function classifyCommand(command: string): GuardVerdict;
|
|
31
|
+
/**
|
|
32
|
+
* Extract the Bash command from a PreToolUse hook payload (the JSON Claude Code
|
|
33
|
+
* pipes on stdin: `{ "tool_name": "Bash", "tool_input": { "command": "…" } }`).
|
|
34
|
+
* Tolerant — returns '' when absent or unparseable, so the hook simply allows.
|
|
35
|
+
*/
|
|
36
|
+
export declare function extractBashCommand(payload: string): string;
|
|
37
|
+
/** The PreToolUse deny payload Claude Code honors to hard-block a tool call. */
|
|
38
|
+
export declare function denyOutput(reason: string): {
|
|
39
|
+
hookSpecificOutput: {
|
|
40
|
+
hookEventName: 'PreToolUse';
|
|
41
|
+
permissionDecision: 'deny';
|
|
42
|
+
permissionDecisionReason: string;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=command-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-guard.d.ts","sourceRoot":"","sources":["../../../src/hooks-recipe/command-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoBD,UAAU,IAAI;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CAAE;AAE5E,kFAAkF;AAClF,eAAO,MAAM,WAAW,EAAE,IAAI,EAyC7B,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAQ7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG;IAC1C,kBAAkB,EAAE;QAAE,aAAa,EAAE,YAAY,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,wBAAwB,EAAE,MAAM,CAAA;KAAE,CAAC;CACnH,CAQA"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* command-guard.ts — classify a bash command as safe or blockable, for a
|
|
3
|
+
* PreToolUse/Bash hook that emits Claude Code's `permissionDecision: "deny"`.
|
|
4
|
+
*
|
|
5
|
+
* swarmdo runs headless `claude -p --dangerously-skip-permissions` in its
|
|
6
|
+
* daemon / worker / repair flows; that flag skips the interactive approval
|
|
7
|
+
* prompt but NOT hooks, so a PreToolUse deny is the only remaining guardrail.
|
|
8
|
+
* The denylist is deliberately CONSERVATIVE — it blocks a small set of clearly
|
|
9
|
+
* destructive / irreversible / remote-exec commands and lets everything else
|
|
10
|
+
* through, so a routine `rm -rf ./build`, `rm -rf node_modules`, or a
|
|
11
|
+
* feature-branch force-push is never blocked. Pure + injection-free → fully
|
|
12
|
+
* unit-tested. This is defense-in-depth, not a sandbox: a determined command
|
|
13
|
+
* (indirection through a variable, an obscure tool) can still get through.
|
|
14
|
+
*/
|
|
15
|
+
/** `rm` invoked with BOTH a recursive and a force flag (combined `-rf`/`-fr` or separate). */
|
|
16
|
+
function isRecursiveForceRm(c) {
|
|
17
|
+
if (!/\brm\b/.test(c))
|
|
18
|
+
return false;
|
|
19
|
+
const recursive = /(?:^|\s)-[a-z]*r[a-z]*(?=\s|$)/i.test(c) || /(?:^|\s)--recursive\b/.test(c);
|
|
20
|
+
const force = /(?:^|\s)-[a-z]*f[a-z]*(?=\s|$)/i.test(c) || /(?:^|\s)--force\b/.test(c);
|
|
21
|
+
return recursive && force;
|
|
22
|
+
}
|
|
23
|
+
/** Does the command target a root / home / top-level system path (the only rm targets we block)? */
|
|
24
|
+
function hasCriticalTarget(c) {
|
|
25
|
+
if (/--no-preserve-root\b/.test(c))
|
|
26
|
+
return true;
|
|
27
|
+
// a bare `/`, `~`, `$HOME`/`${HOME}` token, optionally with a trailing `/` or `/*` or `*`
|
|
28
|
+
if (/(?:^|\s)(?:\/|~|\$\{?HOME\}?)(?:\/\s|\/$|\/\*|\*|\s|$)/.test(c))
|
|
29
|
+
return true;
|
|
30
|
+
// a top-level system directory
|
|
31
|
+
if (/(?:^|\s)\/(?:etc|usr|bin|sbin|var|lib|lib64|boot|sys|proc|dev|root|opt)(?:\/|\s|\*|$)/.test(c))
|
|
32
|
+
return true;
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
/** The denylist. Order determines which reason is reported when several match. */
|
|
36
|
+
export const GUARD_RULES = [
|
|
37
|
+
{
|
|
38
|
+
id: 'rm-rf-critical',
|
|
39
|
+
reason: 'recursive force-delete of a root, home, or system path (rm -rf /, ~, or --no-preserve-root)',
|
|
40
|
+
test: (c) => isRecursiveForceRm(c) && hasCriticalTarget(c),
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'pipe-to-shell',
|
|
44
|
+
reason: 'piping remote content straight into a shell (curl/wget … | sh) — remote code execution',
|
|
45
|
+
test: (c) => /(?:\bcurl\b|\bwget\b)[^|]*\|\s*(?:sudo\s+)?(?:sh|bash|zsh|dash|ksh|fish)\b/.test(c),
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'force-push-protected',
|
|
49
|
+
reason: 'force-push to a protected branch (main/master) — use --force-with-lease',
|
|
50
|
+
test: (c) => /\bgit\s+push\b/.test(c) && /(?:--force(?!-with-lease)\b|(?:^|\s)-f\b)/.test(c) && /\b(?:main|master)\b/.test(c),
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'chmod-world-writable',
|
|
54
|
+
reason: 'world-writable permissions (chmod 777)',
|
|
55
|
+
test: (c) => /\bchmod\s+(?:-[a-z]+\s+)*(?:0?777|a\+rwx|ugo\+rwx)\b/i.test(c),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'dd-to-device',
|
|
59
|
+
reason: 'dd writing directly to a block device (of=/dev/…) — data-destroying',
|
|
60
|
+
test: (c) => /\bdd\b[^|;&]*\bof=\/dev\/(?:sd|nvme|disk|hd|mmcblk|vd|xvd)/.test(c),
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'mkfs',
|
|
64
|
+
reason: 'formatting a filesystem (mkfs) — data-destroying',
|
|
65
|
+
test: (c) => /\bmkfs(?:\.\w+)?\b/.test(c),
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'redirect-to-device',
|
|
69
|
+
reason: 'redirecting output onto a raw block device (> /dev/sd…) — data-destroying',
|
|
70
|
+
test: (c) => /(?:^|\s)>{1,2}\s*\/dev\/(?:sd|nvme|disk|hd|mmcblk|vd|xvd)/.test(c),
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'fork-bomb',
|
|
74
|
+
reason: 'shell fork bomb',
|
|
75
|
+
test: (c) => /:\(\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;\s*:/.test(c.replace(/\s+/g, ' ')),
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
/** Classify a bash command; blocks on the first matching danger rule, else allows. */
|
|
79
|
+
export function classifyCommand(command) {
|
|
80
|
+
const c = (command ?? '').trim();
|
|
81
|
+
if (!c)
|
|
82
|
+
return { block: false };
|
|
83
|
+
for (const r of GUARD_RULES) {
|
|
84
|
+
// a bad regex must never crash the hook (and thus never wrongly block)
|
|
85
|
+
try {
|
|
86
|
+
if (r.test(c))
|
|
87
|
+
return { block: true, reason: r.reason, rule: r.id };
|
|
88
|
+
}
|
|
89
|
+
catch { /* skip */ }
|
|
90
|
+
}
|
|
91
|
+
return { block: false };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Extract the Bash command from a PreToolUse hook payload (the JSON Claude Code
|
|
95
|
+
* pipes on stdin: `{ "tool_name": "Bash", "tool_input": { "command": "…" } }`).
|
|
96
|
+
* Tolerant — returns '' when absent or unparseable, so the hook simply allows.
|
|
97
|
+
*/
|
|
98
|
+
export function extractBashCommand(payload) {
|
|
99
|
+
if (!payload || !payload.trim())
|
|
100
|
+
return '';
|
|
101
|
+
try {
|
|
102
|
+
const o = JSON.parse(payload);
|
|
103
|
+
const cmd = o?.tool_input?.command ?? o?.command;
|
|
104
|
+
return typeof cmd === 'string' ? cmd : '';
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return '';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** The PreToolUse deny payload Claude Code honors to hard-block a tool call. */
|
|
111
|
+
export function denyOutput(reason) {
|
|
112
|
+
return {
|
|
113
|
+
hookSpecificOutput: {
|
|
114
|
+
hookEventName: 'PreToolUse',
|
|
115
|
+
permissionDecision: 'deny',
|
|
116
|
+
permissionDecisionReason: reason,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=command-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-guard.js","sourceRoot":"","sources":["../../../src/hooks-recipe/command-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../../src/hooks-recipe/recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../../src/hooks-recipe/recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,OAAO,EAAE,UAAU,EAqC/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAG/D;AAED,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAID,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExC,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAanE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;oFACoF;AACpF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,GAAG,WAAW,CAUzE;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAUrI"}
|
|
@@ -37,6 +37,14 @@ export const RECIPES = [
|
|
|
37
37
|
title: 'Surface new cross-session messages each prompt',
|
|
38
38
|
description: 'On every prompt, injects any unread messages other sessions sent to this one (multiplayer swarms) as context, then marks them read — so mail surfaces without polling (UserPromptSubmit hook). Powered by `swarmdo comms inbox --hook`. Opt-in.',
|
|
39
39
|
},
|
|
40
|
+
{
|
|
41
|
+
name: 'command-guard',
|
|
42
|
+
event: 'PreToolUse',
|
|
43
|
+
matcher: 'Bash',
|
|
44
|
+
command: 'swarmdo hooks guard-bash',
|
|
45
|
+
title: 'Block dangerous bash commands before they run',
|
|
46
|
+
description: 'Inspects every Bash tool call and hard-blocks a conservative denylist of destructive commands (rm -rf / , curl|sh, force-push to main, chmod 777, dd to a device, mkfs, fork bombs) via Claude Code’s PreToolUse `permissionDecision: "deny"`. Powered by `swarmdo hooks guard-bash`. Opt-in — the one guardrail that still fires under `--dangerously-skip-permissions`.',
|
|
47
|
+
},
|
|
40
48
|
];
|
|
41
49
|
export function findRecipe(name) {
|
|
42
50
|
const n = (name ?? '').trim().toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../../src/hooks-recipe/recipe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../../src/hooks-recipe/recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAoJpD,yCAAyC;AACzC,eAAO,MAAM,eAAe,UAA2B,CAAC;AAExD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQjH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEhH;AAeD;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAG9B,QAAQ,EAAE,MAAM;IAChB,KAAK,CAAC,EAAE,KAAK;gBAFpB,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKvB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAgED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,CAkBtF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAiB/E;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAU5C;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CA0BvC;;;;;;;;;;AAED,wBAQE"}
|
package/dist/src/mcp-client.js
CHANGED
|
@@ -26,6 +26,8 @@ import { envTools } from './mcp-tools/env-tools.js';
|
|
|
26
26
|
import { licenseTools } from './mcp-tools/license-tools.js';
|
|
27
27
|
import { applyTools } from './mcp-tools/apply-tools.js';
|
|
28
28
|
import { hotspotsTools } from './mcp-tools/hotspots-tools.js';
|
|
29
|
+
import { couplingTools } from './mcp-tools/coupling-tools.js';
|
|
30
|
+
import { ownershipTools } from './mcp-tools/ownership-tools.js';
|
|
29
31
|
import { affectedTools } from './mcp-tools/affected-tools.js';
|
|
30
32
|
import { cyclesTools } from './mcp-tools/cycles-tools.js';
|
|
31
33
|
import { testreportTools } from './mcp-tools/testreport-tools.js';
|
|
@@ -119,6 +121,8 @@ const TOOL_GROUPS = {
|
|
|
119
121
|
license: () => licenseTools,
|
|
120
122
|
apply: () => applyTools,
|
|
121
123
|
hotspots: () => hotspotsTools,
|
|
124
|
+
coupling: () => couplingTools,
|
|
125
|
+
ownership: () => ownershipTools,
|
|
122
126
|
affected: () => affectedTools,
|
|
123
127
|
cycles: () => cyclesTools,
|
|
124
128
|
testreport: () => testreportTools,
|