{"_id":"@skylence-ai/skyline","_rev":"170-a2eced700c659b85f6f72671e714d281","name":"@skylence-ai/skyline","dist-tags":{"latest":"1.2.5"},"versions":{"1.0.103":{"name":"@skylence-ai/skyline","version":"1.0.103","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.0.103","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"e9bdce23fdbdf2b525591e997b205542d410bcdb","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.0.103.tgz","fileCount":8,"integrity":"sha512-eEVN+Z5/9MDK7WCgljhqErvhcz7lHOh5V5DVoUCOFDZlY8QrUNexT6nRGU1Zc5tai3a0I84H55UnwFpeQPC2cA==","signatures":[{"sig":"MEUCIFu6y10cnNXwK6W/HLHMghH7MBRo7CnDY9JQD5WYEW8RAiEArc+t3mAATSxofvFAAbHKZcydvSQAIa6it+nR+6NfFk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30293},"engines":{"node":">=16"},"gitHead":"73ce9e04fe3203c9cdb5698382e594190c7d5bd5","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-win32-x64":"1.0.103","@skylence-ai/skyline-win32-arm64":"1.0.103","@skylence-ai/skyline-darwin-arm64":"1.0.103"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.0.103_1784781993551_0.45108604567369204","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@skylence-ai/skyline","version":"1.1.0","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.1.0","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"06588cbb6b5dc871a818bc93ba24188357433e1c","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.1.0.tgz","fileCount":8,"integrity":"sha512-dPD96W59ztp8UsiJmz2cP3a8Gamc2HypNNv7sJD1AUGWaZY/iLE3Tmmotti0R3QukW/9ahH4oToXtbxTYgjIyg==","signatures":[{"sig":"MEQCIBtaVz/W8xuL1nKwH9ApmpFvMqlLcABqGLOJ9mQbO4J7AiAX89GkRRjPiXzm1IlfaxDd3w0NlVkoHViSTQIT3ECb3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30340},"engines":{"node":">=16"},"gitHead":"2515ab69fe5655c2bddd6878e96085814416e8c0","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-linux-x64":"1.1.0","@skylence-ai/skyline-win32-x64":"1.1.0","@skylence-ai/skyline-darwin-x64":"1.1.0","@skylence-ai/skyline-linux-arm64":"1.1.0","@skylence-ai/skyline-win32-arm64":"1.1.0","@skylence-ai/skyline-darwin-arm64":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.1.0_1785182732975_0.26478490377314867","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@skylence-ai/skyline","version":"1.2.0","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.2.0","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"7d292c22027292744061363248c3427a67e3fe8b","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.2.0.tgz","fileCount":8,"integrity":"sha512-bFSzkqipN4NhfJVbitJL153irwhlaGVO4C/aYWRh/yBEHopyyW41nRexTy1ciJcisKPsMy7sSlvn1bnot27NVw==","signatures":[{"sig":"MEUCIQC/zpToBAmia004T4PvkZmSxaeBzZkGc0mPATQAdO3uKQIgMNNy/WP0TK0csScFJ+RXsr7Tp4USCCqn4v4a+IbxKMU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30340},"engines":{"node":">=16"},"gitHead":"7b0112a810fca99aa2d8cc398c85e81c5766a9af","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-linux-x64":"1.2.0","@skylence-ai/skyline-win32-x64":"1.2.0","@skylence-ai/skyline-darwin-x64":"1.2.0","@skylence-ai/skyline-linux-arm64":"1.2.0","@skylence-ai/skyline-win32-arm64":"1.2.0","@skylence-ai/skyline-darwin-arm64":"1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.2.0_1785392106594_0.05524843942275881","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@skylence-ai/skyline","version":"1.2.1","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.2.1","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"816326ea51b3bf8237f8e260edbe204bb746c1c2","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.2.1.tgz","fileCount":8,"integrity":"sha512-/Fj1hDL6ttbT1yxuoAnXWR8TdT0q0H2/zlSWkWJY0dV1A1eLLH+r78YiSB5682lubMTuiJpgsGe7g1eMeAbxNg==","signatures":[{"sig":"MEQCIAM6u41sZEyUuEGpZH6Yo0nTm/Up/fwE5OJnU+m7WmNXAiBx+vHPKmb0MEllzxyu4g5LUbI9qjKlNMeYnJLM3Qmb7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30340},"engines":{"node":">=16"},"gitHead":"ef9842bbee0aae987dc77cca30c1361a6addfafb","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-linux-x64":"1.2.1","@skylence-ai/skyline-win32-x64":"1.2.1","@skylence-ai/skyline-darwin-x64":"1.2.1","@skylence-ai/skyline-linux-arm64":"1.2.1","@skylence-ai/skyline-win32-arm64":"1.2.1","@skylence-ai/skyline-darwin-arm64":"1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.2.1_1785457243125_0.35011528949725323","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@skylence-ai/skyline","version":"1.2.2","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.2.2","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"d2eb92017aa93bb9303954ed135eb8bd9304b30e","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.2.2.tgz","fileCount":8,"integrity":"sha512-jRVifOLo5Q5cCVqSh0MOCXubrVV4be0JibxwZKYm/J+zv3qES9wa++AnCxSjrIYyJoRg3uHCF/Yy2ekQ/FbG4A==","signatures":[{"sig":"MEYCIQDOrzjqyRIqxbWat2hdc1GvaSHF/sfDRdWdRFS8ZvQjkAIhAMzw2pKoiI8JvwGO7psy9DWGrYdWEufUBGLH6NnyY56i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30340},"engines":{"node":">=16"},"gitHead":"6026d47629e86cdd24010c70748baab3cd2c3cc2","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-linux-x64":"1.2.2","@skylence-ai/skyline-win32-x64":"1.2.2","@skylence-ai/skyline-darwin-x64":"1.2.2","@skylence-ai/skyline-linux-arm64":"1.2.2","@skylence-ai/skyline-win32-arm64":"1.2.2","@skylence-ai/skyline-darwin-arm64":"1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.2.2_1785525302245_0.5145183938824163","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@skylence-ai/skyline","version":"1.2.3","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.2.3","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"e8f5b2428c7d335071b3b1c769975cbac328d685","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.2.3.tgz","fileCount":8,"integrity":"sha512-yKi68OXTyVzuL/+UuBetGJivQ3ec+LAMp8+Cs5fiJqWlelsXACL8sw5odDVtFwmBB/N6ftTBrgRm4+QfsDb+Qw==","signatures":[{"sig":"MEUCIDdyGQeVHmeYczrFXEHXqe2EOLknXH4RT98FIRW1MQEzAiEAyidrtvP1OA0mZoSvYDnFLuqflY2xZ4lbvvMeGNHMxBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30340},"engines":{"node":">=16"},"gitHead":"2577275add396b8bfaf549286bad815377bda924","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-linux-x64":"1.2.3","@skylence-ai/skyline-win32-x64":"1.2.3","@skylence-ai/skyline-darwin-x64":"1.2.3","@skylence-ai/skyline-linux-arm64":"1.2.3","@skylence-ai/skyline-win32-arm64":"1.2.3","@skylence-ai/skyline-darwin-arm64":"1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.2.3_1785550717728_0.005737733101910836","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@skylence-ai/skyline","version":"1.2.4","keywords":["mcp","editor","hash","search","ast-grep","cli"],"license":"SEE LICENSE IN LICENSE.md","_id":"@skylence-ai/skyline@1.2.4","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"homepage":"https://github.com/skylence-be/skyline#readme","bugs":{"url":"https://github.com/skylence-be/skyline/issues"},"bin":{"skyline":"bin.js","skylore":"skylore.js","skyrift":"skyrift.js"},"dist":{"shasum":"8395fd350e9545b0ec7b9f9713055e750099415a","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.2.4.tgz","fileCount":8,"integrity":"sha512-xZp+KxdLnhnC6fEowEIFKS+P+kdtf48aMWmKlPGrIuFnXsdXVB/XOBcOuSnawYVk01pT/DCn0o/F/NdS2x5A1g==","signatures":[{"sig":"MEQCICbHx9Sn5mbn0mibt6Mz3DjPHK3CYuR32gTiZRPOYk23AiBNhay7zJ9uLbPkXxsI05+sfVHM6xuy0HYP6cVC+eqi6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30340},"engines":{"node":">=16"},"gitHead":"19e498a8b8d9500d0631605501dde2199d0bcfda","scripts":{"postinstall":"node postinstall.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e1a0e03-ddfd-4980-95a3-1f987190a05a"}},"repository":{"url":"git+https://github.com/skylence-be/skyline.git","type":"git"},"_npmVersion":"11.15.0","description":"Content-hash line editor — CLI and MCP server","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"preferUnplugged":true,"optionalDependencies":{"@skylence-ai/skyline-linux-x64":"1.2.4","@skylence-ai/skyline-win32-x64":"1.2.4","@skylence-ai/skyline-darwin-x64":"1.2.4","@skylence-ai/skyline-linux-arm64":"1.2.4","@skylence-ai/skyline-win32-arm64":"1.2.4","@skylence-ai/skyline-darwin-arm64":"1.2.4"},"_npmOperationalInternal":{"tmp":"tmp/skyline_1.2.4_1785924189544_0.20521898854927478","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@skylence-ai/skyline","version":"1.2.5","description":"Content-hash line editor — CLI and MCP server","license":"SEE LICENSE IN LICENSE.md","repository":{"type":"git","url":"git+https://github.com/skylence-org/skyline.git"},"bugs":{"url":"https://github.com/skylence-org/skyline/issues"},"homepage":"https://github.com/skylence-org/skyline#readme","keywords":["mcp","editor","hash","search","ast-grep","cli"],"engines":{"node":">=16"},"preferUnplugged":true,"scripts":{"postinstall":"node postinstall.js"},"bin":{"skyline":"bin.js","skyrift":"skyrift.js","skylore":"skylore.js"},"optionalDependencies":{"@skylence-ai/skyline-darwin-arm64":"1.2.5","@skylence-ai/skyline-darwin-x64":"1.2.5","@skylence-ai/skyline-linux-arm64":"1.2.5","@skylence-ai/skyline-linux-x64":"1.2.5","@skylence-ai/skyline-win32-x64":"1.2.5","@skylence-ai/skyline-win32-arm64":"1.2.5"},"gitHead":"84256dc4a5d01b9736871ec74a5261b7a8197a95","_id":"@skylence-ai/skyline@1.2.5","_nodeVersion":"22.23.2","_npmVersion":"11.15.0","dist":{"integrity":"sha512-qxh25xKLKZrLyqr5u6ztIFYyfY5q5gh9tTzLXnXHUMIe+x+qLkLtyTyX4rGcWwloXjBgwDHvjgpMYCwYxOiB1Q==","shasum":"0b35976e7f4938eb64f53f9eca0fc1612698e26e","tarball":"https://registry.npmjs.org/@skylence-ai/skyline/-/skyline-1.2.5.tgz","fileCount":8,"unpackedSize":30354,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCtuFTnID2F93BkFKXMGjVveFQPu+SuJBMO/0aDQ8rGewIhAKgbfJNKkWK0Gv4hbPHEcRGpIQH2eE4BXARNcq6Yk62o"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a8d71ffb-6083-4733-9ebe-50efd72d2ebc"}},"directories":{},"maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/skyline_1.2.5_1786821969051_0.9038734364783019"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-14T01:00:35.948Z","modified":"2026-08-15T19:26:09.387Z","1.0.0":"2026-06-03T07:33:10.096Z","1.0.1":"2026-06-03T10:32:59.296Z","1.0.2":"2026-06-03T11:22:26.757Z","1.0.3":"2026-06-03T12:53:20.634Z","1.0.4":"2026-06-03T13:13:41.404Z","1.0.5":"2026-06-03T14:16:25.823Z","1.0.6":"2026-06-03T15:00:31.024Z","1.0.7":"2026-06-03T19:06:33.312Z","1.0.8":"2026-06-03T22:07:12.026Z","1.0.9":"2026-06-03T23:34:34.352Z","1.0.10":"2026-06-04T01:12:44.440Z","1.0.11":"2026-06-04T07:51:38.894Z","1.0.13":"2026-06-04T12:09:31.591Z","1.0.14":"2026-06-04T13:49:04.509Z","1.0.15":"2026-06-04T15:23:28.984Z","1.0.16":"2026-06-04T17:29:36.528Z","1.0.17":"2026-06-04T19:27:21.896Z","1.0.18":"2026-06-06T00:00:46.265Z","1.0.19":"2026-06-06T17:05:52.702Z","1.0.31":"2026-06-14T01:00:36.194Z","1.0.32":"2026-06-15T13:26:26.787Z","1.0.33":"2026-06-15T22:15:24.645Z","1.0.34":"2026-06-16T07:05:10.126Z","1.0.35":"2026-06-16T07:45:42.582Z","1.0.36":"2026-06-16T09:01:18.302Z","1.0.37":"2026-06-16T09:27:44.815Z","1.0.38":"2026-06-16T11:52:35.176Z","1.0.39":"2026-06-17T20:31:49.402Z","1.0.40":"2026-06-18T07:30:15.655Z","1.0.41":"2026-06-19T19:57:40.660Z","1.0.42":"2026-06-22T22:24:52.434Z","1.0.43":"2026-06-23T00:59:31.686Z","1.0.44":"2026-06-24T20:51:02.553Z","1.0.45":"2026-06-25T19:43:59.296Z","1.0.46":"2026-06-26T06:30:26.084Z","1.0.47":"2026-06-26T12:54:31.731Z","1.0.48":"2026-06-28T20:07:09.655Z","1.0.49":"2026-07-01T08:32:01.395Z","1.0.50":"2026-07-01T12:12:47.957Z","1.0.51":"2026-07-01T15:00:55.692Z","1.0.52":"2026-07-01T15:59:48.238Z","1.0.53":"2026-07-01T21:26:23.341Z","1.0.54":"2026-07-03T17:16:15.154Z","1.0.55":"2026-07-04T12:02:04.118Z","1.0.56":"2026-07-04T20:04:07.149Z","1.0.57":"2026-07-09T00:25:43.837Z","1.0.58":"2026-07-09T01:50:20.046Z","1.0.59":"2026-07-09T04:35:56.367Z","1.0.60":"2026-07-09T07:41:22.673Z","1.0.61":"2026-07-10T07:27:42.646Z","1.0.62":"2026-07-10T16:53:00.738Z","1.0.63":"2026-07-10T23:02:19.039Z","1.0.64":"2026-07-11T10:44:23.593Z","1.0.66":"2026-07-11T19:09:00.637Z","1.0.67":"2026-07-11T22:38:22.305Z","1.0.68":"2026-07-12T01:33:49.102Z","1.0.69":"2026-07-12T08:19:18.263Z","1.0.70":"2026-07-12T09:38:32.093Z","1.0.71":"2026-07-12T10:42:19.727Z","1.0.72":"2026-07-12T21:53:38.229Z","1.0.73":"2026-07-12T23:01:33.175Z","1.0.74":"2026-07-13T12:35:47.639Z","1.0.75":"2026-07-13T14:00:02.064Z","1.0.76":"2026-07-14T05:17:01.435Z","1.0.77":"2026-07-14T22:20:25.827Z","1.0.78":"2026-07-15T09:34:39.175Z","1.0.79":"2026-07-16T09:04:49.865Z","1.0.80":"2026-07-16T21:02:34.332Z","1.0.81":"2026-07-16T21:21:11.495Z","1.0.82":"2026-07-19T00:11:01.573Z","1.0.83":"2026-07-19T22:59:17.271Z","1.0.84":"2026-07-20T02:11:15.869Z","1.0.85":"2026-07-20T09:25:06.654Z","1.0.86":"2026-07-20T09:45:20.991Z","1.0.87":"2026-07-20T10:09:49.938Z","1.0.88":"2026-07-20T12:32:49.678Z","1.0.89":"2026-07-20T12:54:21.532Z","1.0.90":"2026-07-20T14:19:45.891Z","1.0.91":"2026-07-20T17:46:58.927Z","1.0.92":"2026-07-20T19:42:10.079Z","1.0.93":"2026-07-21T00:12:28.446Z","1.0.94":"2026-07-21T00:36:46.630Z","1.0.95":"2026-07-21T08:53:16.764Z","1.0.96":"2026-07-21T11:37:10.680Z","1.0.97":"2026-07-21T14:56:13.064Z","1.0.98":"2026-07-21T18:36:35.092Z","1.0.99":"2026-07-21T19:00:06.245Z","1.0.100":"2026-07-21T19:58:28.390Z","1.0.101":"2026-07-22T05:10:38.913Z","1.0.102":"2026-07-22T07:50:21.501Z","1.0.103":"2026-07-23T04:46:33.685Z","1.1.0":"2026-07-27T20:05:33.149Z","1.2.0":"2026-07-30T06:15:06.790Z","1.2.1":"2026-07-31T00:20:43.288Z","1.2.2":"2026-07-31T19:15:02.417Z","1.2.3":"2026-08-01T02:18:37.880Z","1.2.4":"2026-08-05T10:03:09.676Z","1.2.5":"2026-08-15T19:26:09.199Z"},"bugs":{"url":"https://github.com/skylence-org/skyline/issues"},"license":"SEE LICENSE IN LICENSE.md","homepage":"https://github.com/skylence-org/skyline#readme","keywords":["mcp","editor","hash","search","ast-grep","cli"],"repository":{"type":"git","url":"git+https://github.com/skylence-org/skyline.git"},"description":"Content-hash line editor — CLI and MCP server","maintainers":[{"name":"jonasvanderhaegen","email":"jonasvanderh+npmjs@gmail.com"}],"readme":"# skyline\n\n> **Private beta — activation required.** skyline is gated: it only runs after you unlock it with an activation key (`skyline license unlock '<activation-key>'`).\n\nskyline is a search-and-edit toolkit that makes AI coding assistants both safer\nand sharper on your codebase. Every edit is pinned to a content fingerprint and\nrefused if the file moved since it was read, so an assistant never silently\noverwrites your work. Search and refactoring read code structure, not raw text,\nand navigation reaches into your framework and vendor dependencies.\n\nIt also indexes your repository's own code into a compact, compressed symbol\npack, so your assistant can navigate your own classes and functions without\nstanding up a heavyweight external graph.\n\nThis is the launcher package. The `@skylence-ai/skyline-<platform>` packages are\ninternal optional dependencies that carry the prebuilt binaries; install this one\nand npm picks the right platform for you.\n\n---\n\n## Quickstart (60 seconds)\n\n```bash\nnpm install -g @skylence-ai/skyline   # prebuilt binary, no compile step\nskyline license unlock '<activation-key>'     # private beta: validates your key\nskyline license accept                # read + accept the terms (tools gate on this)\nskyline setup                         # daemon + agent plugins, idempotent\n```\n\nYour agent is wired. `skyline daemon status` should show the daemon `running` on\nport 7333; start a new agent session and the skyline tools are there. Everything\nbelow is detail you need only when something is unusual.\n\n## Requirements\n\n| | |\n|---|---|\n| **Platforms** | Prebuilt in this beta: macOS arm64, Windows x64, Windows arm64. Other platforms are not published yet |\n| **Node.js** | 16 or newer (runs the npm launcher and installer) |\n| **Activation key** | Required during the private beta |\n| **git** | Recommended. Semantic freshness is commit-anchored, so a repository is what lets skyline prove its index matches the code you are on |\n| **PHP** | Optional. Search and structural editing are language-agnostic; the semantic and dependency intelligence currently targets PHP |\n\n---\n\n## What problems does this solve?\n\n- **Blind to dependencies.** Plain text search, and most editors, cannot see into\n  framework or vendor code, so your agent guesses at Filament, Laravel, or\n  Symfony APIs. skyline indexes the `vendor/` you have installed, and when there\n  is no `vendor/` it fetches prebuilt symbol packs matched to the versions in\n  your `composer.lock` (same `major.minor`, highest available patch). Either\n  way, definition, references, and hover resolve into that code.\n- **Silent overwrites.** If a file changed after the assistant read it (you saved, a\n  formatter ran), text-matching edits quietly destroy work. skyline fingerprints every\n  read and refuses stale edits.\n- **Text-blind search.** Find-and-replace renames hit comments and strings. skyline\n  rewrites by structure: real calls change, comments stay.\n- **Token bloat.** Read-then-edit costs grow with file size; search returns dumps.\n  skyline replies stay small: ~60-token edits, one-line counts, per-file rewrite\n  summaries. Measured against the built-in read/grep/edit equivalents: **about\n  40% fewer tokens** on search-then-edit, because the search result already\n  carries the edit anchor and no read happens in between; **about 64% cheaper**\n  on a directory-wide structural rewrite; **about 33% cheaper** per hunk when\n  several edits to one file are stacked into a single call.\n- **Cold starts.** The daemon keeps one warm process (and warm language servers) for\n  every client.\n\n## Why it is better\n\nThese come from running skyline against real repositories and measuring with its own tools.\n\n- **It works without being taught.** In a blind run, a frontier agent with no\n  prior skyline knowledge and no coaching took a Laravel app's test suite to 46\n  green (13 tests written by the agent) in about 8 minutes.\n- **Framework-aware, with or without `vendor/`.** With dependencies installed,\n  go-to-definition resolves into the exact code on disk. On a Laravel and Filament\n  project with *no* local `vendor/`, it still resolved straight into the\n  framework's own source, from prebuilt symbol packs matched to the versions in\n  `composer.lock`.\n- **Safe edits, proven.** When a file changed between read and write, skyline refused the edit\n  rather than overwriting it. A plain string-matching editor has no such guard.\n- **Refactors that respect code.** Rewriting a Go call changed 18 of 18 real call sites and\n  left an identical word inside a comment untouched. A `sed` find-and-replace would have\n  corrupted that comment.\n- **No search penalty.** A controlled query returned the same 66 matches as ripgrep, because\n  skyline uses the same engine and gitignore-aware walk.\n- **No startup tax.** The warm daemon answers in 10 to 40 ms with no per-session startup.\n\n---\n\n## Install\n\nThe recommended setup is a small always-on background service (a daemon) that your AI client\ntalks to. Start it once and every tool call is fast.\n\n<details>\n<summary>Why a daemon instead of a per-call binary?</summary>\n\n- No cold starts: the warm daemon answers a full `tools/list` round-trip in\n  **10 to 40 ms** — no per-session startup.\n- Language servers stay warm: the one-time cold index on a ~224k-line workspace\n  took **95 s**; warm calls are **sub-second**. With a daemon that price is paid\n  once per workspace, not once per session.\n- One process for every client: Claude Code, other MCP clients, and scripts all\n  share the same warm state, one audit stream, and one bench stream.\n\n</details>\n\n### 1. Install (npm — prebuilt binary)\n\n```bash\nnpm install -g @skylence-ai/skyline\n```\n\nPuts `skyline`, `skyrift`, and `skylore` on your PATH via the matching\n`@skylence-ai/skyline-<platform>` optional dependency (all three CLIs ship in\nthat platform package), with no native installer or compile step. Prebuilt\ntargets in this beta: macOS arm64, Windows x64, and Windows arm64.\n\n### 2. Activate (private beta)\n\nRelease binaries are locked on first run and will not serve any tools until you\nactivate them with the beta key issued with your download; access is\ninvite-only, so please do not request a key at this time. Activation only\nvalidates your key. Accepting the\n[license terms](https://github.com/skylence-org/skyline/blob/main/LICENSE) is its\nown step, and skyline's tools stay gated until it happens:\n`skyline license accept` shows the terms and asks for your assent (scripts can\npass `--yes`).\n\n```bash\nskyline license unlock '<activation-key>'\n```\n\n### 3. Bootstrap the daemon and plugins\n\n```bash\nskyline setup\n```\n\n`skyline setup` is the idempotent, cross-package-manager setup path. It installs\nthe shared HTTP daemon as a supervised autostart service on port 7333 and\nbest-effort installs the Skyline marketplace plugins for agent CLIs already on\nPATH. Re-run with `skyline setup --force` after changing agent installs or PATH.\n\nnpm may run this for you as a best-effort postinstall hook, but modern package\nmanagers can block lifecycle scripts. If in doubt, run `skyline setup` once.\n\nCheck it is up with `skyline daemon status` (the port should read `running`).\nTo remove the setup-installed daemon, optional plugins, package-manager install,\nskyline-owned dispatchers, and any legacy Skyline agent wiring, run `skyline uninstall`.\n\n<details>\n<summary>Troubleshooting</summary>\n\n- **`git config url.<host>.insteadOf` SSH rewrites can break plugin installs.** A\n  global git setting that rewrites `https://github.com/` to SSH (common in\n  corporate setups and dotfiles) can stop the Claude plugin marketplace from\n  cloning skyline's public plugin repo over HTTPS. It shows up from\n  `claude plugin marketplace add skylence-org/skylence-plugins`, and also from\n  browsing and installing the `skylence-plugins` marketplace inside a Claude\n  terminal session (and therefore from `skyline setup`, which drives the same\n  install). Seen failing this way on a colleague's macOS machine. `skyline\n  doctor` warns when it detects an `insteadOf` rewrite that would break public\n  clones; unset or scope that rewrite if the clone fails.\n- **`skyline setup` is for the default, single-account setup.** It installs the\n  Skyline marketplace plugin for the agent CLIs it finds on PATH. It is not a\n  customization tool: if you run multiple Claude accounts via different shell\n  aliases, `skyline setup` will not wire each one. In that case add the\n  marketplace and plugin manually to every Claude account and to its individual\n  user-scope `CLAUDE.md`, instead of relying on `skyline setup`.\n\n</details>\n\n---\n\n## Tools\n\nskyline's main job is the MCP server your agent talks to, installed by `skyline setup` and used automatically. The commands below are the ones you run yourself, for setup and management:\n\n| Command | What it does |\n|---------|--------------|\n| `skyline setup` | Install the daemon and agent plugins (idempotent; re-run with `--force`) |\n| `skyline license unlock '<activation-key>'` | Activate a locked beta build |\n| `skyline daemon status` | Check the daemon (`start` / `stop` / `restart` also available) |\n| `skyline daemon install` | Start the daemon automatically on every boot |\n| `skyline doctor` | Health check |\n| `skyline version` | Version and tool-manifest digest |\n| `skyline obs audit` | Read the mutation-audit stream (every edit your agent made) |\n| `skyline obs devlog` | Read the diagnostic devlog stream |\n| `skyline obs bench` | Read the timing (bench) stream |\n| `skyline obs access` | Read the access-log stream |\n| `skyline uninstall` | Remove the daemon, plugins, and all wiring |\n\n### What your agent gets (MCP tools)\n\nThe commands above are yours to run. The tools below your agent calls\nautomatically once `skyline setup` has wired it up. The full surface is\ndocumented in the in-tool guide (`skyline://guide`), which the plugin makes your\nagent read before its first edit; the PHP code-intelligence headline:\n\n| Tool | What it answers |\n|------|-----------------|\n| `symbol_card` | One call for a symbol: declaration, resolution trace across same-named candidates, callers, and tests |\n| `impact` | Upstream blast radius by symbol NAME to a bounded depth; every hop tagged `exact` or `name_only`, so a name collision never inflates the result silently |\n| `unreferenced` | Deletion-safety for a class NAME: code references plus Laravel convention surfaces (policies, observers, container bindings, Blade/Livewire), naming the surfaces it did not check so a negative stays honest |\n| `diagnostics` | Undefined class, method, and function checks plus wrong-argument-count warnings |\n| `rename_symbol` | Conservative rename; on PHP it refuses, with the exact-versus-uncertain match counts, rather than risk a wrong-receiver edit |\n\n`impact` and `unreferenced` are the newest additions: they\ncollapse an iterated call-hierarchy walk and a manual deletion audit into one\ncall each.\n\n### Memory that outlives the session\n\nskyline ships an operator-wide memory bank, skylore, as two more MCP tools.\n`lore_mark` keeps a durable decision, preference, or gotcha along with\nthe reasoning and the alternative it beat. `lore_recall` gets it back:\nBM25-ranked over the whole bank, scoped by repo, branch, and project, with every\nhit citing its provenance and the commit it was anchored to.\n\nRecall is a database query, not a model call. It costs no tokens and returns the\nsame answer every time, so the guide gives your agent a simple rule: before\nre-deriving why something is done this way, or whether you already tried X, or\nwhat broke last time, recall first. What a parser can re-derive stays in the\ncode; what lives in nobody's file goes in the bank.\n\n### Observability you can replay\n\nEvery mutation your agent makes lands in an append-only audit stream. `skyline\naudit` replays every edit, create, delete, and structural rewrite it performed,\nin order, with the file it touched and the fingerprint it was pinned to. For a\ntool that lets a model write to your repository, that is the difference between\ntrusting a session and auditing it.\n\nThree streams sit beside it: `devlog` for diagnostics and panics, `bench` for\nper-operation timing and token I/O, `access` for every MCP request (tool,\nclient, duration, status, result size). Audit and devlog are on by default\nbecause a daemon with zero diagnostics once cost us a multi-hour blind\nregression. Bench and access carry per-request cost and stay opt-in; a disabled\nstream returns to the zero-cost baseline.\n\n### When something is missing, it tells you\n\nDegraded state is reported, never papered over. When the semantic layer is not\ntrustworthy, `lsp_warm` and `diagnostics` name the actual blocker\nand the one action that clears it:\n\n```text\nsemantic layer not trustworthy (workspace has no git: commit-anchored freshness\ncannot be verified); gate on ready_semantic, git init then re-warm, or accept\ndegraded semantics\n\nsemantic layer not trustworthy (local vendor index still building: the\nphp-server is indexing this workspace's vendor/, so vendor symbols do not\nresolve yet); gate on ready_semantic, retry shortly …\n\nsemantic layer not trustworthy (project layer stale); gate on ready_semantic,\nre-warm lsp_warm on a tracked file after HEAD moves to rebuild the\nproject layer fresh\n```\n\nThe hints are state-selected: skyline will not tell you to re-warm after HEAD\nmoves in a workspace that has no HEAD, and when re-warming genuinely cannot fix\nthe problem it says so instead of sending your agent in circles.\n\n---\n\n### Language support\n\nThis beta focuses on **PHP**. The core search and structural-edit tools\n(`grep`, `sgrep`, `srewrite`, `read`/`edit`, `test`) are language-agnostic; the\nsemantic navigation and dependency intelligence currently target PHP.\n\n**Dependencies: local first, packs as the fallback.** When your project has a\nlocal `vendor/` (the normal case after `composer install`), that is the primary\npath: skyline's bundled PHP server indexes your installed dependencies directly,\nand acknowledges readiness through `deps_pack_state` in the warm report, so\nnavigation resolves into the exact code on your disk. When there is no `vendor/`,\nskyline resolves your `composer.lock` from prebuilt symbol packs on the\ndependency channel instead. Each locked package is matched to a pack with the\nsame `major.minor` (highest available patch) and mounted automatically, and\nskyline reports any locked version it could not resolve. Definition, references,\nand hover reach framework and vendor code either way, so a checkout with no\n`vendor/` install is a first-class starting point rather than a degraded one.\n\n**Warming a workspace.** Warm once at the start of a session and gate on\n`ready_semantic`, not `ready`: legacy `ready` only means the warm call completed\nwithout timing out. `ready_semantic` is true when the project layer is fresh and\nthe dependency layer has acked; `ready_structural` covers navigation and is\nusually true well before it. The report carries `project_layer_state` and\n`deps_pack_state` so your agent can see which leg it is waiting on, plus an\nactionable hint whenever `ready_semantic` is false. Re-warming is cheap and is\nthe right move for a stale project layer after HEAD moves, or for a dependency\nindex that was still building; when re-warming will not help, the hint says so.\n\n**Version control.** Semantic freshness is commit-anchored: skyline verifies its\nindex against the commit you are on. In a git repository that check can pass and\n`ready_semantic` goes true. Without version control there is nothing to anchor\nto, so the project layer reports `unverified` and `ready_semantic` stays false.\nSearch, structural rewriting, and hash-guarded edits are unaffected, and\nstructural navigation keeps working; skyline reports the degradation honestly\nrather than serving semantics it cannot prove. `git init` is the one step that\nchanges it.\n\n---\n\n## Why the marketplace plugin\n\n`skyline setup` installs a Claude marketplace plugin, and it is not optional\npolish. In testing, a frontier model handed the raw MCP server would reason its\nway out of reading the skyline guide first, then make avoidable mistakes: reach\nfor `Write`/`Edit`/`Bash` on files it had not fingerprinted, miss the\nstructural search and edit tools, and fall back to plain text.\n\nThe plugin fixes that with hooks. It guardrails the agent away from the built-in\nsystem tools (`Write`, `Edit`, `Bash`) and routes it to the skyline MCP tools\ninstead, and it requires the agent to read the guide before it can use them. So\nthe model does it the right way on the first try, rather than learning the hard\nway mid-edit.\n\n---\n\n## Issues and feedback\n\nBug reports, feature suggestions, and questions all go to the public tracker:\n[github.com/skylence-org/skyline/issues](https://github.com/skylence-org/skyline/issues).\nThat repository is skyline's public home; the implementation itself is developed\nin a private repository, so the tracker is the front door for everything.\n\n## License\n\nProprietary. Free to use during the invited beta; activating the software means\naccepting the terms. Full text:\nhttps://github.com/skylence-org/skyline/blob/main/LICENSE\n\n<!-- synced from README blob 658eaecd10ebf07dcbcfb4b5e589b81f5a2e4a84 -->\n","readmeFilename":"README.md"}