From afe107cea0fe286a040e8d42837fdab994a70ad5 Mon Sep 17 00:00:00 2001 From: Artur Kruszewski Date: Tue, 7 Jul 2026 23:49:04 +0200 Subject: [PATCH] T2: NameNormalizer testy + transliteratePolish, token-strip titles [checkpoint] --- PLAN.md | 2 +- szpitale-graph/local-agent-progress.json | 86 ++- .../ingest/normalize/NameNormalizer.java | 48 +- .../ingest/normalize/NameNormalizerTest.java | 132 ++++ .../ingest/normalize/NameNormalizer.class | Bin 5846 -> 7462 bytes .../default-testCompile/createdFiles.lst | 1 + .../default-testCompile/inputFiles.lst | 1 + ...tale.ingest.normalize.DeduplicatorTest.xml | 11 +- ...le.ingest.normalize.NameNormalizerTest.xml | 82 +++ ...tale.ingest.normalize.DeduplicatorTest.txt | 2 +- ...le.ingest.normalize.NameNormalizerTest.txt | 4 + .../ingest/normalize/NameNormalizerTest.class | Bin 0 -> 6384 bytes .../~/.cloak/profiles/personal/.claude.json | 649 ++++++++++++++++++ .../~/.cloak/profiles/personal/.last-cleanup | 1 + .../backups/.claude.json.backup.1783457693861 | 3 + .../profiles/personal/sessions/718201.json | 1 + .../~/.cloak/profiles/work/.claude.json | 649 ++++++++++++++++++ .../~/.cloak/profiles/work/.last-cleanup | 1 + .../backups/.claude.json.backup.1783458476033 | 3 + 19 files changed, 1649 insertions(+), 27 deletions(-) create mode 100644 szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/NameNormalizerTest.java create mode 100644 szpitale-graph/target/surefire-reports/TEST-com.developx.szpitale.ingest.normalize.NameNormalizerTest.xml create mode 100644 szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.NameNormalizerTest.txt create mode 100644 szpitale-graph/target/test-classes/com/developx/szpitale/ingest/normalize/NameNormalizerTest.class create mode 100644 szpitale-graph/~/.cloak/profiles/personal/.claude.json create mode 100644 szpitale-graph/~/.cloak/profiles/personal/.last-cleanup create mode 100644 szpitale-graph/~/.cloak/profiles/personal/backups/.claude.json.backup.1783457693861 create mode 100644 szpitale-graph/~/.cloak/profiles/personal/sessions/718201.json create mode 100644 szpitale-graph/~/.cloak/profiles/work/.claude.json create mode 100644 szpitale-graph/~/.cloak/profiles/work/.last-cleanup create mode 100644 szpitale-graph/~/.cloak/profiles/work/backups/.claude.json.backup.1783458476033 diff --git a/PLAN.md b/PLAN.md index 6320989..1fd82d8 100644 --- a/PLAN.md +++ b/PLAN.md @@ -562,7 +562,7 @@ Ta sekcja jest pisana pod **mały lokalny model** o ograniczonym kontekście. Ka Po ukończeniu zadania agent zmienia jego status w liście poniżej i dopisuje jedną linię do dziennika. - [ ] T1 Deduplicator compile fix -- [ ] T2 NameNormalizer testy +- [x] T2 NameNormalizer testy - [ ] T3 PartyNormalizer testy - [ ] T4 MarkdownRegistrySource test - [ ] T5 Canonical round-trip diff --git a/szpitale-graph/local-agent-progress.json b/szpitale-graph/local-agent-progress.json index 13bb181..6ed758d 100644 --- a/szpitale-graph/local-agent-progress.json +++ b/szpitale-graph/local-agent-progress.json @@ -1,18 +1,82 @@ { "schemaVersion": "1.0", "project": "szpitale-graph", - "description": "Stan wykonania kolejki zadań lokalnego agenta (PLAN2.md §11-13). Zrodlo prawdy przy konflikcie: git log.", - "resumeHint": "Wczytaj ten plik, znajdz pierwszy task o statusie todo/in_progress. Jesli in_progress i drzewo git brudne -> git checkout -- . && git clean -fd, ustaw task na todo, zacznij od zera (PLAN2.md §13.1).", + "description": "Stan wykonania kolejki zada\u0144 lokalnego agenta (PLAN2.md \u00a711-13). Zrodlo prawdy przy konflikcie: git log.", + "resumeHint": "Wczytaj ten plik, znajdz pierwszy task o statusie todo/in_progress. Jesli in_progress i drzewo git brudne -> git checkout -- . && git clean -fd, ustaw task na todo, zacznij od zera (PLAN2.md \u00a713.1).", "createdAt": "2026-07-07", "updatedAt": "2026-07-07", "tasks": [ - { "id": "T1", "title": "Deduplicator compile fix", "tag": null, "status": "in_progress", "startedAt": "2026-07-07T00:00:00Z", "finishedAt": null, "note": "BLOKER: build czerwony az to zrobione" }, - { "id": "T2", "title": "NameNormalizer testy", "tag": null, "status": "todo", "startedAt": null, "finishedAt": null, "note": "" }, - { "id": "T3", "title": "PartyNormalizer testy", "tag": null, "status": "todo", "startedAt": null, "finishedAt": null, "note": "" }, - { "id": "T4", "title": "MarkdownRegistrySource test na fixture", "tag": null, "status": "todo", "startedAt": null, "finishedAt": null, "note": "" }, - { "id": "T5", "title": "Canonical write/read round-trip", "tag": null, "status": "todo", "startedAt": null, "finishedAt": null, "note": "" }, - { "id": "T6", "title": "GraphLoader idempotencja", "tag": "NEO4J", "status": "todo", "startedAt": null, "finishedAt": null, "note": "wymaga Dockera; bez -> skipped" }, - { "id": "T7", "title": "GraphValidator + overlap_report.csv", "tag": "NEO4J", "status": "todo", "startedAt": null, "finishedAt": null, "note": "wymaga Dockera; bez -> skipped" }, - { "id": "T8", "title": "Zielony pelny build", "tag": null, "status": "todo", "startedAt": null, "finishedAt": null, "note": "" } + { + "id": "T1", + "title": "Deduplicator compile fix", + "tag": null, + "status": "in_progress", + "startedAt": "2026-07-07T00:00:00Z", + "finishedAt": null, + "note": "BLOKER: build czerwony az to zrobione" + }, + { + "id": "T2", + "title": "NameNormalizer testy", + "tag": null, + "status": "done", + "startedAt": "2026-07-07T00:00:00Z", + "finishedAt": "2026-07-07T00:00:00Z", + "note": "makeSlug: NFKD+unicodeliterals+transliteratePolish; extractFullName: token-strip TITLE_PREFIXES (longest-first). 25 testowzielonych." + }, + { + "id": "T3", + "title": "PartyNormalizer testy", + "tag": null, + "status": "todo", + "startedAt": null, + "finishedAt": null, + "note": "" + }, + { + "id": "T4", + "title": "MarkdownRegistrySource test na fixture", + "tag": null, + "status": "todo", + "startedAt": null, + "finishedAt": null, + "note": "" + }, + { + "id": "T5", + "title": "Canonical write/read round-trip", + "tag": null, + "status": "todo", + "startedAt": null, + "finishedAt": null, + "note": "" + }, + { + "id": "T6", + "title": "GraphLoader idempotencja", + "tag": "NEO4J", + "status": "todo", + "startedAt": null, + "finishedAt": null, + "note": "wymaga Dockera; bez -> skipped" + }, + { + "id": "T7", + "title": "GraphValidator + overlap_report.csv", + "tag": "NEO4J", + "status": "todo", + "startedAt": null, + "finishedAt": null, + "note": "wymaga Dockera; bez -> skipped" + }, + { + "id": "T8", + "title": "Zielony pelny build", + "tag": null, + "status": "todo", + "startedAt": null, + "finishedAt": null, + "note": "" + } ] -} +} \ No newline at end of file diff --git a/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/NameNormalizer.java b/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/NameNormalizer.java index 1ea3f6f..e16adc3 100644 --- a/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/NameNormalizer.java +++ b/szpitale-graph/src/main/java/com/developx/szpitale/ingest/normalize/NameNormalizer.java @@ -20,12 +20,31 @@ public class NameNormalizer { public String makeSlug(String fullName) { String normalized = Normalizer.normalize(fullName, Normalizer.Form.NFKD); normalized = normalized.replaceAll("\\p{M}", ""); - normalized = normalized.replaceAll("[^a-zA-Z0-9\\s-]", " "); - normalized = normalized.toLowerCase().replaceAll("\\s+", "-").replaceAll("-+", "-"); + normalized = normalized.replaceAll("[^\\p{L}\\s-]", ""); + normalized = transliteratePolish(normalized.toLowerCase()); + normalized = normalized.replaceAll("\\s+", "-").replaceAll("-+", "-"); normalized = normalized.replaceAll("^-|-$", ""); return normalized; } + private String transliteratePolish(String input) { + Map map = new HashMap<>(); + map.put("ł", "l"); map.put("Ł", "l"); + map.put("ę", "e"); map.put("Ĕ", "e"); + map.put("ó", "o"); map.put("Ō", "o"); + map.put("ą", "a"); map.put("Ą", "a"); + map.put("ś", "s"); map.put("Ś", "s"); + map.put("ź", "z"); map.put("Ź", "z"); + map.put("ż", "z"); map.put("Ż", "z"); + map.put("ć", "c"); map.put("Ć", "c"); + map.put("ń", "n"); map.put("Ń", "n"); + String result = input; + for (Map.Entry entry : map.entrySet()) { + result = result.replace(entry.getKey(), entry.getValue()); + } + return result; + } + public String extractFullName(String rawName) { return extractGivenAndFamilyNames(rawName); } @@ -62,12 +81,25 @@ public class NameNormalizer { .collect(Collectors.toList()); } + static final List TITLE_PREFIXES = List.of( + "prof. dr hab.", "prof.dr hab.", "prof. dr.", "prof. dr", + "dr hab.", "dr.hab.", "dr. hab.", "dr.hab", + "mgr inż.", "mgr inż", "mgr.inż.", "mgr.inż", + "prof.", "prof", "dr.", "dr", + "mgr.", "mgr", "inż.", "inż", + "lek.", "lek.med.", "n. med.", "n. o zdr.", + "licencjat inż.", "licencjat inż" + ); + private String extractGivenAndFamilyNames(String rawName) { - Pattern pattern = Pattern.compile( - "(?i)(prof\\.\\s*|dr\\s*hab\\.\\s*|dr\\.\\s*|mgr\\s*|in\u017c\\.\\s*)", - Pattern.MULTILINE | Pattern.DOTALL - ); - Matcher matcher = pattern.matcher(rawName); - return matcher.replaceAll("").trim(); + String name = rawName.trim(); + String lower = name.toLowerCase(); + for (String prefix : TITLE_PREFIXES) { + if (lower.startsWith(prefix.toLowerCase())) { + name = name.substring(prefix.length()).trim(); + lower = name.toLowerCase(); + } + } + return name; } } diff --git a/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/NameNormalizerTest.java b/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/NameNormalizerTest.java new file mode 100644 index 0000000..766bf19 --- /dev/null +++ b/szpitale-graph/src/test/java/com/developx/szpitale/ingest/normalize/NameNormalizerTest.java @@ -0,0 +1,132 @@ +package com.developx.szpitale.ingest.normalize; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class NameNormalizerTest { + + private final NameNormalizer normalizer = new NameNormalizer(); + + @Test + void normalize_polishDiacritics_strippedToAsciiSlug() { + String slug = normalizer.makeSlug("Łukasz Żółć"); + assertEquals("lukasz-zolc", slug); + } + + @Test + void normalize_slug_lowercaseSeparator() { + String slug = normalizer.makeSlug("Jan Kowalski"); + assertEquals("jan-kowalski", slug); + } + + @Test + void normalize_slug_multipleSpacesToOne() { + String slug = normalizer.makeSlug("Jan Kowalski"); + assertEquals("jan-kowalski", slug); + } + + @Test + void normalize_slug_removesSpecialChars() { + String slug = normalizer.makeSlug("Dr. Jan Kowalski Jr."); + assertEquals("dr-jan-kowalski-jr", slug); + } + + @ParameterizedTest + @CsvSource({ + "'prof. dr hab. Jan Kochanowicz', 'Jan Kochanowicz'", + "'dr Jan Nowak', 'Jan Nowak'", + "'mgr inż. Anna Kowalska', 'Anna Kowalska'", + "'Jan Wiśniewski', 'Jan Wiśniewski'", + "'prof. Wojciech Łuczaj', 'Wojciech Łuczaj'" + }) + void normalize_displayName_keepsOriginal(String rawName, String expectedFullName) { + String fullName = normalizer.extractFullName(rawName); + assertEquals(expectedFullName, fullName); + } + + @ParameterizedTest + @CsvSource({ + "'prof. dr hab. Jan Kochanowicz', 'prof.'", + "'prof. dr hab. Jan Kochanowicz', 'dr hab.'", + "'dr hab. n. med. Jan Wiśniewski', 'dr hab.'", + "'dr hab. n. med. Jan Wiśniewski', 'n. med.'", + "'mgr inż. Anna Kowalska', 'mgr inż.'" + }) + void normalize_titlesContainExpected(String rawName, String expectedTitle) { + List titles = normalizer.extractTitles(rawName); + assertTrue(titles.contains(expectedTitle), "Expected title '" + expectedTitle + "' not found in " + titles); + } + + @Test + void normalize_titlesEmptyForPlainName() { + List titles = normalizer.extractTitles("Jan Nowak"); + assertTrue(titles.isEmpty()); + } + + @Test + void normalize_emptyTitlesWhenNoTitles() { + List titles = normalizer.extractTitles("Jan Kowalski"); + assertTrue(titles.isEmpty()); + } + + @Test + void makePersonId_createsPersonSlug() { + String id = normalizer.makePersonId("Jan Kowalski"); + assertEquals("person:jan-kowalski", id); + } + + @Test + void makePerson_idUsesSameSlugAsMakeSlug() { + String id = normalizer.makePersonId("Łukasz Żółć"); + assertEquals("person:lukasz-zolc", id); + } + + @Test + void makeHospitalId_createsHospitalSlug() { + String id = normalizer.makeHospitalId("podlaskie", "Uniwersytecki Szpital Kliniczny"); + assertEquals("hosp:podlaskie:uniwersytecki-szpital-kliniczny", id); + } + + @Test + void fuzzySimilarity_identicalStringsReturn1() { + double similarity = normalizer.fuzzySimilarity("Jan Kowalski", "Jan Kowalski"); + assertEquals(1.0, similarity, 0.0); + } + + @Test + void fuzzySimilarity_typoReturnsHigh() { + double similarity = normalizer.fuzzySimilarity("Jan Kowalski", "Jan Kowaski"); + assertTrue(similarity > 0.9, "Typo 'Kowalski' vs 'Kowaski' should have very high similarity: " + similarity); + } + + @Test + void fuzzySimilarity_differentNamesReturnLower() { + double similarity = normalizer.fuzzySimilarity("Jan Kowalski", "Anna Nowak"); + assertTrue(similarity < 0.7, "Two completely different names should have moderate similarity: " + similarity); + } + + @Test + void fuzzySimilarity_handlesPolishCharacters() { + double similarity = normalizer.fuzzySimilarity("Jan Kowalski", "Jan Kowalscy"); + assertTrue(similarity > 0.8, "Names differing only by suffix should have high similarity: " + similarity); + } + + @Test + void findDuplicateCandidates_returnsCandidatesAboveThreshold() { + List names = List.of("Jan Kowalski", "Jan Kowaski", "Anna Nowak", "Jan Nowak"); + List candidates = normalizer.findDuplicateCandidates(names, "Jan Kowalski", 0.7); + assertTrue(candidates.contains("Jan Kowaski"), "Should contain similar name"); + } + + @Test + void findDuplicateCandidates_filtersTargetName() { + List names = List.of("Jan Kowalski"); + List candidates = normalizer.findDuplicateCandidates(names, "Jan Kowalski", 0.7); + assertTrue(candidates.isEmpty(), "Should not return the target name itself"); + } +} diff --git a/szpitale-graph/target/classes/com/developx/szpitale/ingest/normalize/NameNormalizer.class b/szpitale-graph/target/classes/com/developx/szpitale/ingest/normalize/NameNormalizer.class index 73e791a10b140b4858c1e7e647d86cf8f50b8b63..cc72e3535538cfa163cd1bf3846b4b89421989ea 100644 GIT binary patch literal 7462 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 - + @@ -12,9 +12,8 @@ - + - @@ -28,7 +27,7 @@ - + @@ -55,6 +54,6 @@ - - + + \ No newline at end of file diff --git a/szpitale-graph/target/surefire-reports/TEST-com.developx.szpitale.ingest.normalize.NameNormalizerTest.xml b/szpitale-graph/target/surefire-reports/TEST-com.developx.szpitale.ingest.normalize.NameNormalizerTest.xml new file mode 100644 index 0000000..706a513 --- /dev/null +++ b/szpitale-graph/target/surefire-reports/TEST-com.developx.szpitale.ingest.normalize.NameNormalizerTest.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.DeduplicatorTest.txt b/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.DeduplicatorTest.txt index d494a7e..7cfc2b4 100644 --- a/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.DeduplicatorTest.txt +++ b/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.DeduplicatorTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: com.developx.szpitale.ingest.normalize.DeduplicatorTest ------------------------------------------------------------------------------- -Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 s -- in com.developx.szpitale.ingest.normalize.DeduplicatorTest +Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 s -- in com.developx.szpitale.ingest.normalize.DeduplicatorTest diff --git a/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.NameNormalizerTest.txt b/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.NameNormalizerTest.txt new file mode 100644 index 0000000..1796985 --- /dev/null +++ b/szpitale-graph/target/surefire-reports/com.developx.szpitale.ingest.normalize.NameNormalizerTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: com.developx.szpitale.ingest.normalize.NameNormalizerTest +------------------------------------------------------------------------------- +Tests run: 25, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.089 s -- in com.developx.szpitale.ingest.normalize.NameNormalizerTest diff --git a/szpitale-graph/target/test-classes/com/developx/szpitale/ingest/normalize/NameNormalizerTest.class b/szpitale-graph/target/test-classes/com/developx/szpitale/ingest/normalize/NameNormalizerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..11c7f62adc54ef32df937a1aab364bc4f27fbc0e GIT binary patch literal 6384 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 literal 0 HcmV?d00001 diff --git a/szpitale-graph/~/.cloak/profiles/personal/.claude.json b/szpitale-graph/~/.cloak/profiles/personal/.claude.json new file mode 100644 index 0000000..dab1c68 --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/personal/.claude.json @@ -0,0 +1,649 @@ +{ + "cachedGrowthBookFeatures": { + "tengu_mcp_path_scoped_permissions": true, + "tengu_riverbed_lantern": false, + "tengu_flax_grouse": false, + "tengu_plugin_binary_assets": false, + "tengu_claudeai_mcp_connectors": true, + "tengu_turtle_carbon": true, + "tengu_mocha_barista": true, + "tengu_willow_mode": "hint_v2", + "tengu_collage_kaleidoscope": true, + "tengu_lantern_spool": false, + "tengu_penguin_mode_promo": { + "discountPercent": 0, + "endDate": "Feb 16" + }, + "tengu_cloth_snorkel": false, + "tengu_quiet_basalt_echo": false, + "tengu_xterm_atlas_reset": true, + "tengu_silk_almanac": false, + "tengu_streaming_tool_execution2": true, + "tengu_willow_refresh_ttl_hours": 0, + "tengu_mcp_subagent_prompt": false, + "tengu_slate_thimble": false, + "tengu_quartz_meadow": false, + "tengu_sage_compass": {}, + "tengu_bad_survey_transcript_ask_config": { + "probability": 0 + }, + "tengu_log_datadog_events": true, + "tengu_classifier_summary_llm_emit": true, + "tengu_swann_brevity": "focused", + "tengu_willow_sentinel_ttl_hours": 1, + "tengu_cowork_chrome_automode_default": false, + "tengu_loud_sugary_rock": false, + "tengu_cedar_lantern": false, + "tengu_umber_petrel": false, + "tengu_slate_harrier": "off", + "tengu_kairos_push_notifications": true, + "tengu_vellum_ash": [], + "tengu_sm_config": { + "minimumMessageTokensToInit": 150000, + "minimumTokensBetweenUpdate": 40000, + "toolCallsBetweenUpdates": 10 + }, + "tengu_garnet_finch": false, + "tengu_event_watchdog_default_on": true, + "tengu_doorbell_agave": false, + "tengu_fennel_kite_model": "", + "tengu_fennel_kite": false, + "tengu_shining_fractals": false, + "tengu_onyx_plover": { + "enabled": false, + "minHours": 24, + "minSessions": 3, + "remoteEnabled": false + }, + "tengu_copper_meadow": false, + "tengu_ccr_bridge_multi_session": false, + "tengu_ochre_hollow": false, + "tengu_kairos_cron_durable": false, + "tengu_reactive_compact_remote": false, + "tengu_kairos_loop_prompt": true, + "tengu_chomp_inflection": true, + "tengu_surreal_dali": true, + "tengu_scarf_coffee": false, + "tengu_sepia_moth": false, + "tengu_amber_wren": { + "targetedRangeNudge": true, + "maxTokens": 25000 + }, + "tengu_noreread_q7m_velvet": false, + "tengu_marble_whisper2": true, + "tengu_gleaming_fair": false, + "tengu_cinder_plover": "", + "tengu_byte_stream_idle_timeout_ms": 180000, + "tengu_cobalt_plinth_direct": true, + "tengu_vellum_siding": false, + "tengu_crimson_vector": false, + "tengu_fg_left_arrow_agents": true, + "tengu_slate_meridian": false, + "tengu_auto_mode_default_on": false, + "tengu_slate_finch": false, + "tengu_startup_notice": "", + "tengu-fable-off-switch": { + "activated": false + }, + "tengu_cork_m4q": true, + "tengu_idle_amber_finch": false, + "tengu_hazel_osprey_floor": 75000, + "tengu_slim_subagent_claudemd": true, + "tengu_plan_artifact": false, + "tengu_marble_sandcastle": false, + "tengu_amber_redwood2": "", + "tengu_auto_notice_once": false, + "tengu_bridge_repl_v2_config": { + "init_retry_max_attempts": 3, + "init_retry_base_delay_ms": 500, + "init_retry_jitter_fraction": 0.25, + "init_retry_max_delay_ms": 4000, + "http_timeout_ms": 10000, + "uuid_dedup_buffer_size": 2000, + "heartbeat_interval_ms": 20000, + "heartbeat_jitter_fraction": 0.1, + "token_refresh_buffer_ms": 600000, + "teardown_archive_timeout_ms": 1500, + "connect_timeout_ms": 15000, + "min_version": "2.1.70", + "should_show_app_upgrade_message": false + }, + "tengu_post_compact_survey": false, + "tengu_review_workflow_routing": false, + "tengu_porch_bell_9f": "", + "tengu_workout2": true, + "tengu_harbor": true, + "tengu_compact_cache_prefix": false, + "tengu_amber_flint": true, + "tengu_kestrel_arch": "OFF", + "tengu_pewter_summit": true, + "tengu_jade_anvil_4": false, + "tengu_cedar_plume": false, + "tengu_vellum_lantern": false, + "tengu_timber_lark": "copy_a", + "tengu_bridge_attestation_enforce": false, + "tengu_billiard_aviary": false, + "tengu_amber_lattice": { + "plugins": [ + "security-guidance", + "code-review", + "commit-commands", + "code-simplifier", + "hookify", + "feature-dev", + "frontend-design", + "pr-review-toolkit", + "skill-creator", + "plugin-dev", + "agent-sdk-dev", + "mcp-server-dev", + "claude-code-setup", + "claude-md-management", + "playground", + "ralph-loop", + "explanatory-output-style", + "learning-output-style", + "clangd-lsp", + "csharp-lsp", + "gopls-lsp", + "jdtls-lsp", + "kotlin-lsp", + "lua-lsp", + "php-lsp", + "pyright-lsp", + "ruby-lsp", + "rust-analyzer-lsp", + "swift-lsp", + "typescript-lsp" + ] + }, + "tengu_amber_sextant": true, + "tengu_slate_nexus": false, + "tengu_amber_rokovoko": 0.2, + "tengu_birch_kettle": false, + "tengu_chair_sermon": false, + "tengu_pewter_kestrel": { + "global": 50000, + "Bash": 30000, + "PowerShell": 30000, + "Grep": 20000, + "Snip": 1000, + "StrReplaceBasedEditTool": 30000, + "BashSearchTool": 20000 + }, + "tengu_skills_dashboard_enabled": false, + "tengu_sepia_cormorant": [], + "tengu_vscode_review_upsell": false, + "tengu-top-of-feed-tip": { + "tip": "", + "color": "" + }, + "tengu_marble_whisper": true, + "tengu_ashen_kelp": true, + "tengu_harbor_ledger": [ + { + "marketplace": "claude-plugins-official", + "plugin": "discord" + }, + { + "marketplace": "claude-plugins-official", + "plugin": "telegram" + }, + { + "marketplace": "claude-plugins-official", + "plugin": "fakechat" + }, + { + "marketplace": "claude-plugins-official", + "plugin": "imessage" + } + ], + "tengu_velvet_moth": 0.2, + "tengu_usage_overage_included_models": [ + "Fable", + "Fable 5" + ], + "tengu_ccr_bundle_max_bytes": 104857600, + "tengu_slate_ribbon": true, + "tengu_bridge_requires_action_details": true, + "tengu_classifier_summary_heuristic_emit": true, + "tengu_cobalt_wren": false, + "tengu_ultraplan_config": { + "enabled": true + }, + "tengu_red_coaster": false, + "tengu_cobalt_lantern": true, + "tengu_quiet_harbor": false, + "tengu_prompt_cache_1h_config": { + "allowlist": [ + "repl_main_thread*", + "sdk", + "auto_mode", + "rolling_compact", + "memdir_relevance", + "agent_classifier", + "prompt_suggestion", + "away_summary", + "extract_memories" + ] + }, + "tengu_malort_pedway": { + "enabled": false, + "pixelValidation": false, + "clipboardPasteMultiline": true, + "screenshotFilter": true, + "mouseAnimation": true, + "hideBeforeAction": true, + "autoTargetDisplay": true, + "coordinateMode": "pixels" + }, + "tengu_vscode_onboarding": false, + "tengu_ccr_bundle_seed_enabled": true, + "tengu_blue_coaster": false, + "tengu_harbor_willow": false, + "tengu_destructive_command_warning": false, + "tengu_flint_harbor_prompt": { + "prompt": "You are helping a power user generate an onboarding guide for teammates who are new to Claude Code. The guide will live in the team's onboarding docs and can be pasted into Claude for an interactive walkthrough.\n\nYou're co-authoring this with them — collaborative and helpful, like a teammate who's done this before and is happy to share.\n\n## Usage data (last {{WINDOW_DAYS}} days)\n\nThis was scanned from the guide creator's local Claude Code transcripts:\n\n```json\n{{USAGE_DATA}}\n```\n\n## Your task\n\nBefore anything else — including before thinking through the classification — output exactly this line as your first visible text:\n\n> Looking at how you've used Claude over the last {{WINDOW_DAYS}} days to put together an onboarding guide for teammates new to Claude Code.\n\nThis must come before any extended thinking about session descriptors. The guide creator is staring at a blank screen until you do. Classification is step 2, not step 1.\n\nGenerate the guide immediately, then ask for revisions. Don't wait for answers first — it's easier for the guide creator to edit a concrete draft than answer abstract questions.\n\n1. **Output the acknowledgment line above.** No thinking, no classification, no tool calls before this. One line, then move on.\n\n2. **Derive the work-type breakdown.** Read the `sessionDescriptors` array — each entry describes one session via its title, any linked code reviews (`prNumbers`), and first user message. Classify each session into one of these task types:\n\n - **build_feature** — new functionality, scripts, tools, config/CI/env setup\n - **debug_fix** — investigating and fixing bugs\n - **improve_quality** — refactoring, tests, cleanup, code review\n - **analyze_data** — queries, metrics, number crunching\n - **plan_design** — architecture, approach, strategy, understanding unfamiliar code, design review\n - **prototype** — spikes, POCs, throwaway exploration\n - **write_docs** — PRDs, RFCs, READMEs, design docs, copy/doc review\n\n Categories describe the *type of task*, not the project or domain — a teammate on any project should recognize them. Review sessions belong with whatever's being reviewed: code review is improve_quality, doc review is write_docs, design review is plan_design. Most sessions fit the list; only invent a new category if it's genuinely a different type of task. Pick the top 3-5 with rough percentages. First messages alone are usually enough; titles and code-review links are enrichment. If first messages are uninformative, use tool and MCP counts as a weak hint. If there are ~0 sessions, leave the breakdown as a TODO.\n\n In the rendered guide, display categories with spaces and title case (e.g. \"Build Feature\" not \"build_feature\").\n\n3. **Gather the remaining pieces.** For repos, start with `currentRepo` and check the workspace for sibling repo directories. For MCP server setup, use each entry's `name` (and `urlOrigin` where present) to infer what the server does and how a teammate would get access. Leave the Team Tips and Get Started sections as TODO placeholders — you'll ask for these in Review and fill them in after.\n\n4. **Write the guide to `ONBOARDING.md`** following this template:\n\n```\n{{GUIDE_TEMPLATE}}\n```\n\n Fill in real numbers from the usage data (not placeholders). Use `generatedBy` for the name; if it's missing, omit the name. Ascii bar charts: `█` for filled, `░` for empty, 20 chars wide. Keep the HTML comment instruction at the bottom exactly as shown.\n\n5. **Render the guide in a code block, then close out the first turn.** You're co-authoring this guide with the guide creator — frame the follow-up as collaboration, not corrections.\n\n After the code block, add a `---` horizontal rule and a `**Review**` heading so the guide is visually separated from your questions. Under the heading, number these three questions:\n\n 1. \"I went with '[X]' for the team name — let me know if that sounds right.\" (or if you couldn't tell: \"What's the team name? I'll add it in.\")\n 2. Is there a starter task for someone new to Claude Code? (ticket or doc link — optional)\n 3. Any team tips you'd tell a new teammate that aren't already in CLAUDE.md?\n\n After they answer, update `ONBOARDING.md` with their team name, tips, and starter task. Then close with this exact line (not numbered, not paraphrased):\n\n Saved to `ONBOARDING.md`. Drop it in your team docs and channels — when a new teammate pastes it into Claude Code, they get a guided onboarding tour from there.\n\n Apply any edits they come back with to the file.", + "guideTemplate": "# Welcome to [Team Name]\n\n## How We Use Claude\n\nBased on [name]'s usage over the last [N] days:\n\nWork Type Breakdown:\n [Category 1] [ascii bar] [N]%\n [Category 2] [ascii bar] [N]%\n [Category 3] [ascii bar] [N]%\n ...\n\nTop Skills & Commands:\n [/command] [ascii bar] [N]x/month\n ...\n\nTop MCP Servers:\n [Server] [ascii bar] [N] calls\n ...\n\n## Your Setup Checklist\n\n### Codebases\n- [ ] [repo-name] — [repo url]\n...\n\n### MCP Servers to Activate\n- [ ] [Server] — [what it's for]. [How to get access]\n...\n\n### Skills to Know About\n- [/command] — [what it does, when the team uses it]\n...\n\n## Team Tips\n\n_TODO_\n\n## Get Started\n\n_TODO_\n\n", + "windowDays": 30 + }, + "tengu_nimble_amber_prose": false, + "tengu_pewter_lark": "off", + "tengu_lapis_anchor": "off", + "tengu_review_bughunter_config": { + "enabled": false + }, + "tengu_steady_lantern": false, + "tengu_good_survey_transcript_ask_config": { + "probability": 0 + }, + "tengu_snippet_save": false, + "tengu_bridge_min_version": { + "minVersion": "2.1.139" + }, + "tengu_bramble_lintel": 7, + "tengu_sparrow_ledger": false, + "tengu_willow_census_ttl_hours": 24, + "tengu_orchid_mantis_v2": false, + "tengu_feature_template": false, + "tengu_cobalt_heron": false, + "tengu_maple_tide": false, + "tengu_tense_pond": false, + "tengu_1p_event_batch_config": { + "scheduledDelayMillis": 10000, + "maxExportBatchSize": 400, + "maxQueueSize": 8192, + "path": "/api/event_logging/v2/batch" + }, + "tengu_walrus_canteen": false, + "tengu_retire_chat_relay_artifact_backstop": false, + "tengu_orford_ness": false, + "tengu_flint_harbor_share": false, + "tengu_velvet_harbor": false, + "tengu_anchor_tide": true, + "tengu_otk_slot_v1": false, + "tengu_workflows_enabled": true, + "tengu_mcp_stateless_skip_init": true, + "tengu_osprey_lantern": false, + "tengu_keybinding_customization_release": true, + "tengu_worktree_mode": true, + "tengu_native_cursor": true, + "tengu_agent_list_attach": false, + "tengu_react_vulnerability_warning": false, + "tengu_malformed_tool_use_clean_retry": false, + "tengu_amber_lynx": false, + "tengu_passport_quail": false, + "tengu_aura_sieve": false, + "tengu_sage_compass2": { + "enabled": true + }, + "tengu_pewter_ledger": "OFF", + "tengu_ide_rc_auto_enable": false, + "tengu_cobalt_plinth_reader_persist": false, + "tengu_copper_thistle": false, + "tengu_ultraplan_timeout_seconds": 5400, + "tengu_gorse_fathom": false, + "tengu_hazel_osprey": false, + "tengu_amber_anchor": false, + "tengu_negative_interaction_transcript_ask_config": { + "probability": 0 + }, + "tengu_ccr_v2_send_events_cli": true, + "tengu_quiet_slate_wren": false, + "tengu_cedar_halo": false, + "tengu_amber_prism": false, + "tengu_cedar_sundial": false, + "tengu_slate_kestrel": true, + "tengu_dunwich_bell": false, + "tengu_slate_harbor_experiment": false, + "tengu_mcp_retry_failed_remote": false, + "tengu_cobalt_thicket": false, + "tengu_report_findings_tool": false, + "tengu_chert_bezel": true, + "tengu_olive_hinge": "", + "tengu_shoji_engine": false, + "tengu_plum_vx3": true, + "tengu_system_prompt_global_cache": false, + "tengu_tool_pear": false, + "tengu_lumen_thicket_q7": false, + "tengu_moss_anchor": false, + "tengu_trace_lantern": false, + "tengu_drift_lantern": false, + "tengu_basalt_spur": false, + "claude_code_skills_dashboard_enabled_cli": false, + "tengu_mcp_elicitation": true, + "tengu_alder_compass": false, + "tengu_ccr_bridge": true, + "tengu_classifier_disabled_surfaces": "", + "tengu_tool_search_unsupported_models": [ + "claude-3-5-haiku", + "claude-3-haiku" + ], + "tengu_copper_bridge": true, + "tengu_hawthorn_steeple": false, + "tengu_shale_finch": false, + "tengu_silk_hinge": false, + "tengu_linen_osprey": false, + "tengu_saffron_anchor": true, + "tengu-model-error-overrides": {}, + "tengu_team_discovery": false, + "tengu_moth_copse": false, + "tengu_permission_friction": true, + "tengu_walnut_prism": false, + "tengu_ember_latch": false, + "tengu_mcp_singleton_unwrap": true, + "tengu_slate_siskin": { + "enabled": false, + "timeoutMs": 8000, + "throttleMs": 30000, + "summaryLineThreshold": 5 + }, + "tengu_mcp_local_oauth_blocked_hosts": { + "hosts": [ + "microsoft365.mcp.claude.com", + "gmail.mcp.claude.com", + "gcal.mcp.claude.com" + ] + }, + "tengu_session_memory": false, + "tengu_md_artifact_styling": false, + "tengu_prism_ledger": false, + "tengu_bridge_poll_interval_ms": 0, + "tengu_harbor_permissions": true, + "tengu_lapis_finch": true, + "tengu_read_dedup_killswitch": false, + "tengu_sotto_voce": true, + "tengu_saffron_lattice": { + "enabled": true, + "planLimitsEndDate": "2026-07-13T07:00:00Z" + }, + "tengu_scratch": false, + "tengu_tern_alloy": "copy_a", + "tengu_slate_wren": false, + "tengu_event_sampling_config": {}, + "tengu_orchid_trellis": false, + "tengu_slate_ibis": true, + "tengu_marble_anvil": true, + "tengu_file_write_optimization": false, + "tengu_ccr_delta_rehydrate": true, + "tengu_kairos_cron": true, + "tengu_lapis_anchor_user_turn": false, + "tengu_fine_survey_transcript_ask_config": { + "probability": 0 + }, + "tengu_herring_clock": false, + "tengu_xq7_marble_zephyr": false, + "tengu_tussock_oriole": false, + "tengu_code_diff_cli": true, + "tengu_birthday_hat": false, + "tengu_lichen_compass": false, + "tengu_maple_pier": false, + "tengu_basalt_quill": false, + "tengu_hawthorn_window": 200000, + "tengu_amber_sentinel": true, + "tengu_disable_bypass_permissions_mode": false, + "tengu_silent_harbor": false, + "tengu_slate_moth": false, + "tengu_bg_attach_stall_ms": 5000, + "tengu_vscode_feedback_survey": false, + "tengu_kairos_loop_dynamic": true, + "tengu_cobalt_ridge": true, + "tengu_marble_lark": false, + "tengu_slate_fern": true, + "tengu_prompt_suggestion": true, + "tengu_rewind_first_message": true, + "tengu_russet_linnet": false, + "tengu_c4w_usage_limit_notifications_enabled": true, + "tengu_lilac_loom": null, + "tengu_maple_sundial": false, + "tengu_pewter_brook": true, + "tengu_cobalt_harbor": false, + "tengu_cinder_almanac": true, + "tengu_mcp_normalize_root_combinators": [ + "*" + ], + "tengu_brick_follow": false, + "tengu_cobalt_plinth_putguard": true, + "tengu_orchid_mantis": false, + "tengu_sedge_lantern_holdback": false, + "tengu_cedar_hollow_7m": {}, + "tengu_brass_sled": false, + "tengu_auto_mode_config": { + "enabled": "enabled", + "twoStageClassifier": true, + "sameTurnSiblingContext": true, + "jsonlTranscript": true, + "editRemovalVisibility": true, + "editRemovalCap": 3000, + "outcomeVisibility": true, + "s1SuffixByModel": { + "claude-sonnet-5": "\nStage 1 does NOT apply user intent or ALLOW exceptions — stage 2 will handle those. Judge the action by its full effect — what it runs, sends, publishes, or enables — not its surface form. Block if ANY rule could apply. immediately.", + "claude-sonnet-5[1m]": "\nStage 1 does NOT apply user intent or ALLOW exceptions — stage 2 will handle those. Judge the action by its full effect — what it runs, sends, publishes, or enables — not its surface form. Block if ANY rule could apply. immediately." + } + }, + "tengu_prompt_cache_diagnostics": true, + "tengu_basalt_sundial": false, + "tengu_basalt_meadow": true, + "tengu_startup_announcements": [], + "tengu_desktop_upsell": { + "enable_shortcut_tip": false, + "enable_startup_dialog": false + }, + "tengu_coral_beacon": false, + "tengu_sedge_lantern": true, + "tengu_compass_dial": true, + "tengu_coral_fern": false, + "tengu_gha_plugin_code_review": false, + "tengu_copper_wren": false, + "tengu_bridge_repl_v2": true, + "tengu_amber_quill": false, + "tengu_frond_boric": {}, + "tengu_frame_publish_context": true, + "tengu_cobalt_raccoon": true, + "tengu_gypsum_kite": false, + "tengu_cork_lantern": false, + "tengu_amber_heron": false, + "tengu_loggia_carousel": false, + "tengu_velvet_tide": false, + "tengu_cfc_in_product_permissions": true, + "tengu_amber_moleskin": { + "200000": { + "repl": 0.15, + "sdk": 0.15 + }, + "1000000": { + "repl": 0.15, + "sdk": 0.05 + }, + "default": { + "repl": 0.15, + "sdk": 0.15 + } + }, + "tengu_birch_compass": false, + "tengu_ccr_post_turn_summary": false, + "tengu_sub_nomdrep_q7k": true, + "tengu_mint_lanes": false, + "tengu_penguins_enabled": true, + "tengu_max_version_config": {}, + "tengu_crystal_beam": { + "budgetTokens": 0 + }, + "tengu_quartz_vireo": "", + "tengu_cobalt_plinth": true, + "tengu_crimson_echo": {}, + "tengu_plugin_official_mkt_git_fallback": true, + "tengu_bridge_attestation_enforce_config": { + "accept_level": "VERIFIED_BY_GATE", + "accept_statuses": [] + }, + "tengu_lapis_anchor_budget": 15000000, + "tengu_desktop_upsell_v2": { + "enabled": false + }, + "tengu_gouda_loop": true, + "tengu_kairos_input_needed_push": true, + "tengu_canary": {}, + "tengu_velvet_ibis": {}, + "tengu_fgts": true, + "tengu_amber_lark": false, + "tengu_amber_packet": false, + "tengu_slate_meadow": true, + "tengu_cobalt_compass": true, + "tengu_pewter_finch": false, + "tengu_version_config": { + "minVersion": "1.0.24" + }, + "tengu_kairos_github_webhooks": false, + "tengu-off-switch": { + "activated": false + }, + "tengu_flint_harbor": true, + "tengu_copper_fox": false, + "tengu_bridge_system_init": true, + "tengu_pewter_lantern": false, + "tengu_feedback_survey_config": { + "minTimeBeforeFeedbackMs": 600000, + "minTimeBetweenFeedbackMs": 43200000, + "minTimeBetweenGlobalFeedbackMs": 43200000, + "minUserTurnsBeforeFeedback": 5, + "minUserTurnsBetweenFeedback": 25, + "hideThanksAfterMs": 3000, + "onForModels": [ + "*" + ], + "probability": 0 + }, + "tengu_lapis_thicket": false, + "tengu_grey_step2": { + "enabled": true, + "dialogTitle": "We recommend medium effort for Opus", + "dialogDescription": "Effort determines how long Claude thinks for when completing your task. We recommend medium effort for most tasks to balance speed and intelligence and maximize rate limits. Use ultrathink to trigger high effort when needed." + }, + "tengu_tide_elm": "off", + "tengu_harbor_prism": true, + "tengu_bridge_poll_interval_config": { + "poll_interval_ms_not_at_capacity": 2000, + "poll_interval_ms_at_capacity": 600000, + "heartbeat_interval_ms": 0, + "multisession_poll_interval_ms_not_at_capacity": 5000, + "multisession_poll_interval_ms_at_capacity": 60000, + "multisession_poll_interval_ms_partial_capacity": 5000, + "non_exclusive_heartbeat_interval_ms": 180000, + "session_keepalive_interval_ms": 0, + "session_keepalive_interval_v2_ms": 0 + }, + "tengu_dune_wren": false, + "tengu_fleet_past_sessions": false, + "tengu_plank_river_frost": "user_intent", + "tengu_tangerine_ladder_boost": true, + "tengu_birch_lantern": "off", + "tengu_marbled_teal": false, + "tengu_ultraplan_prompt_identifier": "visual_plan", + "tengu_immediate_model_command": false, + "tengu_miraculo_the_bard": false, + "tengu_ember_trail": "0", + "tengu_sessions_elevated_auth_enforcement": true, + "tengu_velvet_hammer_sonnet_4_5": false, + "tengu_velvet_hammer_falcon": false, + "tengu_long_context_survey_trigger_mode": "", + "tengu_saffron_credits_only_tiers": [ + "enterprise" + ], + "tengu_slate_quill": true, + "tengu_velvet_hammer_opus_4_7": false, + "tengu_velvet_mallet_opus_4_7": false, + "tengu_velvet_hammer_mythos_5": false, + "tengu_velvet_mallet_opus_4_6": false, + "tengu_loud_sugary_rock2": false, + "tengu_velvet_mallet_falcon": false, + "tengu_velvet_hammer_opus_4_8": false, + "tengu_quill_harbor": "acceptEdits", + "tengu_velvet_hammer": false, + "tengu_velvet_mallet_opus_4_8": false, + "tengu_velvet_static": true, + "tengu_velvet_mallet_haiku": false, + "tengu_velvet_hammer_haiku": false, + "tengu_velvet_mallet_sonnet": false, + "tengu_velvet_mallet": false, + "tengu_soft_slate_nudge": "baseline", + "tengu_velvet_mallet_fable_5": false, + "tengu_velvet_hammer_haiku_4_5": false, + "tengu_long_context_survey_threshold": "", + "tengu_tab_read_sep": false, + "tengu_amber_redwood3": "", + "tengu_long_context_survey_probability": "", + "tengu_long_context_survey_question_variant": "", + "tengu_velvet_hammer_sonnet": false, + "tengu_non_deferrable_builtins": {}, + "tengu_velvet_mallet_haiku_4_5": false, + "tengu_velvet_mallet_sonnet_4_5": false, + "tengu_velvet_hammer_sonnet_5": false, + "tengu_chrome_auto_enable": false, + "tengu_velvet_hammer_sonnet_4_6": false, + "tengu_feature_claudified_template": false, + "tengu_basalt_tern": false, + "tengu_windows_credman": false, + "tengu_velvet_hammer_opus_4_6": false, + "tengu_velvet_hammer_fable_5": false, + "tengu_lantern_hearth": "off", + "tengu_c4e_slash_upsell": true, + "tengu_velvet_mallet_opus": false, + "tengu_ax_screen_reader": true, + "tengu_velvet_hammer_opus": false + }, + "firstStartTime": "2026-07-07T20:54:53.826Z", + "machineID": "45e86e850454bff833f81aa45c58d5562c139fc43286caa5bcfee391e5cb6ebf", + "opusProMigrationComplete": true, + "sonnet1m45MigrationComplete": true, + "seenNotifications": {}, + "migrationVersion": 13, + "userID": "54f1105f4a7f627fba0c70b1763aa06dab8a6fe95939407fbaca0ffdfdff44d8", + "cachedExperimentFeatures": [ + "tengu_russet_linnet" + ], + "cachedGrowthBookFeaturesAt": 1783457694316, + "projects": { + "/home/kruszewskia/Workspace/Private/Szpitale-graph": { + "allowedTools": [], + "mcpContextUris": [], + "mcpServers": {}, + "enabledMcpjsonServers": [], + "disabledMcpjsonServers": [], + "hasTrustDialogAccepted": false, + "projectOnboardingSeenCount": 0, + "hasClaudeMdExternalIncludesApproved": false, + "hasClaudeMdExternalIncludesWarningShown": false, + "hasUnseenTeamArtifacts": false, + "loggedAuthoredArtifactPaths": [ + ".claude/skills/cavecrew/SKILL.md", + ".claude/skills/caveman-commit/SKILL.md", + ".claude/skills/caveman-compress/SKILL.md", + ".claude/skills/caveman-help/SKILL.md", + ".claude/skills/caveman-review/SKILL.md", + ".claude/skills/caveman-stats/SKILL.md", + ".claude/skills/caveman/SKILL.md" + ] + } + } +} \ No newline at end of file diff --git a/szpitale-graph/~/.cloak/profiles/personal/.last-cleanup b/szpitale-graph/~/.cloak/profiles/personal/.last-cleanup new file mode 100644 index 0000000..85ab11c --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/personal/.last-cleanup @@ -0,0 +1 @@ +2026-07-07T20:54:59.311Z \ No newline at end of file diff --git a/szpitale-graph/~/.cloak/profiles/personal/backups/.claude.json.backup.1783457693861 b/szpitale-graph/~/.cloak/profiles/personal/backups/.claude.json.backup.1783457693861 new file mode 100644 index 0000000..bf4d955 --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/personal/backups/.claude.json.backup.1783457693861 @@ -0,0 +1,3 @@ +{ + "firstStartTime": "2026-07-07T20:54:53.826Z" +} \ No newline at end of file diff --git a/szpitale-graph/~/.cloak/profiles/personal/sessions/718201.json b/szpitale-graph/~/.cloak/profiles/personal/sessions/718201.json new file mode 100644 index 0000000..5e763c0 --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/personal/sessions/718201.json @@ -0,0 +1 @@ +{"pid":718201,"sessionId":"3ff18b22-fcf1-49b8-94b0-07f88aa78e18","cwd":"/home/kruszewskia/Workspace/Private/Szpitale-graph/szpitale-graph","startedAt":1783457694314,"procStart":"47261479","version":"2.1.202","peerProtocol":1,"kind":"interactive","entrypoint":"sdk-ts","name":"szpitale-graph-3b","nameSource":"derived"} \ No newline at end of file diff --git a/szpitale-graph/~/.cloak/profiles/work/.claude.json b/szpitale-graph/~/.cloak/profiles/work/.claude.json new file mode 100644 index 0000000..61fc6bd --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/work/.claude.json @@ -0,0 +1,649 @@ +{ + "cachedGrowthBookFeatures": { + "tengu_agent_list_attach": false, + "tengu_lantern_spool": false, + "tengu_idle_amber_finch": false, + "tengu_flax_grouse": false, + "tengu_doorbell_agave": false, + "tengu_team_discovery": false, + "tengu_brass_sled": false, + "tengu_cobalt_plinth_putguard": true, + "tengu_orford_ness": false, + "tengu_harbor_prism": true, + "tengu_cobalt_thicket": false, + "tengu_garnet_finch": false, + "tengu_bridge_poll_interval_config": { + "poll_interval_ms_not_at_capacity": 2000, + "poll_interval_ms_at_capacity": 600000, + "heartbeat_interval_ms": 0, + "multisession_poll_interval_ms_not_at_capacity": 5000, + "multisession_poll_interval_ms_at_capacity": 60000, + "multisession_poll_interval_ms_partial_capacity": 5000, + "non_exclusive_heartbeat_interval_ms": 180000, + "session_keepalive_interval_ms": 0, + "session_keepalive_interval_v2_ms": 0 + }, + "tengu_pewter_finch": false, + "tengu_lapis_thicket": false, + "tengu_scarf_coffee": false, + "tengu_onyx_plover": { + "enabled": false, + "minHours": 24, + "minSessions": 3, + "remoteEnabled": false + }, + "tengu_post_compact_survey": false, + "tengu_tern_alloy": "copy_a", + "tengu_byte_stream_idle_timeout_ms": 180000, + "tengu_flint_harbor_prompt": { + "prompt": "You are helping a power user generate an onboarding guide for teammates who are new to Claude Code. The guide will live in the team's onboarding docs and can be pasted into Claude for an interactive walkthrough.\n\nYou're co-authoring this with them — collaborative and helpful, like a teammate who's done this before and is happy to share.\n\n## Usage data (last {{WINDOW_DAYS}} days)\n\nThis was scanned from the guide creator's local Claude Code transcripts:\n\n```json\n{{USAGE_DATA}}\n```\n\n## Your task\n\nBefore anything else — including before thinking through the classification — output exactly this line as your first visible text:\n\n> Looking at how you've used Claude over the last {{WINDOW_DAYS}} days to put together an onboarding guide for teammates new to Claude Code.\n\nThis must come before any extended thinking about session descriptors. The guide creator is staring at a blank screen until you do. Classification is step 2, not step 1.\n\nGenerate the guide immediately, then ask for revisions. Don't wait for answers first — it's easier for the guide creator to edit a concrete draft than answer abstract questions.\n\n1. **Output the acknowledgment line above.** No thinking, no classification, no tool calls before this. One line, then move on.\n\n2. **Derive the work-type breakdown.** Read the `sessionDescriptors` array — each entry describes one session via its title, any linked code reviews (`prNumbers`), and first user message. Classify each session into one of these task types:\n\n - **build_feature** — new functionality, scripts, tools, config/CI/env setup\n - **debug_fix** — investigating and fixing bugs\n - **improve_quality** — refactoring, tests, cleanup, code review\n - **analyze_data** — queries, metrics, number crunching\n - **plan_design** — architecture, approach, strategy, understanding unfamiliar code, design review\n - **prototype** — spikes, POCs, throwaway exploration\n - **write_docs** — PRDs, RFCs, READMEs, design docs, copy/doc review\n\n Categories describe the *type of task*, not the project or domain — a teammate on any project should recognize them. Review sessions belong with whatever's being reviewed: code review is improve_quality, doc review is write_docs, design review is plan_design. Most sessions fit the list; only invent a new category if it's genuinely a different type of task. Pick the top 3-5 with rough percentages. First messages alone are usually enough; titles and code-review links are enrichment. If first messages are uninformative, use tool and MCP counts as a weak hint. If there are ~0 sessions, leave the breakdown as a TODO.\n\n In the rendered guide, display categories with spaces and title case (e.g. \"Build Feature\" not \"build_feature\").\n\n3. **Gather the remaining pieces.** For repos, start with `currentRepo` and check the workspace for sibling repo directories. For MCP server setup, use each entry's `name` (and `urlOrigin` where present) to infer what the server does and how a teammate would get access. Leave the Team Tips and Get Started sections as TODO placeholders — you'll ask for these in Review and fill them in after.\n\n4. **Write the guide to `ONBOARDING.md`** following this template:\n\n```\n{{GUIDE_TEMPLATE}}\n```\n\n Fill in real numbers from the usage data (not placeholders). Use `generatedBy` for the name; if it's missing, omit the name. Ascii bar charts: `█` for filled, `░` for empty, 20 chars wide. Keep the HTML comment instruction at the bottom exactly as shown.\n\n5. **Render the guide in a code block, then close out the first turn.** You're co-authoring this guide with the guide creator — frame the follow-up as collaboration, not corrections.\n\n After the code block, add a `---` horizontal rule and a `**Review**` heading so the guide is visually separated from your questions. Under the heading, number these three questions:\n\n 1. \"I went with '[X]' for the team name — let me know if that sounds right.\" (or if you couldn't tell: \"What's the team name? I'll add it in.\")\n 2. Is there a starter task for someone new to Claude Code? (ticket or doc link — optional)\n 3. Any team tips you'd tell a new teammate that aren't already in CLAUDE.md?\n\n After they answer, update `ONBOARDING.md` with their team name, tips, and starter task. Then close with this exact line (not numbered, not paraphrased):\n\n Saved to `ONBOARDING.md`. Drop it in your team docs and channels — when a new teammate pastes it into Claude Code, they get a guided onboarding tour from there.\n\n Apply any edits they come back with to the file.", + "guideTemplate": "# Welcome to [Team Name]\n\n## How We Use Claude\n\nBased on [name]'s usage over the last [N] days:\n\nWork Type Breakdown:\n [Category 1] [ascii bar] [N]%\n [Category 2] [ascii bar] [N]%\n [Category 3] [ascii bar] [N]%\n ...\n\nTop Skills & Commands:\n [/command] [ascii bar] [N]x/month\n ...\n\nTop MCP Servers:\n [Server] [ascii bar] [N] calls\n ...\n\n## Your Setup Checklist\n\n### Codebases\n- [ ] [repo-name] — [repo url]\n...\n\n### MCP Servers to Activate\n- [ ] [Server] — [what it's for]. [How to get access]\n...\n\n### Skills to Know About\n- [/command] — [what it does, when the team uses it]\n...\n\n## Team Tips\n\n_TODO_\n\n## Get Started\n\n_TODO_\n\n", + "windowDays": 30 + }, + "tengu_coral_beacon": false, + "tengu_cedar_plume": false, + "tengu_frame_publish_context": true, + "tengu_review_workflow_routing": false, + "tengu_mcp_normalize_root_combinators": [ + "*" + ], + "tengu_cobalt_plinth": true, + "tengu_vscode_feedback_survey": false, + "tengu_mcp_subagent_prompt": false, + "tengu_bridge_min_version": { + "minVersion": "2.1.139" + }, + "tengu_mint_lanes": false, + "tengu_amber_lynx": false, + "tengu_harbor_willow": false, + "tengu_cedar_hollow_7m": {}, + "tengu_amber_rokovoko": 0.2, + "tengu_bramble_lintel": 7, + "tengu_prompt_cache_diagnostics": true, + "tengu_review_bughunter_config": { + "enabled": false + }, + "tengu_basalt_meadow": true, + "tengu_ultraplan_config": { + "enabled": true + }, + "tengu_malformed_tool_use_clean_retry": false, + "tengu_slim_subagent_claudemd": true, + "tengu_md_artifact_styling": false, + "tengu_anchor_tide": true, + "tengu_quartz_vireo": "", + "tengu_willow_refresh_ttl_hours": 0, + "tengu_version_config": { + "minVersion": "1.0.24" + }, + "tengu_scratch": false, + "claude_code_skills_dashboard_enabled_cli": false, + "tengu_bridge_requires_action_details": true, + "tengu_ccr_delta_rehydrate": true, + "tengu_event_sampling_config": {}, + "tengu_herring_clock": false, + "tengu_bg_attach_stall_ms": 5000, + "tengu_flint_harbor": true, + "tengu_system_prompt_global_cache": false, + "tengu_mcp_path_scoped_permissions": true, + "tengu_slate_siskin": { + "enabled": false, + "timeoutMs": 8000, + "throttleMs": 30000, + "summaryLineThreshold": 5 + }, + "tengu_birch_compass": false, + "tengu_marbled_teal": false, + "tengu_fennel_kite": false, + "tengu_1p_event_batch_config": { + "scheduledDelayMillis": 10000, + "maxExportBatchSize": 400, + "maxQueueSize": 8192, + "path": "/api/event_logging/v2/batch" + }, + "tengu_gypsum_kite": false, + "tengu_moth_copse": false, + "tengu_ember_trail": "0", + "tengu_slate_finch": false, + "tengu_lapis_anchor_user_turn": false, + "tengu_sparrow_ledger": false, + "tengu_read_dedup_killswitch": false, + "tengu_loggia_carousel": false, + "tengu_pewter_ledger": "OFF", + "tengu_marble_lark": false, + "tengu_kairos_loop_prompt": true, + "tengu_native_cursor": true, + "tengu_passport_quail": false, + "tengu_mcp_retry_failed_remote": false, + "tengu_silk_hinge": false, + "tengu_flint_harbor_share": false, + "tengu_kairos_cron": true, + "tengu_amber_lattice": { + "plugins": [ + "security-guidance", + "code-review", + "commit-commands", + "code-simplifier", + "hookify", + "feature-dev", + "frontend-design", + "pr-review-toolkit", + "skill-creator", + "plugin-dev", + "agent-sdk-dev", + "mcp-server-dev", + "claude-code-setup", + "claude-md-management", + "playground", + "ralph-loop", + "explanatory-output-style", + "learning-output-style", + "clangd-lsp", + "csharp-lsp", + "gopls-lsp", + "jdtls-lsp", + "kotlin-lsp", + "lua-lsp", + "php-lsp", + "pyright-lsp", + "ruby-lsp", + "rust-analyzer-lsp", + "swift-lsp", + "typescript-lsp" + ] + }, + "tengu_orchid_mantis_v2": false, + "tengu_hazel_osprey": false, + "tengu_willow_census_ttl_hours": 24, + "tengu_cedar_halo": false, + "tengu_kairos_input_needed_push": true, + "tengu_willow_mode": "hint_v2", + "tengu_prism_ledger": false, + "tengu_quiet_slate_wren": false, + "tengu_classifier_summary_llm_emit": true, + "tengu_ccr_bridge": true, + "tengu_amber_lark": false, + "tengu_workout2": true, + "tengu_billiard_aviary": false, + "tengu-model-error-overrides": {}, + "tengu_shining_fractals": false, + "tengu_cobalt_lantern": true, + "tengu_worktree_mode": true, + "tengu_blue_coaster": false, + "tengu_miraculo_the_bard": false, + "tengu_crimson_vector": false, + "tengu_copper_meadow": false, + "tengu_cobalt_plinth_reader_persist": false, + "tengu_marble_anvil": true, + "tengu_velvet_harbor": false, + "tengu_kestrel_arch": "OFF", + "tengu_drift_lantern": false, + "tengu_startup_announcements": [], + "tengu_steady_lantern": false, + "tengu_cedar_lantern": false, + "tengu_quartz_meadow": false, + "tengu_hawthorn_window": 200000, + "tengu_maple_tide": false, + "tengu_cloth_snorkel": false, + "tengu_sessions_elevated_auth_enforcement": true, + "tengu_turtle_carbon": true, + "tengu_coral_fern": false, + "tengu_max_version_config": {}, + "tengu_session_memory": false, + "tengu_permission_friction": true, + "tengu_plugin_official_mkt_git_fallback": true, + "tengu_lilac_loom": null, + "tengu_cobalt_plinth_direct": true, + "tengu_birch_lantern": "banner", + "tengu_kairos_cron_durable": false, + "tengu_ultraplan_timeout_seconds": 5400, + "tengu_negative_interaction_transcript_ask_config": { + "probability": 0 + }, + "tengu_tussock_oriole": false, + "tengu_dunwich_bell": false, + "tengu_cinder_almanac": true, + "tengu_penguin_mode_promo": { + "discountPercent": 0, + "endDate": "Feb 16" + }, + "tengu_kairos_github_webhooks": false, + "tengu_code_diff_cli": true, + "tengu_surreal_dali": true, + "tengu_orchid_trellis": false, + "tengu_slate_nexus": false, + "tengu_copper_bridge": true, + "tengu_tangerine_ladder_boost": true, + "tengu_desktop_upsell_v2": { + "enabled": false + }, + "tengu_slate_harrier": "off", + "tengu_slate_fern": true, + "tengu_sepia_cormorant": [], + "tengu_tool_pear": false, + "tengu_ccr_bridge_multi_session": false, + "tengu_claudeai_mcp_connectors": true, + "tengu_silk_almanac": false, + "tengu_frond_boric": {}, + "tengu_kairos_push_notifications": true, + "tengu_vscode_review_upsell": false, + "tengu_fennel_kite_model": "", + "tengu_disable_bypass_permissions_mode": false, + "tengu_cinder_plover": "", + "tengu_compass_dial": true, + "tengu_ember_latch": false, + "tengu_marble_sandcastle": false, + "tengu_amber_anchor": false, + "tengu_classifier_disabled_surfaces": "", + "tengu_pewter_lantern": false, + "tengu_harbor_ledger": [ + { + "marketplace": "claude-plugins-official", + "plugin": "discord" + }, + { + "marketplace": "claude-plugins-official", + "plugin": "telegram" + }, + { + "marketplace": "claude-plugins-official", + "plugin": "fakechat" + }, + { + "marketplace": "claude-plugins-official", + "plugin": "imessage" + } + ], + "tengu_loud_sugary_rock": false, + "tengu_pewter_lark": "off", + "tengu_amber_sextant": true, + "tengu_xq7_marble_zephyr": false, + "tengu_amber_redwood2": "", + "tengu_copper_thistle": false, + "tengu_kairos_loop_dynamic": true, + "tengu_walrus_canteen": false, + "tengu_vellum_ash": [], + "tengu_chomp_inflection": true, + "tengu_sage_compass": {}, + "tengu_silent_harbor": false, + "tengu_fleet_past_sessions": false, + "tengu_saffron_lattice": { + "enabled": true, + "planLimitsEndDate": "2026-07-13T07:00:00Z" + }, + "tengu_willow_sentinel_ttl_hours": 1, + "tengu_slate_meadow": true, + "tengu_bad_survey_transcript_ask_config": { + "probability": 0 + }, + "tengu_copper_wren": false, + "tengu_crystal_beam": { + "budgetTokens": 0 + }, + "tengu_cobalt_ridge": true, + "tengu_sotto_voce": true, + "tengu_swann_brevity": "focused", + "tengu_brick_follow": false, + "tengu_nimble_amber_prose": false, + "tengu_copper_fox": false, + "tengu_aura_sieve": false, + "tengu_amber_quill": false, + "tengu_fg_left_arrow_agents": true, + "tengu_marble_whisper": true, + "tengu_slate_harbor_experiment": false, + "tengu_ccr_v2_send_events_cli": true, + "tengu_riverbed_lantern": false, + "tengu_velvet_moth": 0.2, + "tengu-top-of-feed-tip": { + "tip": "", + "color": "" + }, + "tengu_birch_kettle": false, + "tengu_slate_moth": false, + "tengu_ide_rc_auto_enable": false, + "tengu_slate_thimble": false, + "tengu_reactive_compact_remote": false, + "tengu_quiet_basalt_echo": false, + "tengu_retire_chat_relay_artifact_backstop": false, + "tengu_basalt_sundial": false, + "tengu_good_survey_transcript_ask_config": { + "probability": 0 + }, + "tengu_gorse_fathom": false, + "tengu_cowork_chrome_automode_default": false, + "tengu_bridge_repl_v2_config": { + "init_retry_max_attempts": 3, + "init_retry_base_delay_ms": 500, + "init_retry_jitter_fraction": 0.25, + "init_retry_max_delay_ms": 4000, + "http_timeout_ms": 10000, + "uuid_dedup_buffer_size": 2000, + "heartbeat_interval_ms": 20000, + "heartbeat_jitter_fraction": 0.1, + "token_refresh_buffer_ms": 600000, + "teardown_archive_timeout_ms": 1500, + "connect_timeout_ms": 15000, + "min_version": "2.1.70", + "should_show_app_upgrade_message": false + }, + "tengu_prompt_suggestion": true, + "tengu_ccr_bundle_seed_enabled": true, + "tengu_lichen_compass": false, + "tengu_bridge_attestation_enforce": false, + "tengu_harbor_permissions": true, + "tengu_tool_search_unsupported_models": [ + "claude-3-5-haiku", + "claude-3-haiku" + ], + "tengu_orchid_mantis": false, + "tengu_basalt_quill": false, + "tengu_streaming_tool_execution2": true, + "tengu_plum_vx3": true, + "tengu_slate_ibis": true, + "tengu_amber_moleskin": { + "200000": { + "repl": 0.15, + "sdk": 0.15 + }, + "1000000": { + "repl": 0.15, + "sdk": 0.05 + }, + "default": { + "repl": 0.15, + "sdk": 0.15 + } + }, + "tengu_plank_river_frost": "user_intent", + "tengu_feedback_survey_config": { + "minTimeBeforeFeedbackMs": 600000, + "minTimeBetweenFeedbackMs": 43200000, + "minTimeBetweenGlobalFeedbackMs": 43200000, + "minUserTurnsBeforeFeedback": 5, + "minUserTurnsBetweenFeedback": 25, + "hideThanksAfterMs": 3000, + "onForModels": [ + "*" + ], + "probability": 0 + }, + "tengu_hazel_osprey_floor": 75000, + "tengu_sub_nomdrep_q7k": true, + "tengu_cobalt_heron": false, + "tengu_feature_template": false, + "tengu_bridge_attestation_enforce_config": { + "accept_level": "VERIFIED_BY_GATE", + "accept_statuses": [] + }, + "tengu_gleaming_fair": false, + "tengu_maple_pier": false, + "tengu_porch_bell_9f": "", + "tengu_cobalt_raccoon": true, + "tengu_plugin_binary_assets": false, + "tengu_grey_step2": { + "enabled": true, + "dialogTitle": "We recommend medium effort for Opus", + "dialogDescription": "Effort determines how long Claude thinks for when completing your task. We recommend medium effort for most tasks to balance speed and intelligence and maximize rate limits. Use ultrathink to trigger high effort when needed." + }, + "tengu_file_write_optimization": false, + "tengu_amber_sentinel": true, + "tengu_moss_anchor": false, + "tengu_cork_lantern": false, + "tengu_slate_meridian": false, + "tengu_fine_survey_transcript_ask_config": { + "probability": 0 + }, + "tengu_plan_artifact": false, + "tengu_report_findings_tool": false, + "tengu_cfc_in_product_permissions": true, + "tengu_snippet_save": false, + "tengu_marble_whisper2": true, + "tengu_keybinding_customization_release": true, + "tengu-off-switch": { + "activated": false + }, + "tengu_jade_anvil_4": false, + "tengu_russet_linnet": false, + "tengu_slate_kestrel": true, + "tengu_ccr_post_turn_summary": false, + "tengu-fable-off-switch": { + "activated": false + }, + "tengu_event_watchdog_default_on": true, + "tengu_hawthorn_steeple": false, + "tengu_penguins_enabled": true, + "tengu_gouda_loop": true, + "tengu_timber_lark": "copy_a", + "tengu_mcp_elicitation": true, + "tengu_collage_kaleidoscope": true, + "tengu_bridge_repl_v2": true, + "tengu_sage_compass2": { + "enabled": true + }, + "tengu_amber_packet": false, + "tengu_canary": {}, + "tengu_skills_dashboard_enabled": false, + "tengu_mcp_stateless_skip_init": true, + "tengu_fgts": true, + "tengu_cork_m4q": true, + "tengu_gha_plugin_code_review": false, + "tengu_pewter_brook": true, + "tengu_auto_mode_config": { + "enabled": "enabled", + "twoStageClassifier": true, + "sameTurnSiblingContext": true, + "jsonlTranscript": true, + "editRemovalVisibility": true, + "editRemovalCap": 3000, + "outcomeVisibility": true, + "s1SuffixByModel": { + "claude-sonnet-5": "\nStage 1 does NOT apply user intent or ALLOW exceptions — stage 2 will handle those. Judge the action by its full effect — what it runs, sends, publishes, or enables — not its surface form. Block if ANY rule could apply. immediately.", + "claude-sonnet-5[1m]": "\nStage 1 does NOT apply user intent or ALLOW exceptions — stage 2 will handle those. Judge the action by its full effect — what it runs, sends, publishes, or enables — not its surface form. Block if ANY rule could apply. immediately." + } + }, + "tengu_vellum_lantern": false, + "tengu_mcp_local_oauth_blocked_hosts": { + "hosts": [ + "microsoft365.mcp.claude.com", + "gmail.mcp.claude.com", + "gcal.mcp.claude.com" + ] + }, + "tengu_bridge_poll_interval_ms": 0, + "tengu_velvet_tide": false, + "tengu_lapis_anchor": "off", + "tengu_osprey_lantern": false, + "tengu_workflows_enabled": true, + "tengu_cobalt_compass": true, + "tengu_trace_lantern": false, + "tengu_log_datadog_events": true, + "tengu_birthday_hat": false, + "tengu_chair_sermon": false, + "tengu_umber_petrel": false, + "tengu_tense_pond": false, + "tengu_ochre_hollow": false, + "tengu_desktop_upsell": { + "enable_shortcut_tip": false, + "enable_startup_dialog": false + }, + "tengu_compact_cache_prefix": false, + "tengu_sm_config": { + "minimumMessageTokensToInit": 150000, + "minimumTokensBetweenUpdate": 40000, + "toolCallsBetweenUpdates": 10 + }, + "tengu_sedge_lantern_holdback": false, + "tengu_linen_osprey": false, + "tengu_mcp_singleton_unwrap": true, + "tengu_lumen_thicket_q7": false, + "tengu_amber_prism": false, + "tengu_destructive_command_warning": false, + "tengu_alder_compass": false, + "tengu_lapis_finch": true, + "tengu_basalt_spur": false, + "tengu_react_vulnerability_warning": false, + "tengu_ashen_kelp": true, + "tengu_red_coaster": false, + "tengu_quiet_harbor": false, + "tengu_tide_elm": "off", + "tengu_ultraplan_prompt_identifier": "visual_plan", + "tengu_cobalt_wren": false, + "tengu_rewind_first_message": true, + "tengu_vellum_siding": false, + "tengu_amber_heron": false, + "tengu_dune_wren": false, + "tengu_shale_finch": false, + "tengu_pewter_kestrel": { + "global": 50000, + "Bash": 30000, + "PowerShell": 30000, + "Grep": 20000, + "Snip": 1000, + "StrReplaceBasedEditTool": 30000, + "BashSearchTool": 20000 + }, + "tengu_auto_mode_default_on": false, + "tengu_crimson_echo": {}, + "tengu_slate_ribbon": true, + "tengu_amber_flint": true, + "tengu_slate_wren": false, + "tengu_xterm_atlas_reset": true, + "tengu_mocha_barista": true, + "tengu_prompt_cache_1h_config": { + "allowlist": [ + "repl_main_thread*", + "sdk", + "auto_mode", + "rolling_compact", + "memdir_relevance", + "agent_classifier", + "prompt_suggestion", + "away_summary", + "extract_memories" + ] + }, + "tengu_usage_overage_included_models": [ + "Fable", + "Fable 5" + ], + "tengu_ccr_bundle_max_bytes": 104857600, + "tengu_pewter_summit": true, + "tengu_chert_bezel": true, + "tengu_shoji_engine": false, + "tengu_otk_slot_v1": false, + "tengu_classifier_summary_heuristic_emit": true, + "tengu_immediate_model_command": false, + "tengu_walnut_prism": false, + "tengu_lapis_anchor_budget": 15000000, + "tengu_amber_wren": { + "targetedRangeNudge": true, + "maxTokens": 25000 + }, + "tengu_cedar_sundial": false, + "tengu_saffron_anchor": true, + "tengu_malort_pedway": { + "enabled": false, + "pixelValidation": false, + "clipboardPasteMultiline": true, + "screenshotFilter": true, + "mouseAnimation": true, + "hideBeforeAction": true, + "autoTargetDisplay": true, + "coordinateMode": "pixels" + }, + "tengu_olive_hinge": "", + "tengu_startup_notice": "", + "tengu_sedge_lantern": true, + "tengu_sepia_moth": false, + "tengu_vscode_onboarding": false, + "tengu_noreread_q7m_velvet": false, + "tengu_c4w_usage_limit_notifications_enabled": true, + "tengu_cobalt_harbor": false, + "tengu_velvet_ibis": {}, + "tengu_auto_notice_once": false, + "tengu_maple_sundial": false, + "tengu_bridge_system_init": true, + "tengu_harbor": true, + "tengu_feature_claudified_template": false, + "tengu_loud_sugary_rock2": false, + "tengu_velvet_mallet_sonnet_4_5": false, + "tengu_velvet_hammer_opus_4_7": false, + "tengu_lantern_hearth": "off", + "tengu_amber_redwood3": "", + "tengu_velvet_mallet_opus_4_7": false, + "tengu_velvet_hammer_opus": false, + "tengu_velvet_hammer_sonnet": false, + "tengu_windows_credman": false, + "tengu_velvet_mallet_falcon": false, + "tengu_velvet_hammer": false, + "tengu_saffron_credits_only_tiers": [ + "enterprise" + ], + "tengu_velvet_hammer_fable_5": false, + "tengu_velvet_mallet_opus_4_6": false, + "tengu_velvet_mallet_haiku_4_5": false, + "tengu_velvet_hammer_sonnet_5": false, + "tengu_long_context_survey_threshold": "", + "tengu_ax_screen_reader": true, + "tengu_basalt_tern": false, + "tengu_long_context_survey_probability": "", + "tengu_velvet_mallet_sonnet": false, + "tengu_velvet_hammer_mythos_5": false, + "tengu_long_context_survey_trigger_mode": "", + "tengu_velvet_hammer_haiku_4_5": false, + "tengu_velvet_mallet_opus": false, + "tengu_chrome_auto_enable": false, + "tengu_non_deferrable_builtins": {}, + "tengu_velvet_mallet_fable_5": false, + "tengu_velvet_static": true, + "tengu_quill_harbor": "acceptEdits", + "tengu_velvet_hammer_opus_4_6": false, + "tengu_velvet_hammer_falcon": false, + "tengu_velvet_hammer_opus_4_8": false, + "tengu_soft_slate_nudge": "baseline", + "tengu_c4e_slash_upsell": true, + "tengu_velvet_mallet": false, + "tengu_tab_read_sep": false, + "tengu_velvet_hammer_sonnet_4_5": false, + "tengu_velvet_mallet_haiku": false, + "tengu_long_context_survey_question_variant": "", + "tengu_velvet_hammer_haiku": false, + "tengu_velvet_hammer_sonnet_4_6": false, + "tengu_velvet_mallet_opus_4_8": false, + "tengu_slate_quill": true + }, + "firstStartTime": "2026-07-07T21:07:55.988Z", + "machineID": "8286e7c3c8be240dd7563b772b94d91bec260294b4c3c9b6a147c0fad853d6b6", + "opusProMigrationComplete": true, + "sonnet1m45MigrationComplete": true, + "seenNotifications": {}, + "migrationVersion": 13, + "userID": "c5874f5dce270856b661111baea070fca33b919a56303632d3bb60e5a1a7f5b9", + "cachedExperimentFeatures": [ + "tengu_birch_lantern" + ], + "cachedGrowthBookFeaturesAt": 1783458476499, + "projects": { + "/home/kruszewskia/Workspace/Private/Szpitale-graph": { + "allowedTools": [], + "mcpContextUris": [], + "mcpServers": {}, + "enabledMcpjsonServers": [], + "disabledMcpjsonServers": [], + "hasTrustDialogAccepted": false, + "projectOnboardingSeenCount": 0, + "hasClaudeMdExternalIncludesApproved": false, + "hasClaudeMdExternalIncludesWarningShown": false, + "hasUnseenTeamArtifacts": false, + "loggedAuthoredArtifactPaths": [ + ".claude/skills/cavecrew/SKILL.md", + ".claude/skills/caveman-commit/SKILL.md", + ".claude/skills/caveman-compress/SKILL.md", + ".claude/skills/caveman-help/SKILL.md", + ".claude/skills/caveman-review/SKILL.md", + ".claude/skills/caveman-stats/SKILL.md", + ".claude/skills/caveman/SKILL.md" + ] + } + } +} \ No newline at end of file diff --git a/szpitale-graph/~/.cloak/profiles/work/.last-cleanup b/szpitale-graph/~/.cloak/profiles/work/.last-cleanup new file mode 100644 index 0000000..7f1840a --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/work/.last-cleanup @@ -0,0 +1 @@ +2026-07-07T21:08:01.495Z \ No newline at end of file diff --git a/szpitale-graph/~/.cloak/profiles/work/backups/.claude.json.backup.1783458476033 b/szpitale-graph/~/.cloak/profiles/work/backups/.claude.json.backup.1783458476033 new file mode 100644 index 0000000..1900bf7 --- /dev/null +++ b/szpitale-graph/~/.cloak/profiles/work/backups/.claude.json.backup.1783458476033 @@ -0,0 +1,3 @@ +{ + "firstStartTime": "2026-07-07T21:07:55.988Z" +} \ No newline at end of file