since-dev 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,147 @@
1
+ Metadata-Version: 2.4
2
+ Name: since-dev
3
+ Version: 0.1.0
4
+ Summary: Find the code in a repository that is about to stop working: retired model IDs, runtimes past end of life, breaking dependency changes. Each with its date, its line and its replacement.
5
+ Author-email: Nabil A <support@since.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://since.dev
8
+ Project-URL: Documentation, https://since.dev/docs#cli
9
+ Project-URL: Source, https://github.com/Since-dev/cli
10
+ Project-URL: Issues, https://github.com/Since-dev/cli/issues
11
+ Keywords: deprecation,end-of-life,breaking-changes,dependencies,ai-models,mcp,cli,continuous-maintenance
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Topic :: Software Development :: Quality Assurance
17
+ Requires-Python: >=3.9
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Dynamic: license-file
21
+
22
+ # since-dev
23
+
24
+ Find the code in a repository that is about to stop working: AI model IDs with a shutdown date, runtimes past end of life, dependencies with security advisories or breaking releases. Every finding comes with its file and line, its date, its replacement and its source.
25
+
26
+ ```bash
27
+ npx since-dev
28
+ ```
29
+
30
+ Run it inside any repository. A public GitHub repository needs no sign-in and no setup.
31
+
32
+ ```
33
+ acme/shop main@4f2c1d9 scanned just now
34
+ 3 with a date 1 undated 214 dependencies and 96 files read
35
+ Read from GitHub (main), not your working tree.
36
+
37
+ 20 days claude-sonnet-4-5-20250929 on Claude API: retirement 2026-11-30
38
+ src/ai/client.ts:14 and 3 more use claude-sonnet-5-5
39
+ https://platform.claude.com/docs/en/about-claude/model-deprecations
40
+
41
+ 31 days gpt-5 on OpenAI API: retirement 2026-12-11
42
+ src/ai/summarize.ts:8 use gpt-5.6-sol
43
+ https://developers.openai.com/api/docs/deprecations
44
+
45
+ passed Node.js 20: end of life 2026-04-30
46
+ .github/workflows/ci.yml use 24
47
+ https://endoflife.date/nodejs
48
+
49
+ Full report https://since.dev/scan/acme/shop?utm_source=cli
50
+ Next npx since-dev init your coding agent checks before it writes
51
+ ```
52
+
53
+ (An example for a made-up repository. The dates are the real ones as of November 10, 2026.)
54
+
55
+ ## Run it
56
+
57
+ | With | Command |
58
+ | --- | --- |
59
+ | Node 18 or newer | `npx since-dev` |
60
+ | uv | `uvx since-dev` |
61
+ | pipx | `pipx run since-dev` |
62
+
63
+ To keep it, `npm install -g since-dev` or `pip install since-dev` gives you the command `since`. The npm and PyPI packages are the same CLI: no dependencies in either, and one set of tests holds both to the same output, character for character.
64
+
65
+ ## Commands
66
+
67
+ | Command | What it does |
68
+ | --- | --- |
69
+ | `since` | Checks the repository you are in. It reads the `origin` remote to know which one. |
70
+ | `since <owner/repo>` | Checks any public GitHub repository. A GitHub URL works too. |
71
+ | `since init` | Sets up your coding agent to check before it writes. See below. |
72
+ | `since calendar` | What ends in the next 30 days: model retirements, runtime end of life, API removals. `--within 90d`, `--provider openai`. |
73
+ | `since changed <package>` | Breaking changes and deprecations of a package. `--since 4.19.2` lists only what changed after that version, `--ecosystem pypi` picks the registry. Needs a key. |
74
+ | `since check` | The same check for CI: exit 1 when a finding fails. See below. |
75
+ | `since login`, `since logout` | Sign in for private repositories, and remove the stored key. |
76
+
77
+ `--all` shows every finding (10 by default), `--json` prints the answer as JSON, `--within 30d` keeps only dates within that many days.
78
+
79
+ Findings are listed with the next deadline first, then dates that have passed, then security advisories with no date, then the ones marked `review`: Since found the name in your code but could not prove the change reaches it.
80
+
81
+ ## Set up your coding agent
82
+
83
+ Coding agents write the model IDs and versions that were current when they were trained. This makes yours check first:
84
+
85
+ ```bash
86
+ npx since-dev init
87
+ ```
88
+
89
+ It writes four files into the repository:
90
+
91
+ | File | For |
92
+ | --- | --- |
93
+ | `.mcp.json` | Claude Code |
94
+ | `.cursor/mcp.json` | Cursor |
95
+ | `.vscode/mcp.json` | VS Code |
96
+ | `AGENTS.md` | A short rule, between two markers, that tells any agent when to check |
97
+
98
+ Commit them and everyone who clones the repository gets the same setup. No key goes in any file: the first tool call opens a sign-in in the browser.
99
+
100
+ It only ever adds its own `since` entry. Other servers in those files stay as they are, a second run changes nothing, and a file it cannot read as plain JSON is left alone with the lines to add by hand. `--dry-run` shows what it would write.
101
+
102
+ ## What it sends
103
+
104
+ - **A public GitHub repository:** only its name. Since reads the default branch from GitHub, so uncommitted work and other branches are not in the answer. It is free: 10 scans a day per address, and a scan is kept for an hour.
105
+ - **A private repository, after `since login`:** if the repository is connected to your Since workspace and your plan includes it, the answer comes from there. Otherwise the CLI sends the manifests it finds in the folder (`package.json`, `requirements*.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Gemfile`, `composer.json`, `pom.xml`, `build.gradle`, `*.csproj`), 10 at most unless you raise `--max-files`. Source files are never sent. Each manifest is one call to the API, which uses credits.
106
+ - `--local` checks the manifests in the folder even when the repository is public, for work you have not pushed.
107
+
108
+ ## In CI
109
+
110
+ ```yaml
111
+ - run: npx since-dev check --fail-on high
112
+ env:
113
+ SINCE_DEV_KEY: ${{ secrets.SINCE_DEV_KEY }}
114
+ ```
115
+
116
+ With a key it checks the manifests of the checkout. Without one it reads the default branch of a public repository from GitHub, and says so.
117
+
118
+ | Exit code | Meaning |
119
+ | --- | --- |
120
+ | 0 | Nothing proven at or above `--fail-on` (`low`, `medium`, `high` by default, `critical`, or `none`). |
121
+ | 1 | At least one finding fails. A finding marked `review` never fails a run. |
122
+ | 2 | Something for you to fix: a refused key, a bad option, no manifests. |
123
+
124
+ If Since cannot be reached, or the free scans for the day are used up, the run passes with a note. An outage on our side never fails your build.
125
+
126
+ On GitHub Actions, [since-dev/check](https://github.com/since-dev/check) does the same with annotations on the files and a table in the run summary.
127
+
128
+ ## Sign in
129
+
130
+ ```bash
131
+ since login
132
+ ```
133
+
134
+ It asks for your email, prints a link, and waits while you approve it in the browser. The key is stored in `~/.config/since/credentials.json`, readable only by you. Setting `SINCE_DEV_KEY` works as well and wins over the stored key. `since logout` removes the stored key.
135
+
136
+ ## Develop
137
+
138
+ ```bash
139
+ node --test test.mjs
140
+ python3 -m unittest test_cli
141
+ ```
142
+
143
+ Each file in `fixtures/` is one run: the arguments, the folder, and the answers the API gives. `expected/` holds what that run prints, requests and writes. Both test suites replay every fixture and compare with the same expected file. After a change to the Node side, `UPDATE_EXPECTED=1 node --test test.mjs` rewrites the expected files: read the diff, then make the Python side match.
144
+
145
+ ## License
146
+
147
+ MIT. The data comes from [Since.dev](https://since.dev): the [calendar](https://since.dev/calendar) of what ends when, and the [API](https://since.dev/docs) behind this CLI.
@@ -0,0 +1,13 @@
1
+ since_dev/__init__.py,sha256=8N89VQRAGxh4qOsv7_OBibgEYo36t85fAcICuWnXMJ0,137
2
+ since_dev/__main__.py,sha256=ygy_wL7zID7kAAR2Gxmaq4ksOW7IR7-KxTUTSglGYME,671
3
+ since_dev/cli.py,sha256=BLZ-1bg1iqWLNmLJYWVuFg5lxXQRf0X3s3fvRcQj0K0,30758
4
+ since_dev/init.py,sha256=KKuqqhOLcSyD5Q2Y3Bda1iFJy8XVwVLzpYCA7vr8pB4,5580
5
+ since_dev/local.py,sha256=26Kq2Pkq3Q1lVSU0aiHpIzYTMDWb63eTE0FRrOf5hQ8,2793
6
+ since_dev/realio.py,sha256=kOkMxXo3ttDD0osBbyCgF5hZr7x9_KwSyvjU3Q7j8oM,4827
7
+ since_dev/render.py,sha256=PJxgN3b5jFTiHvGjbKNGvEy7_nWXedxnPcKeMIHxjvY,13810
8
+ since_dev-0.1.0.dist-info/licenses/LICENSE,sha256=rx-4WZIg7Z-XX0cpugPg4wNEXldnDbgyW5qgzRp6BV8,1066
9
+ since_dev-0.1.0.dist-info/METADATA,sha256=xCnd6x8F-NahutQNAZ-vW8r_Lb_eJcjv9Qr5HgjxwoA,7405
10
+ since_dev-0.1.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
11
+ since_dev-0.1.0.dist-info/entry_points.txt,sha256=aV_PULBtT4EbOk-Svd_WYsIBZYR4He8RshXS1ipkMIo,86
12
+ since_dev-0.1.0.dist-info/top_level.txt,sha256=QAtvCQjp2EnpKQyQwl8bBzuy9N_Z6SRppZgY8rR6uos,10
13
+ since_dev-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ since = since_dev.__main__:main
3
+ since-dev = since_dev.__main__:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Since.dev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ since_dev