diff --git a/website/content/en/developer/contributing.md b/website/content/en/developer/contributing.md index 22b4d15..3b9464a 100644 --- a/website/content/en/developer/contributing.md +++ b/website/content/en/developer/contributing.md @@ -15,6 +15,17 @@ repository; it does not need to become a Core contribution. > [!NOTE] There is no copied, universal setup or contribution procedure. Toolchains and commands > belong to the repository that runs and verifies them. +## Find a useful change + +Use the organization searches for +[`good first issue`](https://github.com/search?q=org%3AInKCre+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&type=issues) +and +[`help wanted`](https://github.com/search?q=org%3AInKCre+is%3Aissue+is%3Aopen+label%3A%22help+wanted%22&type=issues). +An empty result means no task has currently been qualified for that label; it is not an invitation +to guess at an untracked change. For another proposal, open an issue in the owning repository before +a large implementation and describe the user outcome, affected area, and how it could be verified. +Report suspected vulnerabilities privately through that repository's `SECURITY.md` instead. + ## Choose the change owner | Change | Start here | @@ -34,18 +45,50 @@ instead of making one repository silently own the others. After choosing an owner: -1. Read its root `README.md` and `AGENTS.md`, plus `CONTRIBUTING.md` when present. +1. Fork the repository, branch from its current `main`, and read its root `README.md`, `AGENTS.md`, + and `CONTRIBUTING.md` when present. 2. Use the runtime and package manager pinned by that repository. 3. Run its own formatter, checks, and tests. -4. Follow its pull-request and review requirements. +4. Push the branch to your fork and open a pull request against the owning repository. +5. Follow its pull-request and review requirements until checks pass and conversations are resolved. Useful entry points: - [`impl-py` contributing guide](https://github.com/InKCre/impl-py/blob/main/CONTRIBUTING.md) -- [`impl-ts` README](https://github.com/InKCre/impl-ts#readme) +- [`impl-ts` contributing guide](https://github.com/InKCre/impl-ts/blob/main/CONTRIBUTING.md) - [`ui` README](https://github.com/InKCre/ui#readme) - [`docs` README](https://github.com/InKCre/docs#readme) +### Setup and access boundaries + +| Repository | First setup gate | Complete local evidence | +| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `impl-py` | Python and PDM versions checked by `pdm run doctor`; integration suites need a disposable PostgreSQL runtime | `pdm run check`, plus the repository-local integration or acceptance command for changed behavior | +| `impl-ts` | Use the pinned Node/pnpm toolchain. Locked UI dependencies download from public Release assets; no organization package token is required | `pnpm check`, plus the relevant browser E2E command | +| `ui` | Install from the repository root; generated tokens, metadata, and skills must be current | `pnpm check`, plus visual or interaction review for affected Stories or a real consumer | +| `docs` | Use the website toolchain pinned in `website/` | The [website contract](https://github.com/InKCre/docs/blob/main/website/README.md), including link and build checks | + +The [`impl-ts` contribution guide](https://github.com/InKCre/impl-ts/blob/main/CONTRIBUTING.md) owns +the verified public dependency setup and future version adoption. If a locked public URL fails, +report its version and redacted response instead of adding credentials or switching back to a +private package source. Keep UI dependency values as semver; the repository's exact-version +overrides select the public tarballs without changing Module Federation's version contract. + +## Submit a reviewable change + +Use `type(scope): summary` for commit subjects and pull-request titles. The repository guide owns +its stable scopes; choose the primary implementation area, not every package touched. A +cross-project change may use a repository-level scope such as `extensions`, while the pull-request +body and the repository's fragment or Changeset mechanism list every affected release project +precisely. + +Complete the pull-request template with the intended outcome, actual verification evidence, risk and +rollback, delivery effects, and any stacked pull requests. External fork workflows require +maintainer approval before read-only CI starts and receive no preview or production credentials. A +maintainer may therefore need to approve CI or perform a trusted preview; do not work around that +boundary by adding credentials to the branch. Passing review makes a change eligible to merge, but +canonical publication and production delivery occur only from protected `main`. + ## Changes to shared truth The `docs` repository is the Hub for durable product and cross-unit truth used across InKCre diff --git a/website/content/en/developer/ecosystem/index.md b/website/content/en/developer/ecosystem/index.md index dd4eb23..e1d4e0d 100644 --- a/website/content/en/developer/ecosystem/index.md +++ b/website/content/en/developer/ecosystem/index.md @@ -23,9 +23,9 @@ another tool. An Extension packages one or more capabilities for a compatible Ho integration needs all three or a custom browser interface. The Python path uses a native wheel, the `inkcre.core.extensions` entry point, and an exact Registry -Release. Core installs that release and a Peer records its enabled intent. An online Host then -activates the Extension best-effort; users do not maintain a second durable running flag. Browser -code is a separate distribution, not automatically produced by a Python wheel. +Release. A Peer selects its own Distribution/version and records its enabled intent. An online Host +then activates the Extension best-effort; users do not maintain a second durable running flag. +Browser code is a separate distribution, not automatically produced by a Python wheel. The Source tutorial targets **Core Host SDK 0.3.x**. Its Python programming interfaces currently import Core modules; they are not an independent, universally stable Source SDK. The Extension diff --git a/website/content/en/developer/ecosystem/source-extension.md b/website/content/en/developer/ecosystem/source-extension.md index ad0e93b..dbd6063 100644 --- a/website/content/en/developer/ecosystem/source-extension.md +++ b/website/content/en/developer/ecosystem/source-extension.md @@ -79,9 +79,11 @@ namespaces = true ``` The product coordinate (`yourname/notebook`), Python project name, and module path serve different -purposes. The entry-point name and Extension's `ext_id` must agree. Declare direct dependencies; -Core checks them against its existing environment and will not fetch arbitrary missing dependencies -while enabling your Extension. A new dependency may require a custom Core image. +purposes. The entry-point name and Extension's `ext_id` must agree. Declare direct dependencies. +When Core installs the wheel, its Python package installer resolves those dependencies from the +deployment's configured package indexes. Installation can therefore change the shared Core Python +environment or fail on an unavailable or incompatible dependency; test the finalized wheel against +the exact Host environment instead of assuming dependency isolation. Save `extensions/notebook/__init__.py`: @@ -152,7 +154,7 @@ class Source(SourceBase[SourceConfig], config_cls=SourceConfig): await uow.graph.relations.fetchsert( RelationModel(from_=anchor.id, to_=block.id, content="snapshot") ) - # ponytail: remembers one snapshot; use native-ID reconciliation for a multi-item feed. + # shortcut: one snapshot only; use native-ID reconciliation for a multi-item feed. source.state = {**(source.state or {}), "last_snapshot": snapshot} await uow.sources.save(source) ``` @@ -163,11 +165,14 @@ advanced if persistence fails. URL participates in snapshot identity so changing not reuse the old endpoint's state. The built-in text Resolver makes the saved text readable and indexable. -This is a snapshot collector: a changed response creates another snapshot; returning to older text -can create another one too. It neither reconciles a whole remote collection nor deletes earlier -snapshots. The endpoint is selected by the user, not exposed as a public URL-fetching API. For a -real service, add its authentication, bounded response handling, native identity, pagination, rate -limits, and incremental state according to that service's contract. +This is a snapshot collector: a changed text creates another snapshot. Text identity is +content-based, so A→B→A reuses the original A Block and relation instead of creating a third one. +Changing only the response `id` updates Source state but does not add another graph snapshot because +this deliberately small example does not model native identity. It neither reconciles a whole remote +collection nor deletes earlier snapshots. The endpoint is selected by the user, not exposed as a +public URL-fetching API. For a real service, add its authentication, bounded response handling, +native identity, pagination, rate limits, and incremental state according to that service's +contract. Source configuration is long-lived input, Source state remembers progress, and Job parameters/state belong to one execution. Use `collect_config_cls` for typed per-run options and @@ -182,7 +187,7 @@ Source SDK: ```sh python3.12 -m venv .venv . .venv/bin/activate -python -m pip install build 'inkcre-extension-toolkit[cli] @ https://github.com/InKCre/ext-reg/releases/download/toolkit-v0.2.1/inkcre_extension_toolkit-0.2.1-py3-none-any.whl' +python -m pip install build 'inkcre-extension-toolkit[cli] @ https://github.com/InKCre/ext-reg/releases/download/toolkit-v0.5.0/inkcre_extension_toolkit-0.5.0-py3-none-any.whl' python -m build --wheel --outdir dist/raw inkcre-ext python wheel finalize --project pyproject.toml --wheel dist/raw/yourname_inkcre_notebook-0.1.0-py3-none-any.whl --output-dir dist/final ``` @@ -212,13 +217,35 @@ For Core running on the same machine, build and serve the preview in a separate ```sh inkcre-ext preview build --inventory preview.json --public-origin http://127.0.0.1:8766 --output dist/registry -python -m http.server 8766 --bind 127.0.0.1 --directory dist/registry +``` + +The generated API uses extensionless paths and supplies `_redirects` rewrites. Plain +`python -m http.server` does not apply them and returns 404. Save this local-only server as +`serve-preview.py` beside `preview.json`, then run `python serve-preview.py`: + +```python +from functools import partial +from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path + +root = Path("dist/registry") +routes = dict(line.split()[:2] for line in (root / "_redirects").read_text().splitlines()) + + +class Handler(SimpleHTTPRequestHandler): + def translate_path(self, path): + return super().translate_path(routes.get(path.split("?", 1)[0], path)) + + +ThreadingHTTPServer( + ("127.0.0.1", 8766), partial(Handler, directory=str(root)) +).serve_forever() ``` For remote Core, publish **only** the generated `dist/registry` directory to an isolated static -HTTPS origin you control and use that origin as `--public-origin`. Keep it available for -installation and restart. This facade contains only the supplied releases; it is not a mirror of the -public Registry. +HTTPS origin that honors `_redirects` and `_headers` (or equivalent rules), and use that origin as +`--public-origin`. Keep it available for installation and restart. This facade contains only the +supplied releases; it is not a mirror of the public Registry. In the terminal with your CLI, inspect `inkcre-cli peer get self` and `inkcre-cli config get extension.registry`. Record the prior setting (a missing config is normal). A @@ -228,7 +255,14 @@ origin, replacing the URL if Core is remote: ```sh inkcre-cli config replace extension.registry --schema-id extension.registry.config.v1 --input-json '{"extension_registry_url":"http://127.0.0.1:8766"}' -inkcre-cli extension install yourname/notebook --version 0.1.0 +inkcre-cli extension select yourname/notebook --distribution python --version 0.1.0 +``` + +Selecting records this Peer's exact Distribution/version and applies the wheel, which may restart +Core. If the receipt reports `restart_required`, wait until `inkcre-cli connection check` succeeds +again before enabling it: + +```sh inkcre-cli extension enable yourname/notebook inkcre-cli source types ``` @@ -262,25 +296,65 @@ test. Do it on the disposable instance before inviting others to install your co not provide complete multi-item reconciliation or guarantee ordering of overlapping fetches; avoid overlapping runs and design that policy before using it as a multi-item collector. -Stop any test Crons, disable/uninstall the test Extension, restore the prior Registry configuration -(delete the config only if it did not exist before), and stop the fixture/preview servers when done. -Removing the Extension does not itself erase collected graph data. For iteration, use a new release -version, disable all enabled Peers, and restart Core when replacing already-imported code; do not -overwrite published bytes or treat disable/re-enable as Python module reload. +Stop any test Crons, disable the test Extension and cancel this Peer's selection with +`inkcre-cli extension unselect yourname/notebook`, restore the prior Registry configuration (delete +the config only if it did not exist before), and stop the fixture/preview servers when done. +Cancelling selection does not erase shared configuration or collected graph data. For iteration, use +a new release version, disable the target Peer, and restart Core when replacing already-imported +code; do not overwrite published bytes or treat disable/re-enable as Python module reload. ## Deliver your integration -Keep the package in your own repository. To distribute through a Registry, obtain permission for -your namespace, prepare the exact release association, upload the finalized wheel, and publish the -release using the [Extension Toolkit](https://github.com/InKCre/ext-reg/tree/main/toolkit). Users -then install your exact coordinate/version and follow your source-specific setup guide. The static -preview is a development path, not authorization to publish to `registry.inkcre.dev`. +Keep the package in your own repository. The public Registry path requires a namespace and publisher +token issued by its operator; a successful private preview does not grant either one. After +receiving them, create `release.json` from the same project metadata and immutable source revision +used to build the finalized wheel: + +```json +{ + "nickname": "Notebook", + "version": "0.1.0", + "python": { + "entry_point": { + "group": "inkcre.core.extensions", + "name": "notebook", + "object": "extensions.notebook:Extension" + }, + "host_sdk": "core-py", + "host_sdk_version": ">=0.3.0 <0.4.0", + "project": "yourname-inkcre-notebook", + "source_repository": "https://github.com/yourname/notebook-extension", + "source_revision": "" + } +} +``` + +Prepare the Python association, upload the finalized wheel through the Registry's PyPI-compatible +endpoint, and publish that same version. Install Twine in the build environment and provide the +token through environment variables rather than committing it or writing it into a project +configuration: + +```sh +python -m pip install twine +export INKCRE_EXTENSION_REGISTRY_URL=https://registry.inkcre.dev +# Inject INKCRE_EXTENSION_REGISTRY_TOKEN through your trusted secret manager. + +inkcre-ext prepare-release --namespace yourname --name notebook --distribution python --request release.json +TWINE_REPOSITORY_URL="$INKCRE_EXTENSION_REGISTRY_URL/legacy/" \ + TWINE_USERNAME=__token__ \ + TWINE_PASSWORD="$INKCRE_EXTENSION_REGISTRY_TOKEN" \ + python -m twine upload dist/final/yourname_inkcre_notebook-0.1.0-py3-none-any.whl +inkcre-ext publish-release --namespace yourname --name notebook --distribution python --version 0.1.0 +``` + +Published coordinates and wheel bytes are immutable; repair mistakes with a new version. Users then +install the exact coordinate/version and follow your source-specific setup guide. For larger collectors, study the [RSS implementation](https://github.com/InKCre/impl-py/tree/main/extensions/rss) for incremental reconciliation and the [Source runtime](https://github.com/InKCre/impl-py/blob/main/app/business/source/main.py) for current signatures. The -[native distribution contract](https://github.com/InKCre/impl-py/blob/main/docs/40-deployment/native-extension-distribution.md) +[native distribution contract](https://github.com/InKCre/impl-py/blob/main/docs/40-deployment/first-party-extension-distribution.md) owns Host installation, dependency admission, restart, and release rules. Pin and test the Host compatibility you declare; a working example is not a promise that every `app.*` API is stable. diff --git a/website/content/en/guide/connect-cli.md b/website/content/en/guide/connect-cli.md index ccac833..19050c4 100644 --- a/website/content/en/guide/connect-cli.md +++ b/website/content/en/guide/connect-cli.md @@ -28,6 +28,14 @@ CLI connects over HTTPS; it does not run another server on your computer. inkcre-cli --help ``` + The Extension guides use the v2 `extension select/unselect` commands. Check + `inkcre-cli extension select --help` before following them. Published CLI 0.2.1 still calls the + retired install API and receives 405 from a v2 Core. The correction is tracked in + [impl-py#153](https://github.com/InKCre/impl-py/pull/153). Until the corrected CLI is published, + use a reviewed `impl-py` checkout containing that change and install its standalone `cli/` + package with `python -m pip install /path/to/impl-py/cli`. Do not install Core as a CLI + dependency or downgrade the deployment to make an old command work. + 3. In a local folder outside any Git repository, use a text editor to create `connection.json`: ```json diff --git a/website/content/en/guide/extensions.md b/website/content/en/guide/extensions.md index 0dda90e..86e9942 100644 --- a/website/content/en/guide/extensions.md +++ b/website/content/en/guide/extensions.md @@ -7,9 +7,9 @@ description: Install a collector and enable it on the Peer that will run it. # Prepare an Extension Start with a [connected interface](/guide/connect). Your source guide supplies an Extension name, -version, and Source type. An Extension is installed once in the deployment; enabled Peers share its -version and configuration. Only install code you trust with the host's authority. Do not change a -working installation merely to match an example. +version, and Source type. Extension identity and configuration are shared, but each Peer selects its +own native Distribution and exact version. Only install code you trust with the host's authority. Do +not change a working installation merely to match an example. diff --git a/website/content/en/guide/sources/github.md b/website/content/en/guide/sources/github.md index 8b7b395..a119a8f 100644 --- a/website/content/en/guide/sources/github.md +++ b/website/content/en/guide/sources/github.md @@ -15,8 +15,8 @@ You need a [connected interface](/guide/connect) and a GitHub personal access to [GitHub's token instructions](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). Its account and permissions determine what the collector can see. 2. [Prepare the Extension](/guide/extensions): `inkcre/github` version `0.3.2` on Core Host SDK - `0.3.x`. Follow the Registry-to-Web installation steps, then use **Enable…** on the installed - Extension to select your online Core Peer. + `0.3.x`. Follow the Registry-to-Web installation steps for your online Core Peer, then use + **Enable** in that Peer's row. 3. Open **Sources** and the create-source form. Enter **Nickname** `My GitHub saves` and choose **Type** `extensions.github.stars.Source`. 4. In the **Form** tab, enter your personal access token in **GitHub token**, then create the @@ -33,7 +33,7 @@ not a code backup or a full GitHub activity archive. Start with a working instance and a [connected CLI](/guide/connect-cli). The version below targets Core Host SDK `0.3.x`; check the linked release listing for other Host versions. If already -installed, inspect `inkcre-cli extension get inkcre/github` before changing it. Keep credential +installed, inspect `inkcre-cli extension status inkcre/github` before changing it. Keep credential files and command output private. 1. Create a personal access token for the account whose Stars and Lists you want to collect, @@ -43,7 +43,8 @@ files and command output private. 2. Enable the Extension: ```sh - inkcre-cli extension install inkcre/github --version 0.3.2 + inkcre-cli extension select inkcre/github --distribution python --version 0.3.2 + # If selection reports a restart, wait for connection check to succeed before enabling. inkcre-cli extension enable inkcre/github ``` @@ -65,7 +66,8 @@ files and command output private. backup or a full GitHub activity archive. See the [GitHub collector](https://github.com/InKCre/impl-py/blob/main/extensions/github/README.md) -and [published releases](https://registry.inkcre.dev/v1/extensions/inkcre/github). +and +[published releases](https://registry.inkcre.dev/v2/extensions/inkcre/github/distributions/python). Next: [index and search for a known item](/guide/search), then [schedule collection](/guide/schedules). diff --git a/website/content/en/guide/sources/mail.md b/website/content/en/guide/sources/mail.md index da4c3a6..cd02bbd 100644 --- a/website/content/en/guide/sources/mail.md +++ b/website/content/en/guide/sources/mail.md @@ -14,8 +14,8 @@ You need a [connected interface](/guide/connect) and IMAP credentials for your m 1. Find your provider's IMAP hostname and enable IMAP if required. Obtain an app-specific password where supported. An ordinary password cannot replace an unsupported authentication method. 2. [Prepare the Extension](/guide/extensions): `inkcre/mail` version `0.3.2` on Core Host SDK - `0.3.x`. Follow the Registry-to-Web installation steps, then use **Enable…** on the installed - Extension to select your online Core Peer. + `0.3.x`. Follow the Registry-to-Web installation steps for your online Core Peer, then use + **Enable** in that Peer's row. 3. Open **Sources** and the create-source form. Use **Nickname** `My mail` and **Type** `extensions.mail.source.Source`. 4. In the **Form** tab, set **Protocol** to `imap`. Under **Parameters**, enter the hostname, port @@ -46,8 +46,8 @@ mail._ Start with a working instance and a [connected CLI](/guide/connect-cli). The version below targets Core Host SDK `0.3.x`; check the linked release listing for other Host versions. If already -installed, inspect `inkcre-cli extension get inkcre/mail` before changing it. Keep credential files -and command output private. +installed, inspect `inkcre-cli extension status inkcre/mail` before changing it. Keep credential +files and command output private. 1. Find your provider's IMAP hostname and enable IMAP if required. Obtain an app-specific password where supported. Accounts requiring an unsupported authentication method cannot be connected by @@ -55,7 +55,8 @@ and command output private. 2. Install and enable the Core Extension: ```sh - inkcre-cli extension install inkcre/mail --version 0.3.2 + inkcre-cli extension select inkcre/mail --distribution python --version 0.3.2 + # If selection reports a restart, wait for connection check to succeed before enabling. inkcre-cli extension enable inkcre/mail ``` @@ -99,7 +100,8 @@ and command output private. See the [Mail configuration](https://github.com/InKCre/impl-py/blob/main/docs/30-unit-tdd/mail-extension.md) -and [published releases](https://registry.inkcre.dev/v1/extensions/inkcre/mail). +and +[published releases](https://registry.inkcre.dev/v2/extensions/inkcre/mail/distributions/python). Next: [index and search for a known item](/guide/search), then [schedule collection](/guide/schedules). diff --git a/website/content/en/guide/sources/memos.md b/website/content/en/guide/sources/memos.md index c80b7c7..a7f81d5 100644 --- a/website/content/en/guide/sources/memos.md +++ b/website/content/en/guide/sources/memos.md @@ -17,9 +17,9 @@ a bounded Memos `0.29.1` API subset; the previously accepted client is MoeMemos 1. [Prepare the Extension](/guide/extensions): use **Browse Registry** to select `inkcre/memos` version `0.3.0` for Core Host SDK `0.3.x`, then confirm the installation back in the Web app. For an existing installation, follow that guide's version-change instructions. -2. In **Extensions**, choose **Enable…** on Memos, select **This browser**, confirm, and open - **Setup**. The same release supplies the browser setup and Core service; do not install a - different version for each client. +2. In **Extensions**, use **Install** or **Change Version** in **This browser**'s row to select a + compatible Module Federation release, then **Enable** and open **Setup**. The Python and browser + releases have independent versions; match each Host's SDK range and their shared Memos contract. 3. Choose your Core if more than one is available, then select **Prepare connection**. Setup generates or reuses a dedicated PAT and enables Memos on that Core when necessary. 4. Copy **Server URL** and **Personal Access Token** into the supported Memos client's account @@ -52,10 +52,11 @@ implements a bounded Memos `0.29.1` API subset; the previously accepted client i ## 1. Configure the Extension Start with a [connected CLI](/guide/connect-cli) and a Core HTTPS URL. Install the Core Host SDK -`0.3.x` release, or inspect `inkcre-cli extension get inkcre/memos` if already installed: +`0.3.x` release, or inspect `inkcre-cli extension status inkcre/memos` if already installed: ```sh -inkcre-cli extension install inkcre/memos --version 0.3.0 +inkcre-cli extension select inkcre/memos --distribution python --version 0.3.0 +# If selection reports a restart, wait for connection check to succeed before enabling. ``` Generate a dedicated PAT and save it in your password manager. Its required format is `memos_pat_` @@ -103,7 +104,9 @@ before diagnosing the instance itself. Remove the account from the client and rotate or clear `personal_access_token` to revoke the old credential. Disable the Extension to withdraw its routes. These actions do not erase stored notes. -See the [release listing](https://registry.inkcre.dev/v1/extensions/inkcre/memos) and the +See the +[release listing](https://registry.inkcre.dev/v2/extensions/inkcre/memos/distributions/python) and +the [Memos runtime contract](https://github.com/InKCre/impl-py/blob/main/docs/30-unit-tdd/memos-extension.md). diff --git a/website/content/en/guide/sources/rss.md b/website/content/en/guide/sources/rss.md index 1e0d0c6..5f41d73 100644 --- a/website/content/en/guide/sources/rss.md +++ b/website/content/en/guide/sources/rss.md @@ -14,9 +14,8 @@ You need a [connected interface](/guide/connect) and a publication's RSS or Atom Choose a publication's **RSS or Atom feed URL**, not its normal homepage. 1. [Prepare the Extension](/guide/extensions): `inkcre/rss` version `0.2.1` for Core Host SDK - `0.3.x`. Follow the Registry-to-Web installation steps, then use **Enable…** on the installed - Extension to select your online Core Peer. No CLI or browser Extension is needed for this - collector. + `0.3.x`. Follow the Registry-to-Web installation steps for your online Core Peer, then use + **Enable** in that Peer's row. No CLI or browser Extension is needed for this collector. 2. Open **Sources** and the create-source form. Set **Nickname** to `My first feed`. 3. Choose **Type** `extensions.rss.rss.Source`, or `extensions.rss.atom.Source` for Atom. @@ -47,18 +46,19 @@ is not usually a feed URL. Look for an RSS/Subscribe link on the publication. Install the RSS Extension on Core, then enable it: ```sh -inkcre-cli extension install inkcre/rss --version 0.2.1 +inkcre-cli extension select inkcre/rss --distribution python --version 0.2.1 +# If selection reports a restart, wait for connection check to succeed before enabling. inkcre-cli extension enable inkcre/rss inkcre-cli source types ``` Version `0.2.1` supports Core Host SDK `0.3.x`. For a different Host version, check the -[RSS release listing](https://registry.inkcre.dev/v1/extensions/inkcre/rss) for a published release -with a compatible `python.host_sdk_version`. Do not guess a version or use `latest`. If already -installed, inspect `inkcre-cli extension get inkcre/rss` before changing it. +[RSS release listing](https://registry.inkcre.dev/v2/extensions/inkcre/rss/distributions/python) for +a published release with a compatible `python.host_sdk_version`. Do not guess a version or use +`latest`. If already installed, inspect `inkcre-cli extension status inkcre/rss` before changing it. The type list should contain `extensions.rss.rss.Source` and `extensions.rss.atom.Source`. In the -Web app, choose **Enable…** and select Core to run the collector, not **This browser**. +Web app, use **Enable** in Core's row to run the collector, not **This browser**. ## Add and run the source diff --git a/website/content/en/guide/sources/telegram.md b/website/content/en/guide/sources/telegram.md index 9403227..a551b84 100644 --- a/website/content/en/guide/sources/telegram.md +++ b/website/content/en/guide/sources/telegram.md @@ -20,8 +20,8 @@ ID. `personal_information.user_id`, not your `@username` or the bot's ID. Telegram may require another-device confirmation or a waiting period. 3. [Prepare the Extension](/guide/extensions): `inkcre/telegram` version `0.3.2` on Core Host SDK - `0.3.x`. Follow the Registry-to-Web installation steps, then use **Enable…** on the installed - Extension to select your online Core Peer. + `0.3.x`. Follow the Registry-to-Web installation steps for your online Core Peer, then use + **Enable** in that Peer's row. 4. Open **Sources** and the create-source form. Enter **Nickname** `My Telegram inbox` and choose **Type** `extensions.telegram.source.Source`. In the **Form** tab, enter the bot token and your numeric user ID. Leave **Download attachments** off for the first run, then create the Source. @@ -39,7 +39,7 @@ retains updates for a limited time; keep another copy if your instance sleeps. Start with a working instance and a [connected CLI](/guide/connect-cli). The version below targets Core Host SDK `0.3.x`; check the linked release listing for other Host versions. If already -installed, inspect `inkcre-cli extension get inkcre/telegram` before changing it. Keep credential +installed, inspect `inkcre-cli extension status inkcre/telegram` before changing it. Keep credential files and command output private. 1. Create a dedicated bot with [@BotFather](https://t.me/botfather): send `/newbot`, follow its @@ -51,7 +51,8 @@ files and command output private. 2. Install and enable the Core Extension: ```sh - inkcre-cli extension install inkcre/telegram --version 0.3.2 + inkcre-cli extension select inkcre/telegram --distribution python --version 0.3.2 + # If selection reports a restart, wait for connection check to succeed before enabling. inkcre-cli extension enable inkcre/telegram ``` @@ -83,7 +84,7 @@ Use one bot for one Source. This is a capture inbox, not group/channel history i notification destination. Attachments are metadata-only in this example; enable `download_attachments` when you want their bytes saved too. See the [Telegram collector](https://github.com/InKCre/impl-py/blob/main/extensions/telegram/README.md) and -[published releases](https://registry.inkcre.dev/v1/extensions/inkcre/telegram). +[published releases](https://registry.inkcre.dev/v2/extensions/inkcre/telegram/distributions/python). Next: [index and search for a known item](/guide/search), then [schedule collection](/guide/schedules). diff --git a/website/content/en/guide/sources/twitter.md b/website/content/en/guide/sources/twitter.md index f551d85..ec540c3 100644 --- a/website/content/en/guide/sources/twitter.md +++ b/website/content/en/guide/sources/twitter.md @@ -35,7 +35,8 @@ configuration. Do not downgrade to `0.3.0`: its Python package targets Core Host 1. [Prepare the Extension](/guide/extensions) on Core with name `inkcre/twitter` and version `0.4.1`, then enable it on Core. 2. Install a compatible Web Module Federation distribution for **This browser**. In **Extensions**, - choose **Enable…** on `inkcre/twitter`, select **This browser**, confirm, and click **Setup**. + use **Install** or **Change Version** in **This browser**'s row, then **Enable** in that row and + click **Setup**. 3. Choose your online Core Peer in the wizard. Enable Twitter there if prompted. Core handles the callback and collection; browser enablement alone is insufficient. @@ -80,15 +81,16 @@ account step. You can separately revoke the app in X. Neither action removes col ## 1. Enable the Core Extension ```sh -inkcre-cli extension install inkcre/twitter --version 0.4.1 +inkcre-cli extension select inkcre/twitter --distribution python --version 0.4.1 +# If selection reports a restart, wait for connection check to succeed before enabling. inkcre-cli extension enable inkcre/twitter inkcre-cli source types ``` Look for `extensions.twitter.bookmark.Source`. If already installed, inspect -`inkcre-cli extension get inkcre/twitter` before changing it. Check the -[release listing](https://registry.inkcre.dev/v1/extensions/inkcre/twitter) for other Host versions. -This CLI / Agent procedure does not require a browser-side Twitter Extension. +`inkcre-cli extension status inkcre/twitter` before changing it. Check the +[release listing](https://registry.inkcre.dev/v2/extensions/inkcre/twitter/distributions/python) for +other Host versions. This CLI / Agent procedure does not require a browser-side Twitter Extension. ## 2. Connect your X account