gramatico
↗ picasso
Fit
1027 nodes, 2625 edges
build.rs
main()
android.rs
guarded()
Java_io_github_piabrota_gramatico_Ptbr_accept()
Java_io_github_piabrota_gramatico_Ptbr_check()
Java_io_github_piabrota_gramatico_Ptbr_clear()
Java_io_github_piabrota_gramatico_Ptbr_ignore()
out()
string()
fake-provider.rs
main()
fake.rs
claude_reply()
DEMO_TEXT
reply()
serve()
suggestions()
fetch.rs
android_tls()
Http
.default()
.fetch()
lib.rs
a_check_over_http_returns_the_fake_providers_suggestions()
a_cloud_provider_without_a_key_never_sends()
accept()
ANDROID
App
boot()
check()
config_dir()
ignore()
message()
nothing_listening_is_a_local_error()
run()
run_check()
save_prefs()
main.rs
main()
overlay.rs
accept()
any_provider_becomes_claude()
check()
check_accept_ignore_through_the_session()
claude_only()
clear()
ignore()
SESSION
temp_dir()
without_a_claude_key_the_check_is_an_error_and_sends_nothing()
store.rs
a_missing_or_broken_file_is_the_defaults()
bad_values_keep_the_defaults()
FILE
prefs_round_trip()
Stored
.default()
.from_value()
.load()
.prefs()
.save()
.to_value()
.with_prefs()
view.rs
a_detection_cannot_be_accepted()
a_suggestion_not_in_the_text_has_no_card()
accept_replaces_and_shifts_later_occurrences()
card()
ignore_closes_one_card_and_keeps_the_text()
pieces()
s()
segments_cover_the_text_in_order()
Session
.accept()
.close()
.ignore()
.located()
.new()
.view()
titles()
lib.rs
action()
android()
by_id()
call()
card_element()
CheckArgs
create()
document()
fill_select()
focus_card()
highlight()
IdArgs
invoke()
main()
marks_of()
NoArgs
on()
PrefsArgs
read_form()
render()
run_check()
save()
show_overlay()
show_provider()
start()
status()
tauri_invoke()
Ui
wire()
wire_android()
main.js
lib.rs
Boot
Card
Prefs
ProviderInfo
Segment
View
attribute
browser
btreemap
catch_unwind
child_process
closure
crypto
deserializeowned
default.nix
col()
first()
fromCentre()
last()
near()
g.nix
stroke()
pen.nix
abs()
at()
brush()
coeffs()
decimals()
deriv()
disc()
drawing()
evalPoly()
f()
fma()
g()
get()
groups()
inkOf()
json()
num()
ofLine()
ofPoint()
parsePair()
parsePoly()
part()
poly()
pt()
read()
round()
shape()
spline()
split()
tenths()
x()
y()
duration
element
esbuild
exitcode
content.spec.ts
typeUntilChecked()
extension.spec.ts
lexicalText()
fake-server.ts
Call
FakeServer
json()
reset()
sentText()
startFakeServer()
Suggestion
global-setup.ts
globalSetup()
helpers.ts
accept()
Ext
.close()
.constructor()
.launch()
.open()
.page()
.popupOn()
.registered()
.setSettings()
.settings()
Settings
SiteConfig
typeAndWait()
lexical-app.ts
overlay.spec.ts
pages.spec.ts
playwright.config.ts
background.rs
a_missing_skill_section_is_a_provider_error_not_a_panic()
a_sender_whose_host_is_not_enabled_gets_nothing_and_no_fetch()
a_sender_with_no_url_no_fetch()
a_truncated_reply_is_truncated_not_no_problems()
aviso_with_an_erro_inside_it_returns_1_suggestion()
check()
check_decisions()
check_from_sender()
ChromeScripting
.register()
.registered()
.unregister()
claude_body()
ContentScript
disable_site()
disable_site_unregisters()
down()
enable_site()
enable_site_registers_site_host_for_https_host()
Fake
.fetch()
falls_back_to_sender_url()
fetch_json()
handle_check()
handle_message()
host_of_url()
join_all()
never_registers_default_hosts_and_is_idempotent()
no_key_does_not_call_fetch()
NOTHING
ok()
ok_fetch()
ollama_and_ollaya_replies_pass_through_filter_suggestions()
ollama_checks_without_a_key_down_or_403_local()
ollaya_one_decide_request_per_sentence_detections_back_down_or_403_local_ollaya_truncated_provider()
ollaya_plus_ollama_ollaya_picks_the_style_ollama_writes_in_it_ollaya_down_ollama_writes_alone()
passes_the_tone_rewrite_and_never_fix_settings_into_the_prompt()
Pending
pending_fetch()
pick_style()
prompt_options()
rejecting_fetch_network()
req()
Scripting
.register()
.registered()
scripting_stub()
.unregister()
second_call_with_same_key_aborts_the_first_which_returns_nothing()
Sender
sender_host()
SenderTab
settings()
site()
site_id()
site_script()
startup_skips_registered_ids_and_default_hosts()
status_200_returns_suggestions()
status_2xx_with_non_json_body_provider()
status_401_auth_429_rate_limit()
Stub
.register()
.registered()
.unregister()
suggestion()
sync_sites()
sync_sites_now()
tab()
takes_the_level_from_the_settings_not_from_the_message()
the_extension_switched_off_no_fetch()
the_same_message_key_from_two_tabs_does_not_abort_either()
chrome.rs
active_tab()
add_listener()
await_js()
from_js()
get_registered_content_scripts()
get_url()
open_options_page()
origins()
permissions_remove()
permissions_remove_raw()
permissions_request()
permissions_request_raw()
register_content_scripts()
Registered
remove_listener()
runtime_send_message()
scripting_get_registered()
scripting_register()
scripting_unregister()
send_message()
send_message_raw()
storage_get()
storage_local_get()
storage_local_set()
STORAGE_ON_CHANGED
storage_set()
Tab
tabs_query_raw()
to_js()
unregister_content_scripts()
apply.rs
accept_suggestion()
paste_into()
card.rs
a_local_providers_suffix_keeps_the_codes_title()
card_heading()
located()
offers_never_fix()
sempre_ignorar_up_to_3_words_and_not_on_a_detection()
shows_only_the_code_when_there_is_no_title()
shows_reescrita_on_a_ptw_17_warning()
shows_the_code_and_the_title_of_a_warning_from_another_rule()
shows_the_code_and_the_title_of_an_error()
titles()
controller.rs
act()
Content
.start()
editable_root()
FieldState
follow()
frame()
Inner
.attach()
.drop()
.drop_suggestion()
.field()
.render()
.stop()
schedule()
start()
TEXT_INPUTS
mod.rs
ElMap
.at()
.at_mut()
.clear()
.contains()
.drain()
.get()
.get_mut()
.insert()
.is_empty()
.iter()
.len()
.new()
.position()
.remove()
.retain()
same()
Timer
.drop()
.new()
overlay.rs
Action
badge_label()
Card
COPIED
Drawn
field_rects()
Hit
HIT_STYLE
HOST_ID
HOVER_MS
in_path()
Inner
.button()
.close_card()
.close_on_outside()
.div()
.draw()
.drop()
.entry()
.forget()
.hit_at()
.on_mouse_move()
.on_root_click()
.open_card()
.open_pending()
.p()
.place_card()
.render_badge()
.reposition_all()
.root()
LEAVE_MS
Overlay
.forget()
.new()
.render_badge()
.render_suggestions()
.reposition_all()
place()
place_badge()
push_all()
px()
Rect
.contains()
.from()
.visible_in()
RectSource
.new()
.rects_into()
scroll()
STYLE
text.rs
BREAKS
caret_offset()
counts_whitespace_separated_words()
field_value()
is_field()
MAX_CHARS
NL
offsets_are_utf16_units()
QUOTED
range_for()
select_for_sending()
sends_a_short_paragraph_between_long_ones()
sends_the_paragraph_containing_the_caret()
sends_the_whole_text_when_it_fits()
Sent
Span
span_ends()
span_ends_is_none_across_a_block_separator()
span_ends_is_none_out_of_bounds()
span_ends_spans_several_text_nodes()
spans()
text_model()
TextModel
walk()
windows_a_paragraph_over_4000_around_the_caret()
windows_inside_a_later_paragraph()
with_the_caret_at_0_sends_the_first_paragraph_even_when_it_is_empty()
word_count()
watcher.rs
a_reloaded_extension_is_reload_any_other_failure_the_network()
an_edit_different_from_the_expected_one_is_typing()
an_expected_edit_is_the_extensions_own_and_is_spent()
applies_a_fresh_response_as_located_suggestions_with_the_offset()
check()
detach()
discards_a_response_when_the_field_changed_meanwhile()
does_not_send_an_empty_paragraph_of_a_long_text()
drops_a_suggestion_that_spans_two_lines()
Field
Hooks
ignores_passwords_and_texts_under_3_words()
Inner
MIN_WORDS
on_input()
Outcome
own_edit()
plan()
reports_an_error_state()
send_error()
sent()
Status
suggestion()
Watcher
.attach()
.detach()
.drop()
.expect_edit()
.new()
decisions.rs
a_rule_above_the_threshold_becomes_a_detection_at_its_occurrence()
Ask
asks_one_choice_question_over_the_whole_field_the_styles_as_options()
cientifico_adds_the_cie_rules()
decide_asks()
MAX_SENTENCES
nenhuma_a_weak_answer_or_an_unexpected_body_give_nothing()
NONE
one_body_per_sentence_the_sentence_is_the_state_one_choice_question_nenhuma_first()
read_decision()
read_style()
reads_ptw_1_to_17_with_their_titles()
reads_the_chosen_style_anything_else_is_none()
reply()
rules_of()
sentences()
splits_after_punctuation_and_at_line_breaks_and_drops_fragments_under_3_words()
style_body()
TEXT
THRESHOLD
dom.rs
Build
.child()
.id()
.text()
button()
create()
document()
el()
line()
on()
option()
query()
spawn()
T
hosts.rs
accepts_hosts_urls_and_mixed_case()
is_scheme()
normalize_host()
rejects_wildcard_port_path_only_ip_localhost_empty_other_schemes()
lib.rs
app()
handle_message()
install_panic_hook()
start_background()
start_content()
start_options()
start_popup()
sync_sites()
never_fix.rs
a_change_of_case_alone_breaks_the_entry()
add_does_not_repeat_ignoring_case()
add_ignores_empty_input()
add_ignores_input_with_more_than_3_words()
add_keeps_the_200_most_recent()
add_never_fix()
add_trims_the_ends()
an_original_without_the_entry_breaks_nothing()
breaks_entry()
contains_does_not_match_inside_a_word()
contains_entry()
contains_tells_accents_apart()
contains_whole_word_ignoring_case()
is_word()
keeps_the_text_as_written_whatever_the_case_of_the_entry()
list()
needs_a_whole_word_in_the_replacement()
NEVER_FIX_MAX
NEVER_FIX_MAX_WORDS
same_char()
whole_words()
word_count()
options.rs
PAGE
render()
popup.rs
an_https_page_with_an_acceptable_host()
host_of()
http_localhost_ip_other_schemes_and_no_url_are_not_supported()
names_the_provider_without_a_key()
provider_name()
render()
section()
provider_fields.rs
a_local_server_lists_the_suggested_and_the_installed_models()
baixar_lists_the_pulled_model_as_installed()
installed()
key_placeholder()
labeled()
model_label()
model_list()
Mount
.fill()
.refresh()
.show()
one_model_list_for_the_chosen_provider()
ProviderFields
.chosen()
PROVIDERS
pull_hidden()
pull_status()
providers.rs
Abort
.abort()
.aborted()
.on_abort()
abort_runs_its_listeners_once()
.same()
AbortState
api_base_is_ignored_outside_a_test_build()
api_base_overrides_the_url_test_builds_only()
base()
body()
BrowserFetch
.fetch()
build_request()
classify_error()
claude_concatenates_text_blocks()
claude_models_get_no_sampling_parameters()
claude_stop_reason_max_tokens()
claude_url_exact_headers_and_body()
decide_requests()
deepseek_finish_reason_length()
deepseek_first_choice_content()
deepseek_url_bearer_and_messages()
endpoint()
Failed
Fetch
.fetch()
fetch_with_init()
header()
HttpRequest
HttpResponse
.ok()
is_truncated()
local_base()
local_base_for()
local_json()
local_models()
local_origin()
local_pull()
maps_statuses()
ollama_down_or_refusing_the_extension_origin_is_local()
ollama_local_chat_api_no_key_thinking_off_reply_and_truncation()
ollaya_down_or_refusing_the_extension_origin_is_local_ollaya()
path()
post()
read_text()
response()
style_request()
unexpected_shapes_are_not_truncated()
unexpected_shapes_give_empty_string()
url_for()
without_api_base_the_url_is_the_real_endpoint()
rules.rs
as_demais_regras_usam_erro()
build_system_prompt()
cientifico_embute_cie()
cientifico_so_embute_as_regras_do_cientifico()
clean_never_fix()
declara_o_nivel()
exclui_uso_smart_note_e_formato_de_saida()
falha_se_a_secao_regras_do_cientifico_some()
falha_se_a_secao_some()
ignora_cabecalhos_que_nao_sao_de_regra()
inclui_a_lista_de_nunca_trocar()
inclui_ptw_1_a_17()
le_os_titulos_das_regras()
liga_aviso_a_ptw_17_e_erro_as_demais()
limpa_entradas_com_quebra_de_linha_e_aspas()
nao_mexe_em_codigo()
nao_vaza_o_front_matter_do_cientifico()
o_estilo_do_ollaya_entra_no_prompt_so_quando_ha_estilo()
opts()
prompt()
prompt_with()
PromptOptions
rule_titles()
section()
SectionError
.fmt()
sem_rewrite_proibe_aviso()
style_description()
tom_informal_mantem_as_abreviacoes_neutro_e_formal_nao()
tone_line()
traz_a_instrucao_de_tom()
settings.rs
a_malformed_field_keeps_its_default_and_the_rest_loads()
a_stored_model_outside_the_list_falls_back_to_the_provider_default()
allowed_site()
default_sites()
DELAYS
disabled_extension()
disabled_site()
empty_storage_gives_defaults()
every_default_model_is_in_its_provider_list()
keeps_default_keys_and_models_missing_from_storage()
keeps_the_default_sites_when_storage_has_one_host()
known_model()
level_for()
load_settings()
models()
save_round_trips_through_the_stored_shape()
save_settings()
Settings
.default()
.from_stored()
STORAGE_KEY
stored_top_level_values_win()
tone_rewrite_never_fix_and_wait_defaults()
tone_rewrite_never_fix_and_wait_outside_the_list_fall_back_to_the_defaults()
valid_tone_rewrite_never_fix_and_wait_are_kept()
values()
with_sites()
sites.rs
DEFAULT_SITE_HOSTS
disable_site_flow()
enable_site_flow()
is_default_host()
LEVELS
MASK
mask_key()
masks_and_keeps_on_empty_or_masked_input()
NEW_SITE_LEVEL
notify()
origin()
ProviderFields
remove_site_flow()
resolve_key()
save_provider_fields()
save_text_settings()
set_enabled()
set_level()
set_ollaya_style()
skills.rs
CIENTIFICO
SKILL
suggestions.rs
acha_a_ocorrencia_pedida()
aplica_a_troca()
apply_to_string()
aviso()
aviso_descartado_pela_lista_devolve_os_seus_erros()
aviso_nao_achado_o_erro_fica()
aviso_que_atravessa_uma_quebra_de_linha_some_e_devolve_os_seus_erros()
casa_em_nfc_e_devolve_posicoes_do_texto_original_nfd()
conta_em_utf16_com_emoji()
descarta_ausente_igual_e_ocorrencia_inexistente()
descarta_severity_desconhecida_e_campos_faltando()
drop_overlaps()
erro()
erro_dentro_de_aviso_fica_so_o_aviso()
filter_suggestions()
find_u16()
json_invalido()
keep()
lista_some_o_erro_e_o_aviso_que_trocam_a_entrada()
lista_troca_so_de_maiuscula_tambem_some_com_a_entrada_intacta_fica()
locate()
mantem_o_primeiro_de_cada_sobreposicao()
mk()
normalize()
Normalized
occurrence_invalida_vira_1()
ordena_por_start()
parse_suggestions()
prosa_com_lista_vazia()
so_erros_fica_so_o_erro()
sobreposicao_parcial_fica_so_o_primeiro_sem_erro()
span()
sug()
TEXT
tira_cercas_e_preenche_occurrence()
test_util.rs
block_on()
poll_once()
text_fields.rs
delay_label()
labels()
mount_text_fields()
saves()
select()
tone_label()
types.rs
ALL
CheckError
CheckRequest
CheckResult
.from()
CheckResultWire
.from()
detect_only_is_present_only_when_true()
Level
.as_str()
.fmt()
.parse()
Located
located_flattens_its_suggestion()
Message
messages_and_results_keep_their_shape()
PerProvider
.get()
.get_mut()
.index()
.index_mut()
ProviderId
.as_str()
.fmt()
.is_local()
.parse()
Settings
Severity
.as_str()
SiteConfig
Style
.as_str()
.fmt()
Suggestion
Tone
.as_str()
.parse()
wire_strings_are_the_typescript_ones()
utf16.rs
byte_at()
counts_code_units()
len16()
maps_offsets_to_bytes()
slice16()
slices()
background.js
sync()
content.js
options.js
popup.js
main.rs
build()
copy_dir()
main()
manifest()
root()
run()
size()
flake.nix
outputs()
fmt
fs
fs/promises
future
gleeunit
handle_check
hashmap
html
htmlelement
htmlinputelement
htmlselectelement
htmltablesectionelement
http
httpresponse
inputeventinit
io
is_combining_mark
jnienv
jscast
jsfuture
json
jstring
jsvalue
keyboardevent
lexical
@lexical/rich-text
list
local_pull
locate
models
mount
mount_text_fields
mutex
net
nodejs-bin.nix
node
gramatico.js
PtbrWriter()
os
path
pathbuf
permissionsext
pin
@playwright/test
poll
prefs
prelude
promise
provider_name
rc
refcell
render
response
result
rule_titles
same
save_settings
serialize
settings
severity
gramatico_content.gleam
bipr_module()
bipr_steps()
call()
data_errors()
description()
Eli5
errors()
exit()
gramatico_content_ffi.mjs
exit()
figures()
read()
revision()
write()
Figure
figure_rows()
figures()
install()
is_digit()
items()
join()
json_string()
lede()
Level
levels()
Link
links()
lit()
login()
main()
module()
numbered()
Origin
origin_errors()
origins()
output()
paragraph()
Planned
planned_errors()
preamble()
push()
read()
Recipe
recipe_name()
recipes()
revision()
Rule
rules()
section()
Step
steps()
title()
tsv()
usage()
write()
gramatico_content_test.gleam
main()
title_and_lede_test()
app.gleam
anchors()
awesome()
cover()
eli5()
figuras()
footer()
grafo_pill()
inline()
install()
level()
levels()
limits()
link()
made_with()
made_with_line()
optional()
origin()
output()
pdf_pill()
planned()
recipe()
recipes()
roadmap()
rule()
rules()
section()
smart_note()
step()
usage()
view()
whitepaper()
bipr.gleam
main()
render()
view()
content.gleam
Eli5
Figure
Level
Link
Origin
Planned
Recipe
Rule
Step
page.gleam
document()
titled()
prerender.gleam
main()
render()
gramatico_site_test.gleam
every_section_test()
main()
skill
slice16
spawn_local
state
string
suggestion
sync_sites_now
tcplistener
text
text_model
tone
unicodenormalization
url
value
view
waker
wasm_bindgen
watcher
weak
window
write
AGENTS.md
open in picasso's graph
picasso: labs/gleam-website ↗
open in picasso's graph
picasso: labs/ptbr-pdf ↗
open in picasso's graph
picasso: labs/ptbr-tools ↗
CHANGELOG.md
en.md
pt-BR.md
flake.lock
open in picasso's graph
picasso: labs/code-graph ↗
justfile
tools.lock
to-pdf.sh
pdf-bench.sh
justfile
open in picasso's graph
picasso: labs ↗
content.gleam
flake.nix
AGENTS.md
nodejs-bin.nix
flake.lock
CHANGELOG.md
en.md
pt-BR.md
justfile
tools.lock
to-pdf.sh
pdf-bench.sh
justfile
background.rs
providers.rs
overlay.rs
watcher.rs
gramatico_content.gleam
suggestions.rs
rules.rs
settings.rs
chrome.rs
popup.rs
provider_fields.rs
types.rs
text.rs
lib.rs
decisions.rs
pen.nix
lib.rs
overlay.rs
module()
helpers.ts
view.rs
card.rs
default.nix
ElMap
Inner
join()
block_on()
handle_check()
main()
view()
create()
.draw()
Level
android.rs
store.rs
content.spec.ts
by_id()
check()
gramatico_content_test.gleam
bipr.gleam
drawing()
Ext
.start()
inline()
Stored
render()
await_js()
.iter()
field_rects()
.new()
mk()
tsv()