TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
1. Overview 2. Features 3. The pages it is pointed at 4. Requirements 5. Installation 6. Preparing an AI provider 7. Configuration 8. Usage 9. How it summarizes 10. Privacy 11. When something fails 12. Limitations 13. Not built 14. Repository structure 15. Documents 16. Primary Branch web-digest is a Chrome extension that takes the page you currently have open, extracts its main content, and produces a summary of it with an AI provider of your choice: the Sakura AI Engine (さくらの AI Engine), OpenAI, Claude, or Kimi.README 전문 보기 ↗
web-digest is a Chrome extension that takes the page you currently have open, extracts its main content, and produces a summary of it with an AI provider of your choice: the Sakura AI Engine (さくらの AI Engine), OpenAI, Claude, or Kimi.
The task is semantic compression, not shortening. A summary that is short and has lost the condition a claim depends on has failed; a summary that is long because the page carried little redundancy has not. What the summary keeps is the central claim, the main grounds for it, the causal relations that matter, the conclusion, and the conditions and reservations that could change it. What it removes is repetition, several examples of one proposition, rhetorical elaboration, introductory throat-clearing and digression.
The summarizing is done by the provider you selected in settings, through your own API credential for it. There is no server belonging to this project: the extracted content and that provider's credential are sent only to the one provider you selected, and this project itself collects nothing.
open a page
↓
click the toolbar action
↓
the main content of that page is extracted
↓
it is sent to your selected AI provider with your own credential
↓
the summary is shown in the side panel, beside the page
Ordinary web pages whose main content is prose. There is no list of supported sites, and none is needed for the extension to be useful: technical articles, blogs and essays, news articles, technical documentation, a GitHub README or issue, product and specification descriptions, FAQs, forum threads and long posts are all pages it is expected to be used on.
That is not a compatibility list. It is a description of what kind of page has something to compress. Nor is complete extraction promised: an unusual DOM, content generated after load, a shadow tree, and a page that depends on an authentication state may all leave too little text to work with. That is an ordinary outcome rather than a defect, and it is reported as itself — see Limitations.
chrome.sidePanel itself arrived in 114, but the sidePanel.open() this extension calls needs 116, and the manifest states that so an older browser refuses the extension rather than failing at the first click.https://api.ai.sakura.ad.jp, https://api.openai.com, https://api.anthropic.com or https://api.moonshot.ai — and nothing else.There is nothing to build and nothing to install alongside it. No bundler, no transpiler, no package manager and no third-party library: the files a browser is given are the files in the repository.
The extension is not published on the Chrome Web Store. It is obtained from this repository and loaded through Chrome's developer mode, as an unpacked extension.
git clone https://github.com/id774/web-digest.git
Then, in Chrome:
chrome://extensions.web-digest directory — the directory that contains
manifest.json. Do not select the manifest.json file itself. The repository
root is the extension; there is no build output or subdirectory to select.No summary run starts and no page is read at this point. The extension does not summarize a page until you click its toolbar action on that page.
Pick one of the supported providers and obtain your own API credential for it. This project holds no credential of its own and supplies none to anybody, and there is no arrangement under which a page is summarized without a credential of yours.
| Provider | Credential | Where to obtain it and its model names |
|---|---|---|
| Sakura AI Engine | an API token | the Sakura AI Engine's own official documentation |
| OpenAI | an API key | OpenAI's own official documentation |
| Claude | an API key | Anthropic's own official documentation |
| Kimi | an API key | Moonshot AI's own official documentation |
Each service's official documentation is the authority for obtaining a credential and for the model names it currently offers, and this README deliberately does not restate a procedure or a model name that a service owns and can change.
If you do nothing, the extension behaves as Sakura AI Engine selected — this is unchanged from earlier versions, so an existing Sakura user upgrading needs to change nothing. A new user picks a provider explicitly in settings, as described below.
The configurable settings are listed below. Their storage keys and the default model
for each provider are defined in src/common/settings.js, and the stored values live
in chrome.storage.local in your own Chrome profile.
| Setting | Required | Default | What it decides |
|---|---|---|---|
| AI provider | no | Sakura AI Engine | Which of the four providers a run uses. |
| API credential (per provider) | yes, for the selected provider | — | The credential the request to that provider is made with. |
| Model (per provider) | no | a name recorded in src/common/settings.js, one default per provider | Which model the selected provider summarizes with. |
| Summarize in Japanese | no | off | Off: the summary is written in the page's own language. On: the summary is written in Japanese, regardless of the page's language. Applies to every provider alike. |
Each provider's credential and model are stored under their own keys and are independent of one another: switching the selected provider never deletes, overwrites or moves another provider's stored credential or model, and never asks you to re-enter one.
After loading and pinning the extension, configure a provider:
chrome://extensions.After saving, the credential field becomes empty. This is normal: a stored credential is never displayed again. The line A credential is configured. confirms that it was saved.
The settings page also opens from Settings in the side panel's header. When a run fails because no credential is configured, choose Open settings in the side panel. Use either route whenever you need to change the provider, its credential, or its model.
The settings page carries:
The endpoint, the timeout, the size budget and the summarization prompt are design constants and resources rather than settings. None of them is something a reader has the information to choose, and each one exposed would be a second decision on a path that is meant to stay at one.
chrome.storage.local, until you delete it, and each provider's credential is stored under its own key, independent of the others.One thing this does not promise: a credential held by a browser extension is not a secret kept from the person at the keyboard. Whoever controls the Chrome profile can read extension storage, and no arrangement inside an unpacked extension changes that.
After the first-time installation, pinning and provider setup, follow these steps for each page:
To summarize the same page again, click the web-digest toolbar button again. The toolbar action is the only control that starts a summary.
What the panel shows:
| Phase | What you see | Control |
|---|---|---|
| nothing run yet | that no summary has been run for this tab | Settings |
| in progress | that a summary is being produced, and that it may take a while | Settings |
| succeeded | the title and the summary | Settings |
| failed | what went wrong, and what would address it | Settings; additionally Open settings when no credential is configured, or a permission is missing |
Navigating to another page never starts a run: the panel returns to "nothing run yet" for the new page and waits for the toolbar action. A failed run is never retried automatically. One toolbar click starts one complete run, with one provider fixed for its whole duration; a long page may require several requests to that same provider within that run.
What the summary keeps follows from what the page is, and no stage decides which kind of page it is first — there is no classifier, no per-kind branch and no mode to select. A page that is a mixture is summarized as the mixture it is.
| The page is | What is kept |
|---|---|
| an essay or an article | the central claim, the main grounds for it, the causal relations that matter, the conclusion, and the conditions and reservations that could change that conclusion |
| an explanatory text or technical documentation | the purpose, the main mechanism, the significant parts of the specification, the conditions of use, and the constraints |
| an issue or a discussion | the problem, the main points at issue, the material a judgement would rest on, where it currently stands, and what remains unresolved |
What is reduced, where it is not itself the substance: repetition of the same content, several examples illustrating one proposition, rhetorical elaboration, introductory throat-clearing, digression, redundant restatement, and supporting explanation that does not bear on the main line.
A character count is not the constraint. The summary is not trimmed mechanically to a target length; the measure is that the redundancy is gone and the substance is intact. Two consequences are intended: a dense page compresses less than a padded one, and two pages of the same original length do not produce summaries of the same length.
Nothing is added that the page does not carry — no fact, no conclusion and no evaluation. The text of the page is material, never instruction: a sentence inside a page that addresses a model is part of the text being summarized.
By default, the summary is written in the language of the page. Turning on Summarize in Japanese in settings writes the summary in Japanese instead, directly, regardless of the page's language — the page is never first summarized in its own language and then translated. This preference is the same whichever provider is selected. It is read once when a run starts and used for that whole run, so a long page's chunk summaries and its integrated summary always share the same output language. This is not a standalone translator: there is no separate translation result, and nothing but the summary's own language changes.
How a summary is written is decided by prompts/summarize.md, outside the code, and by the one instruction it holds for whichever provider a run uses. Improving the summaries is editing that file.
history and no tabs permission, and the page's URL is never read, never returned by extraction, never stored and never sent.The permissions are the smallest set that allows this: activeTab for the tab you acted on and no longer, scripting to read it once, storage for the extension settings and the state of the last run, sidePanel for the display, one required host permission naming the Sakura AI Engine origin, and three optional host permissions — OpenAI's, Claude's and Kimi's — requested only from your own action in Settings, when you select that provider there or when you choose Grant or restore permission for the one already selected, never when a run starts. There is no host permission for any site you visit, so a request to anywhere else is refused by Chrome rather than by this design being obeyed.
Every failure ends the run and shows one message in the panel that names the cause and what would address it: that no credential is configured for the selected provider and where to enter one, that the credential was rejected, that the selected provider could not be reached or took too long or reported an error, that a browser permission for the selected provider is missing, that the content of this page could not be obtained, that this page has too little text, that this page is too large to process, that no usable summary came back, or that the extension itself failed to complete the run.
Causes that lead to different actions stay apart — "no credential" and "credential rejected" are never merged into one message about the provider. A message carries no status line, no response body, no internal detail and no API credential. What a status code was is recorded in the service worker's console log, which carries counts and durations and never the page's text, its title, its URL, the prompt, the request, the answer or the summary.
For the most common problems:
chrome://extensions, and save a credential for the
selected AI provider.chrome:// pages, the Chrome Web Store and the Chrome PDF viewer are restricted by Chrome itself, and script injection into them is refused. file:// URLs are not refused across the board — if you have turned on Allow access to file URLs for this extension in Chrome's extension details, a file:// page can be read the same as any other page; if that permission is off, injection is refused and the run reports that this page's content could not be obtained.Deliberately absent from this version, and not prepared for anywhere in the design: publication on the Chrome Web Store; official support for Firefox, Safari or Edge; a backend server belonging to this project; user accounts; billing; a shared API credential supplied to readers; collecting browsing history; storing summaries in the cloud; summarizing across several pages; web crawling; summarizing on a schedule; retrieval-augmented generation; a vector database; integration with web search; fact checking; judging whether a page is good, correct or machine-generated; a standalone translator, as distinct from the summary's own output-language setting; a custom or user-editable endpoint for any provider; a fifth AI provider, or a generic OpenAI-compatible, Azure OpenAI, Amazon Bedrock or Google Vertex AI provider; automatic fallback or a race between providers; and a large body of site-specific implementations.
None of these is a gap to be filled later. Should one become necessary, the requirements change first and the design follows.
.
├── manifest.json
├── package.json
├── icons/
├── prompts/
│ └── summarize.md
├── src/
│ ├── background/
│ ├── extract/
│ ├── shape/
│ ├── engine/
│ ├── panel/
│ ├── options/
│ └── common/
├── tests/
├── README.md
└── doc/
├── REQUIREMENTS.md
├── BASIC_DESIGN.md
├── DETAILED_DESIGN.md
├── POLICY.md
├── VERSIONS
├── LICENSE.md
├── COPYING
└── COPYING.LESSER
There is no build step, which is what makes "load unpacked from a clone" the whole of the installation. Four concerns are kept apart — obtaining the content of the page, communicating with the selected AI provider, the summarization prompt, and displaying the result — so that adding or changing a provider touches src/engine/ and the settings.
Prompt wording is not embedded in a JavaScript module. prompts/summarize.md is a packaged text resource that the service worker fetch()es at the start of a run; improving the summaries is editing that one file, and no module holds a copy of its wording.
REQUIREMENTS states what the extension must satisfy. BASIC_DESIGN states the architecture and the responsibility of each component. DETAILED_DESIGN states the concrete behavior and interfaces. POLICY states the implementation and maintenance policy. VERSIONS is the release history.
Each of them stands on its own. What this repository needs is written in this repository, and no document here is completed by one kept somewhere else. Where a document and this README disagree, the documents are right and this README is the one to correct.
This repository uses master as its primary branch name.
The name is used solely as a technical identifier, following the long-standing convention historically used by Git. It does not express or imply any association with racism, slavery, discrimination, or any political or social ideology.