From b9fdc0b99cb000d57340eb340b647acf91b43c4a Mon Sep 17 00:00:00 2001
From: "penify-dev[bot]" <146478655+penify-dev[bot]@users.noreply.github.com>
Date: Thu, 15 May 2025 10:20:19 +0000
Subject: [PATCH] Add architecture documentation
---
docs/rtf/classException__coll__graph.md5 | 1 +
docs/rtf/classException__coll__graph.svg | 26 +
docs/rtf/classException__inherit__graph.md5 | 1 +
docs/rtf/classException__inherit__graph.svg | 46 +
...1api__client_1_1APIClient__coll__graph.md5 | 1 +
...1api__client_1_1APIClient__coll__graph.svg | 36 +
...f74798e7d428b4e2f20095287eb2ce_icgraph.md5 | 1 +
...f74798e7d428b4e2f20095287eb2ce_icgraph.svg | 39 +
...0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 | 1 +
...0ada470b897935f9fb372cd0e7e51e3_cgraph.svg | 70 +
..._analyzer_1_1BaseAnalyzer__coll__graph.md5 | 1 +
..._analyzer_1_1BaseAnalyzer__coll__graph.svg | 33 +
...alyzer_1_1BaseAnalyzer__inherit__graph.md5 | 1 +
...alyzer_1_1BaseAnalyzer__inherit__graph.svg | 127 +
...lyzer_1_1CommitDocGenHook__coll__graph.md5 | 1 +
...lyzer_1_1CommitDocGenHook__coll__graph.svg | 57 +
...er_1_1CommitDocGenHook__inherit__graph.md5 | 1 +
...er_1_1CommitDocGenHook__inherit__graph.svg | 57 +
...370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 | 1 +
...370a03f7ed9175ef6f81e931a105ea9_cgraph.svg | 180 +
...496194276441fa2eb2fa014eaab9a37_cgraph.md5 | 1 +
...496194276441fa2eb2fa014eaab9a37_cgraph.svg | 54 +
...96194276441fa2eb2fa014eaab9a37_icgraph.md5 | 1 +
...96194276441fa2eb2fa014eaab9a37_icgraph.svg | 40 +
...99c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 | 1 +
...99c5cbc852a7ec3b412ccb43c274ca_icgraph.svg | 40 +
...da13cc121d96342476ccf72b63a007f_cgraph.md5 | 1 +
...da13cc121d96342476ccf72b63a007f_cgraph.svg | 86 +
...a13cc121d96342476ccf72b63a007f_icgraph.md5 | 1 +
...a13cc121d96342476ccf72b63a007f_icgraph.svg | 40 +
...127d86729e226d74dbeb095b008db3e_cgraph.md5 | 1 +
...127d86729e226d74dbeb095b008db3e_cgraph.svg | 30 +
...27d86729e226d74dbeb095b008db3e_icgraph.md5 | 1 +
...27d86729e226d74dbeb095b008db3e_icgraph.svg | 30 +
...er_1_1FileAnalyzerGenHook__coll__graph.md5 | 1 +
...er_1_1FileAnalyzerGenHook__coll__graph.svg | 56 +
...1_1FileAnalyzerGenHook__inherit__graph.md5 | 1 +
...1_1FileAnalyzerGenHook__inherit__graph.svg | 56 +
...cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 | 1 +
...cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg | 71 +
...c6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 | 1 +
...c6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg | 55 +
...f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 | 1 +
...f4dffbc432fac3e259d957dd1e187f1_cgraph.svg | 204 +
...ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 | 1 +
...ab39391dfb7686f2a2d21a702dd3073_cgraph.svg | 40 +
..._1_1FolderAnalyzerGenHook__coll__graph.md5 | 1 +
..._1_1FolderAnalyzerGenHook__coll__graph.svg | 55 +
...1FolderAnalyzerGenHook__inherit__graph.md5 | 1 +
...1FolderAnalyzerGenHook__inherit__graph.svg | 55 +
...b845318fc7ac3b607daf26378e19ec_icgraph.md5 | 1 +
...b845318fc7ac3b607daf26378e19ec_icgraph.svg | 41 +
...d189d1b8c773bf710a899eb21fd76cc_cgraph.md5 | 1 +
...d189d1b8c773bf710a899eb21fd76cc_cgraph.svg | 41 +
...analyzer_1_1GitDocGenHook__coll__graph.md5 | 1 +
...analyzer_1_1GitDocGenHook__coll__graph.svg | 58 +
...lyzer_1_1GitDocGenHook__inherit__graph.md5 | 1 +
...lyzer_1_1GitDocGenHook__inherit__graph.svg | 58 +
...5313caa22b173ce75638f0db08eeb85_cgraph.md5 | 1 +
...5313caa22b173ce75638f0db08eeb85_cgraph.svg | 39 +
...313caa22b173ce75638f0db08eeb85_icgraph.md5 | 1 +
...313caa22b173ce75638f0db08eeb85_icgraph.svg | 55 +
...549766100e91eb94b5f1a1d34bf481_icgraph.md5 | 1 +
...549766100e91eb94b5f1a1d34bf481_icgraph.svg | 40 +
...beba14e92d717391a74bb70b1fab0ae_cgraph.md5 | 1 +
...beba14e92d717391a74bb70b1fab0ae_cgraph.svg | 268 +
...2275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 | 1 +
...2275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg | 29 +
...275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 | 1 +
...275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg | 29 +
...4d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 | 1 +
...4d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg | 71 +
...ira__client_1_1JiraClient__coll__graph.md5 | 1 +
...ira__client_1_1JiraClient__coll__graph.svg | 44 +
...d0f9ae006313a21576362d26ac5ec8_icgraph.md5 | 1 +
...d0f9ae006313a21576362d26ac5ec8_icgraph.svg | 176 +
...93d6456fe053ef7a7862d5d6851910c_cgraph.md5 | 1 +
...93d6456fe053ef7a7862d5d6851910c_cgraph.svg | 54 +
...9ea1149758f7f5212149d357b13cc23_cgraph.md5 | 1 +
...9ea1149758f7f5212149d357b13cc23_cgraph.svg | 78 +
...ea1149758f7f5212149d357b13cc23_icgraph.md5 | 1 +
...ea1149758f7f5212149d357b13cc23_icgraph.svg | 41 +
...5f6924819084b7c8d268956a784804a_cgraph.md5 | 1 +
...5f6924819084b7c8d268956a784804a_cgraph.svg | 39 +
...f6924819084b7c8d268956a784804a_icgraph.md5 | 1 +
...f6924819084b7c8d268956a784804a_icgraph.svg | 80 +
...0d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 | 1 +
...0d2c5a6432aa6f238da0ff65d49a760_cgraph.svg | 153 +
...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 | 1 +
...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg | 45 +
...f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 | 1 +
...f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg | 29 +
...967169a4b7970c67c0947b9ac56f746_cgraph.md5 | 1 +
...967169a4b7970c67c0947b9ac56f746_cgraph.svg | 40 +
...67169a4b7970c67c0947b9ac56f746_icgraph.md5 | 1 +
...67169a4b7970c67c0947b9ac56f746_icgraph.svg | 58 +
...a8837552d37bfd611de23441a240826_cgraph.md5 | 1 +
...a8837552d37bfd611de23441a240826_cgraph.svg | 40 +
...823ad1d3baaedd38039913c3a97fd7_icgraph.md5 | 1 +
...823ad1d3baaedd38039913c3a97fd7_icgraph.svg | 57 +
...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 | 1 +
...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg | 85 +
...41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 | 1 +
...41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg | 41 +
...1llm__client_1_1LLMClient__coll__graph.md5 | 1 +
...1llm__client_1_1LLMClient__coll__graph.svg | 29 +
...ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 | 1 +
...ad3014dac466ee1d8e00306d0cf2000_cgraph.svg | 38 +
...d3014dac466ee1d8e00306d0cf2000_icgraph.md5 | 1 +
...d3014dac466ee1d8e00306d0cf2000_icgraph.svg | 39 +
...f06658ca922793f879474f2234518e_icgraph.md5 | 1 +
...f06658ca922793f879474f2234518e_icgraph.svg | 54 +
...s_1_1GitRepoNotFoundError__coll__graph.md5 | 1 +
...s_1_1GitRepoNotFoundError__coll__graph.svg | 46 +
..._1GitRepoNotFoundError__inherit__graph.md5 | 1 +
..._1GitRepoNotFoundError__inherit__graph.svg | 46 +
...nds_1_1TestCommitCommands__coll__graph.md5 | 1 +
...nds_1_1TestCommitCommands__coll__graph.svg | 42 +
...3c2ff3707124aa48e8eb581106b8691_cgraph.md5 | 1 +
...3c2ff3707124aa48e8eb581106b8691_cgraph.svg | 156 +
...d04b125e102190a768f65f1948f15bc_cgraph.md5 | 1 +
...d04b125e102190a768f65f1948f15bc_cgraph.svg | 40 +
...13e368262340af98b30fd8ebdac6597_cgraph.md5 | 1 +
...13e368262340af98b30fd8ebdac6597_cgraph.svg | 317 +
...c4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 | 1 +
...c4b1e4189792a3f7c11d2a745f479c0_cgraph.svg | 156 +
...ea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 | 1 +
...ea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg | 157 +
...9c09013055ec39ddde86b487aefcf8b_cgraph.md5 | 1 +
...9c09013055ec39ddde86b487aefcf8b_cgraph.svg | 156 +
...nds_1_1TestConfigCommands__coll__graph.md5 | 1 +
...nds_1_1TestConfigCommands__coll__graph.svg | 50 +
...e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 | 1 +
...e8162082bcdd5652bb37bdb14cf453a_cgraph.svg | 62 +
...355f7d313bebaa71694387cf2bc5232_cgraph.md5 | 1 +
...355f7d313bebaa71694387cf2bc5232_cgraph.svg | 123 +
...3d4760eee3b67e1cde3aed755ebb948_cgraph.md5 | 1 +
...3d4760eee3b67e1cde3aed755ebb948_cgraph.svg | 62 +
...00ca5d9fcdc159714e8df54920f9436_cgraph.md5 | 1 +
...00ca5d9fcdc159714e8df54920f9436_cgraph.svg | 123 +
...73984d31452b56acd6ce4011a1248bd_cgraph.md5 | 1 +
...73984d31452b56acd6ce4011a1248bd_cgraph.svg | 101 +
...c0207be563c3de59a6d16277805114c_cgraph.md5 | 1 +
...c0207be563c3de59a6d16277805114c_cgraph.svg | 123 +
...3a264dfb21e16003e095b79f6eab2ac_cgraph.md5 | 1 +
...3a264dfb21e16003e095b79f6eab2ac_cgraph.svg | 62 +
...d12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 | 1 +
...d12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg | 101 +
...d8df8219441b9e9871b903a681400d9_cgraph.md5 | 1 +
...d8df8219441b9e9871b903a681400d9_cgraph.svg | 62 +
...f9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 | 1 +
...f9f2233a3f4cc5725b9d4f05758b167_cgraph.svg | 101 +
...e37b97432821d19758c6325d4c74bcf_cgraph.md5 | 1 +
...e37b97432821d19758c6325d4c74bcf_cgraph.svg | 101 +
...8d62310da2d768e21770f8f01ff5375_cgraph.md5 | 1 +
...8d62310da2d768e21770f8f01ff5375_cgraph.svg | 62 +
...__config_1_1TestWebConfig__coll__graph.md5 | 1 +
...__config_1_1TestWebConfig__coll__graph.svg | 30 +
...6e600222e426b003850509cb1d3190a_cgraph.md5 | 1 +
...6e600222e426b003850509cb1d3190a_cgraph.svg | 139 +
...c6440352201d207ea8b4d26f8ccfa35_cgraph.md5 | 1 +
...c6440352201d207ea8b4d26f8ccfa35_cgraph.svg | 40 +
.../dir_063e2d5fe58a131099a7fe4200cca78c.rtf | 137 +
...r_063e2d5fe58a131099a7fe4200cca78c_dep.md5 | 1 +
...r_063e2d5fe58a131099a7fe4200cca78c_dep.svg | 30 +
.../dir_1648a057408aae8db85b8e3797335623.rtf | 119 +
...r_1648a057408aae8db85b8e3797335623_dep.md5 | 1 +
...r_1648a057408aae8db85b8e3797335623_dep.svg | 30 +
.../dir_624fa2a8bce97f0444ac5cca335d4e23.rtf | 137 +
...r_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 | 1 +
...r_624fa2a8bce97f0444ac5cca335d4e23_dep.svg | 30 +
.../dir_b3b22d2ab7966b65f6b237e3231b41be.rtf | 135 +
.../dir_f88c3381c1861b3f7ca1f3d63cf244b5.rtf | 163 +
...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 | 1 +
...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg | 42 +
...8f375c58bb6f69f98675e6a9ac84655_cgraph.md5 | 1 +
...8f375c58bb6f69f98675e6a9ac84655_cgraph.svg | 61 +
...f375c58bb6f69f98675e6a9ac84655_icgraph.md5 | 1 +
...f375c58bb6f69f98675e6a9ac84655_icgraph.svg | 60 +
...3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 | 1 +
...3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg | 45 +
...956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 | 1 +
...956ca1749d4218ea1dc6e5b6218b24_icgraph.svg | 76 +
...2564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 | 1 +
...2564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg | 139 +
...564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 | 1 +
...564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg | 146 +
...27583116eb78e31a4d3cdc16d2f15c_icgraph.md5 | 1 +
...27583116eb78e31a4d3cdc16d2f15c_icgraph.svg | 61 +
...4f739f524c38b437e4e47673d683e23_cgraph.md5 | 1 +
...4f739f524c38b437e4e47673d683e23_cgraph.svg | 300 +
...f739f524c38b437e4e47673d683e23_icgraph.md5 | 1 +
...f739f524c38b437e4e47673d683e23_icgraph.svg | 61 +
...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 | 1 +
...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg | 84 +
...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 | 1 +
...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg | 149 +
...5dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 | 1 +
...5dfc34a655ed80e6c95939b6f3c35c_icgraph.svg | 77 +
...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 | 1 +
...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg | 398 +
...617bc5956e502c9555dc0dda0376df4_cgraph.md5 | 1 +
...617bc5956e502c9555dc0dda0376df4_cgraph.svg | 45 +
...17bc5956e502c9555dc0dda0376df4_icgraph.md5 | 1 +
...17bc5956e502c9555dc0dda0376df4_icgraph.svg | 94 +
...503d51c905e2f1b299b12d2a73bd812_cgraph.md5 | 1 +
...503d51c905e2f1b299b12d2a73bd812_cgraph.svg | 106 +
...03d51c905e2f1b299b12d2a73bd812_icgraph.md5 | 1 +
...03d51c905e2f1b299b12d2a73bd812_icgraph.svg | 214 +
...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 | 1 +
...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg | 84 +
...92bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 | 1 +
...92bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg | 128 +
...559a82d0bf727703d550d1003d3ed20_cgraph.md5 | 1 +
...559a82d0bf727703d550d1003d3ed20_cgraph.svg | 45 +
...59a82d0bf727703d550d1003d3ed20_icgraph.md5 | 1 +
...59a82d0bf727703d550d1003d3ed20_icgraph.svg | 264 +
...be277132ce0bc0aacef951cf1dee2ae_cgraph.md5 | 1 +
...be277132ce0bc0aacef951cf1dee2ae_cgraph.svg | 51 +
...e277132ce0bc0aacef951cf1dee2ae_icgraph.md5 | 1 +
...e277132ce0bc0aacef951cf1dee2ae_icgraph.svg | 403 +
...2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 | 1 +
...2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg | 45 +
...486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 | 1 +
...486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg | 116 +
...115198ea5d6808ccb98733957f50b06_cgraph.md5 | 1 +
...115198ea5d6808ccb98733957f50b06_cgraph.svg | 122 +
...15198ea5d6808ccb98733957f50b06_icgraph.md5 | 1 +
...15198ea5d6808ccb98733957f50b06_icgraph.svg | 77 +
...006ab13bff718ef783868a910c0b704_cgraph.md5 | 1 +
...006ab13bff718ef783868a910c0b704_cgraph.svg | 170 +
...06ab13bff718ef783868a910c0b704_icgraph.md5 | 1 +
...06ab13bff718ef783868a910c0b704_icgraph.svg | 108 +
...aac68bc563432bf25c85dc78081a25_icgraph.md5 | 1 +
...aac68bc563432bf25c85dc78081a25_icgraph.svg | 221 +
...7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 | 1 +
...7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg | 60 +
...543eb5fa835fd1237f24e8bce6201d_icgraph.md5 | 1 +
...543eb5fa835fd1237f24e8bce6201d_icgraph.svg | 124 +
...f8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 | 1 +
...f8f5d3bf1c3795974a391ee95b72b2_icgraph.svg | 124 +
...40e5331681eb574ac319d7458783bde_cgraph.md5 | 1 +
...40e5331681eb574ac319d7458783bde_cgraph.svg | 182 +
...0e5331681eb574ac319d7458783bde_icgraph.md5 | 1 +
...0e5331681eb574ac319d7458783bde_icgraph.svg | 44 +
...3eb92164a69df1446d745f8a09285e_icgraph.md5 | 1 +
...3eb92164a69df1446d745f8a09285e_icgraph.svg | 45 +
...63db4c484797bead34b7d874020c6a_icgraph.md5 | 1 +
...63db4c484797bead34b7d874020c6a_icgraph.svg | 44 +
...4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 | 1 +
...4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg | 77 +
...bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 | 1 +
...bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg | 44 +
...6838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 | 1 +
...6838b20df4bd14ee4b5e1dd2906738f_cgraph.svg | 620 ++
...838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 | 1 +
...838b20df4bd14ee4b5e1dd2906738f_icgraph.svg | 28 +
...6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 | 1 +
...6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg | 259 +
...2b92532b1458af94f3649d411b5505c_cgraph.md5 | 1 +
...2b92532b1458af94f3649d411b5505c_cgraph.svg | 38 +
...b92532b1458af94f3649d411b5505c_icgraph.md5 | 1 +
...b92532b1458af94f3649d411b5505c_icgraph.svg | 39 +
...ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 | 1 +
...ffbb9671dbe233770268e2dd66a67fa_cgraph.svg | 39 +
...fbb9671dbe233770268e2dd66a67fa_icgraph.md5 | 1 +
...fbb9671dbe233770268e2dd66a67fa_icgraph.svg | 243 +
...b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 | 1 +
...b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg | 39 +
...16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 | 1 +
...16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg | 71 +
...da02cd1140179a9ce60f62c85fccfef_cgraph.md5 | 1 +
...da02cd1140179a9ce60f62c85fccfef_cgraph.svg | 38 +
...a02cd1140179a9ce60f62c85fccfef_icgraph.md5 | 1 +
...a02cd1140179a9ce60f62c85fccfef_icgraph.svg | 39 +
...d934568897433fa73f9cc182ac4a3e_icgraph.md5 | 1 +
...d934568897433fa73f9cc182ac4a3e_icgraph.svg | 178 +
...2cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 | 1 +
...2cdb4de7c679ce8b29c3e9116c4776_icgraph.svg | 87 +
...7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 | 1 +
...7340d0fc60fb80f17514d60bf45f1d_icgraph.svg | 77 +
...f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 | 1 +
...f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg | 39 +
...0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 | 1 +
...0acd7dd91abfe67d0807803bc3b65f_icgraph.svg | 162 +
...11f0adf6e9bf71510c379b6fa155e44_cgraph.md5 | 1 +
...11f0adf6e9bf71510c379b6fa155e44_cgraph.svg | 37 +
...1f0adf6e9bf71510c379b6fa155e44_icgraph.md5 | 1 +
...1f0adf6e9bf71510c379b6fa155e44_icgraph.svg | 268 +
...c3e466d1912058167be2eacf85b9f6_icgraph.md5 | 1 +
...c3e466d1912058167be2eacf85b9f6_icgraph.svg | 337 +
...e684c00e26199440137a87ed9b195c_icgraph.md5 | 1 +
...e684c00e26199440137a87ed9b195c_icgraph.svg | 55 +
...fcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 | 1 +
...fcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg | 39 +
...cbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 | 1 +
...cbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg | 39 +
...441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 | 1 +
...441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg | 72 +
...5c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 | 1 +
...5c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg | 29 +
...c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 | 1 +
...c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg | 727 ++
...e74c920f258f442914771164fe26b45_cgraph.md5 | 1 +
...e74c920f258f442914771164fe26b45_cgraph.svg | 39 +
...f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 | 1 +
...f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg | 39 +
...458af9ad0128c3ca1263b552fd5e482_cgraph.md5 | 1 +
...458af9ad0128c3ca1263b552fd5e482_cgraph.svg | 186 +
...35e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 | 1 +
...35e7fd4912192c7276cf31bbebc6eb0_cgraph.svg | 39 +
...bb75610e40d94d42bc169b25403c186_cgraph.md5 | 1 +
...bb75610e40d94d42bc169b25403c186_cgraph.svg | 39 +
...4165ddfdb3071a88422f080f0e529a3_cgraph.md5 | 1 +
...4165ddfdb3071a88422f080f0e529a3_cgraph.svg | 40 +
...06110833eb0aad547156faf014b31d8_cgraph.md5 | 1 +
...06110833eb0aad547156faf014b31d8_cgraph.svg | 39 +
...158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 | 1 +
...158ffa48469b6c097a7a55fcb20c21a_cgraph.svg | 186 +
...74688baa8c9b5ba302c2877a9789d05_cgraph.md5 | 1 +
...74688baa8c9b5ba302c2877a9789d05_cgraph.svg | 186 +
...c76cc25c23476794234cdadbcaef0c0_cgraph.md5 | 1 +
...c76cc25c23476794234cdadbcaef0c0_cgraph.svg | 39 +
...9b01e5fc89255cac96747fa081c442c_cgraph.md5 | 1 +
...9b01e5fc89255cac96747fa081c442c_cgraph.svg | 186 +
docs/rtf/refman.rtf | 8871 +++++++++++++++++
326 files changed, 25155 insertions(+)
create mode 100644 docs/rtf/classException__coll__graph.md5
create mode 100644 docs/rtf/classException__coll__graph.svg
create mode 100644 docs/rtf/classException__inherit__graph.md5
create mode 100644 docs/rtf/classException__inherit__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg
create mode 100644 docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5
create mode 100644 docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5
create mode 100644 docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg
create mode 100644 docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg
create mode 100644 docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5
create mode 100644 docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg
create mode 100644 docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c.rtf
create mode 100644 docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5
create mode 100644 docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg
create mode 100644 docs/rtf/dir_1648a057408aae8db85b8e3797335623.rtf
create mode 100644 docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.md5
create mode 100644 docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.svg
create mode 100644 docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23.rtf
create mode 100644 docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5
create mode 100644 docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg
create mode 100644 docs/rtf/dir_b3b22d2ab7966b65f6b237e3231b41be.rtf
create mode 100644 docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5.rtf
create mode 100644 docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5
create mode 100644 docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg
create mode 100644 docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5
create mode 100644 docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5
create mode 100644 docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg
create mode 100644 docs/rtf/refman.rtf
diff --git a/docs/rtf/classException__coll__graph.md5 b/docs/rtf/classException__coll__graph.md5
new file mode 100644
index 0000000..38ed226
--- /dev/null
+++ b/docs/rtf/classException__coll__graph.md5
@@ -0,0 +1 @@
+8bfc7cbaf3c53c3b1288446104b2c7ee
\ No newline at end of file
diff --git a/docs/rtf/classException__coll__graph.svg b/docs/rtf/classException__coll__graph.svg
new file mode 100644
index 0000000..d2d4076
--- /dev/null
+++ b/docs/rtf/classException__coll__graph.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/docs/rtf/classException__inherit__graph.md5 b/docs/rtf/classException__inherit__graph.md5
new file mode 100644
index 0000000..f7c5b12
--- /dev/null
+++ b/docs/rtf/classException__inherit__graph.md5
@@ -0,0 +1 @@
+02df0cdd064aa2dca59b7424cdd2be62
\ No newline at end of file
diff --git a/docs/rtf/classException__inherit__graph.svg b/docs/rtf/classException__inherit__graph.svg
new file mode 100644
index 0000000..c8fc6d6
--- /dev/null
+++ b/docs/rtf/classException__inherit__graph.svg
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5
new file mode 100644
index 0000000..2c7b583
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5
@@ -0,0 +1 @@
+92a3e9cee2cd5e4975e6a42b548f0d62
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg
new file mode 100644
index 0000000..fe24d95
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5 b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5
new file mode 100644
index 0000000..b12cf91
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5
@@ -0,0 +1 @@
+ea70dd7bbb840c4828c970ec1a8f5446
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg
new file mode 100644
index 0000000..54dce22
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5
new file mode 100644
index 0000000..186981a
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5
@@ -0,0 +1 @@
+6b1ca4842de706fb2f00719bcb509a8b
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg
new file mode 100644
index 0000000..a04a292
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg
@@ -0,0 +1,70 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5
new file mode 100644
index 0000000..8f67765
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5
@@ -0,0 +1 @@
+ba0c3a1d5b95dea65df70168e43976e0
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg
new file mode 100644
index 0000000..c7b4e4a
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg
@@ -0,0 +1,33 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5
new file mode 100644
index 0000000..cb38209
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5
@@ -0,0 +1 @@
+63e8393eea1557a855929943cd8aca92
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg
new file mode 100644
index 0000000..285efa6
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg
@@ -0,0 +1,127 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5
new file mode 100644
index 0000000..4d6e419
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5
@@ -0,0 +1 @@
+7b0dd63703399513e2ba32399fe691fd
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg
new file mode 100644
index 0000000..ebcb060
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5
new file mode 100644
index 0000000..4d6e419
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5
@@ -0,0 +1 @@
+7b0dd63703399513e2ba32399fe691fd
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg
new file mode 100644
index 0000000..ebcb060
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5
new file mode 100644
index 0000000..d530502
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5
@@ -0,0 +1 @@
+503804b19fd6263bc4d634da365fcb38
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg
new file mode 100644
index 0000000..e69c2c7
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg
@@ -0,0 +1,180 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5
new file mode 100644
index 0000000..96b4195
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5
@@ -0,0 +1 @@
+ad1182651b0cfe9906faf8af31cf667d
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg
new file mode 100644
index 0000000..3064361
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5
new file mode 100644
index 0000000..fffc366
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5
@@ -0,0 +1 @@
+086b563bbc1068f3e0325d4a68d5bd17
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg
new file mode 100644
index 0000000..3b6972e
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5
new file mode 100644
index 0000000..0536af9
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5
@@ -0,0 +1 @@
+fb0bae9cf2f7e07ac778eed1297c327b
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg
new file mode 100644
index 0000000..dc56728
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5
new file mode 100644
index 0000000..76d8830
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5
@@ -0,0 +1 @@
+4cfab920326b3a6b29c805803ac72558
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg
new file mode 100644
index 0000000..8fe268a
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg
@@ -0,0 +1,86 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5
new file mode 100644
index 0000000..cf1b6d3
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5
@@ -0,0 +1 @@
+3cd15e6828a60d49cece5c87177581df
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg
new file mode 100644
index 0000000..e5bf8f4
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5
new file mode 100644
index 0000000..5f2103d
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5
@@ -0,0 +1 @@
+95c682625e7209c65fce50a4bb060a81
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg
new file mode 100644
index 0000000..d985a2a
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5 b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5
new file mode 100644
index 0000000..39adea9
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5
@@ -0,0 +1 @@
+534bd5898147e11eac4c0e46a39c7860
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg
new file mode 100644
index 0000000..8cebb40
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5
new file mode 100644
index 0000000..b6c2c1c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5
@@ -0,0 +1 @@
+98c7ce96bb60ecdbb8c57ef7c2bc6d59
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg
new file mode 100644
index 0000000..2c46dfc
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg
@@ -0,0 +1,56 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5
new file mode 100644
index 0000000..b6c2c1c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5
@@ -0,0 +1 @@
+98c7ce96bb60ecdbb8c57ef7c2bc6d59
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg
new file mode 100644
index 0000000..2c46dfc
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg
@@ -0,0 +1,56 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5
new file mode 100644
index 0000000..416cd78
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5
@@ -0,0 +1 @@
+dd6dbfdde640f0bc6f1c0cc995a9b4fb
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg
new file mode 100644
index 0000000..df60e23
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg
@@ -0,0 +1,71 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5
new file mode 100644
index 0000000..8da8816
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5
@@ -0,0 +1 @@
+dce29e772ed93d06e90894791ddc50ca
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg
new file mode 100644
index 0000000..c688580
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5
new file mode 100644
index 0000000..f40daaf
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5
@@ -0,0 +1 @@
+5c58a576c4056ea132d5a9cca6880cb6
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg
new file mode 100644
index 0000000..c02effb
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg
@@ -0,0 +1,204 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5
new file mode 100644
index 0000000..a24f9ee
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5
@@ -0,0 +1 @@
+e106885ca4b06113170f86da8447c21c
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg
new file mode 100644
index 0000000..ac0606c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5
new file mode 100644
index 0000000..320340b
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5
@@ -0,0 +1 @@
+2ce8b70614e0bc292a08fd5461334e23
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg
new file mode 100644
index 0000000..f0b7c4a
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5
new file mode 100644
index 0000000..320340b
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5
@@ -0,0 +1 @@
+2ce8b70614e0bc292a08fd5461334e23
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg
new file mode 100644
index 0000000..f0b7c4a
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5 b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5
new file mode 100644
index 0000000..4aed41f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5
@@ -0,0 +1 @@
+e2a0ef57ef0713a63ba1c8ee5591e9f5
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg
new file mode 100644
index 0000000..ba8e0cb
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5 b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5
new file mode 100644
index 0000000..88516d8
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5
@@ -0,0 +1 @@
+a3c6817cbc08f61a1a5f2b81334ae3dc
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg
new file mode 100644
index 0000000..47f7147
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5
new file mode 100644
index 0000000..8b8aff5
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5
@@ -0,0 +1 @@
+d285fcb980d93312bfad049f92895ba8
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg
new file mode 100644
index 0000000..0383f84
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5
new file mode 100644
index 0000000..8b8aff5
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5
@@ -0,0 +1 @@
+d285fcb980d93312bfad049f92895ba8
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg
new file mode 100644
index 0000000..0383f84
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5
new file mode 100644
index 0000000..bfda978
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5
@@ -0,0 +1 @@
+d30b2fe6c8ef2ddf32a8fa6ab13a25f2
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg
new file mode 100644
index 0000000..a0f9a52
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5
new file mode 100644
index 0000000..519d9fc
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5
@@ -0,0 +1 @@
+4e6accfb0097a03bb56e2f390d46b980
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg
new file mode 100644
index 0000000..d14f6c2
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5
new file mode 100644
index 0000000..e94ad2c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5
@@ -0,0 +1 @@
+c545389fcb803268668d7fa34c6d8fd9
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg
new file mode 100644
index 0000000..8cb348b
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5
new file mode 100644
index 0000000..cda212c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5
@@ -0,0 +1 @@
+4498c89a026edc471fa55e435c85053e
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg
new file mode 100644
index 0000000..03cf8de
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg
@@ -0,0 +1,268 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5
new file mode 100644
index 0000000..4c4eb97
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5
@@ -0,0 +1 @@
+eb87828bf186415180fe0c4a9a69bffa
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg
new file mode 100644
index 0000000..cec3173
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5
new file mode 100644
index 0000000..756ea69
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5
@@ -0,0 +1 @@
+3a80069fcc09aa58b795925a04c3a1a9
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg
new file mode 100644
index 0000000..caf1235
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5
new file mode 100644
index 0000000..5dc8e1b
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5
@@ -0,0 +1 @@
+1071229abc0a24fe1359fe7763b4c8d0
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg
new file mode 100644
index 0000000..f0cc7fa
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg
@@ -0,0 +1,71 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5
new file mode 100644
index 0000000..fd79a8c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5
@@ -0,0 +1 @@
+6c94c8bb54063a87c9a021e499d2535a
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg
new file mode 100644
index 0000000..9d17916
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5
new file mode 100644
index 0000000..15413c7
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5
@@ -0,0 +1 @@
+e49f7a18c7f7394bc3ba168c4b7dfcbf
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg
new file mode 100644
index 0000000..dbff1cc
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg
@@ -0,0 +1,176 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5
new file mode 100644
index 0000000..bf358a8
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5
@@ -0,0 +1 @@
+c2b8f7eecd95ef8d0186d7f206ad610c
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg
new file mode 100644
index 0000000..a105cc3
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5
new file mode 100644
index 0000000..c70fc7f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5
@@ -0,0 +1 @@
+3fdd0ff288b79c613c0ccbdde81f6b44
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg
new file mode 100644
index 0000000..505f77c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg
@@ -0,0 +1,78 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5
new file mode 100644
index 0000000..58d4f7d
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5
@@ -0,0 +1 @@
+e64b34f639342bc29f69697ff85b6115
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg
new file mode 100644
index 0000000..4afaaf0
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5
new file mode 100644
index 0000000..e84f7d7
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5
@@ -0,0 +1 @@
+ce0d7d39675e66eb580380759195be0e
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg
new file mode 100644
index 0000000..5494c0f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5
new file mode 100644
index 0000000..584c012
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5
@@ -0,0 +1 @@
+b4d0f6392752d140ca4858cea5527f74
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg
new file mode 100644
index 0000000..28ed8fb
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg
@@ -0,0 +1,80 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5
new file mode 100644
index 0000000..d953518
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5
@@ -0,0 +1 @@
+9194291c6b536fb2aa39473066ce3d57
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg
new file mode 100644
index 0000000..d1c93aa
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg
@@ -0,0 +1,153 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5
new file mode 100644
index 0000000..ea4f60f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5
@@ -0,0 +1 @@
+01a09828002214953a0e4ce5a004f82b
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg
new file mode 100644
index 0000000..9b98fd2
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5
new file mode 100644
index 0000000..8cce519
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5
@@ -0,0 +1 @@
+be0799c63ed63825acfa4aefd053a607
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg
new file mode 100644
index 0000000..dcc9f2d
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5
new file mode 100644
index 0000000..562794f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5
@@ -0,0 +1 @@
+de5b0ac337604f2c79dc74aaee0a1763
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg
new file mode 100644
index 0000000..93d705f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5
new file mode 100644
index 0000000..cc19180
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5
@@ -0,0 +1 @@
+8ed68fcd41631bf9876f85ae6b4b3de2
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg
new file mode 100644
index 0000000..4c91c11
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5
new file mode 100644
index 0000000..b855a20
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5
@@ -0,0 +1 @@
+2e42fe22a9070fc3f543991e99faf205
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg
new file mode 100644
index 0000000..aff53e7
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5
new file mode 100644
index 0000000..f452c00
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5
@@ -0,0 +1 @@
+f5fed9d6bb8f646e32b31343d031871d
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg
new file mode 100644
index 0000000..f764e5c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5
new file mode 100644
index 0000000..990f237
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5
@@ -0,0 +1 @@
+e8676c5f3006c0807c1fe30ed75a7701
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg
new file mode 100644
index 0000000..7230635
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg
@@ -0,0 +1,85 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5
new file mode 100644
index 0000000..3221326
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5
@@ -0,0 +1 @@
+8e9085e7e96a72eae434ab3b9bb34f71
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg
new file mode 100644
index 0000000..c8bea4f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5
new file mode 100644
index 0000000..6db17d2
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5
@@ -0,0 +1 @@
+98e4897c5b45a162671e50e760d299ce
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg
new file mode 100644
index 0000000..40f016c
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5
new file mode 100644
index 0000000..5ae4b79
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5
@@ -0,0 +1 @@
+3a38b34ed8236aa424f3ba243fba3cf0
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg
new file mode 100644
index 0000000..9c8fc75
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5 b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5
new file mode 100644
index 0000000..6c5244f
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5
@@ -0,0 +1 @@
+2232db7a39aade439b305a1e3373c005
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg
new file mode 100644
index 0000000..f54f300
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5 b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5
new file mode 100644
index 0000000..22a2946
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5
@@ -0,0 +1 @@
+3dd9f4364bc4c50da31157ac03a3e97f
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg
new file mode 100644
index 0000000..dd6e7a9
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5
new file mode 100644
index 0000000..2e3ae13
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5
@@ -0,0 +1 @@
+ae33ddd5f5a4f2a38ac959e4302206a1
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg
new file mode 100644
index 0000000..ab658ad
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5
new file mode 100644
index 0000000..2e3ae13
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5
@@ -0,0 +1 @@
+ae33ddd5f5a4f2a38ac959e4302206a1
\ No newline at end of file
diff --git a/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg
new file mode 100644
index 0000000..ab658ad
--- /dev/null
+++ b/docs/rtf/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5
new file mode 100644
index 0000000..9d383d8
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5
@@ -0,0 +1 @@
+01c384c51b9b9d20ecd5af3519740055
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg
new file mode 100644
index 0000000..71f1b91
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5
new file mode 100644
index 0000000..f317412
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5
@@ -0,0 +1 @@
+fac6736890d3e6569a3e562221e2e80c
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg
new file mode 100644
index 0000000..b9d2a82
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg
@@ -0,0 +1,156 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5
new file mode 100644
index 0000000..6ec9086
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5
@@ -0,0 +1 @@
+cae6ed50d17895098d586359b58517cc
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg
new file mode 100644
index 0000000..7f0ecd2
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5
new file mode 100644
index 0000000..332ac4f
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5
@@ -0,0 +1 @@
+ef8182faf1bcd63d3487614530947b10
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg
new file mode 100644
index 0000000..f1760ee
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg
@@ -0,0 +1,317 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5
new file mode 100644
index 0000000..9c174cc
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5
@@ -0,0 +1 @@
+acd28568eb3edcfc33ca2521297fd075
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg
new file mode 100644
index 0000000..e81ff91
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg
@@ -0,0 +1,156 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5
new file mode 100644
index 0000000..080d356
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5
@@ -0,0 +1 @@
+8bc1cc2849f225faaeab1719b6c0a3d6
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg
new file mode 100644
index 0000000..60496ec
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg
@@ -0,0 +1,157 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5 b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5
new file mode 100644
index 0000000..a77222b
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5
@@ -0,0 +1 @@
+2b4709da9a40be7a45efe895e73cc31f
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg
new file mode 100644
index 0000000..6b812fa
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg
@@ -0,0 +1,156 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5
new file mode 100644
index 0000000..eb46690
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5
@@ -0,0 +1 @@
+2db6cf58d997b43a776fb21752d4aa29
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg
new file mode 100644
index 0000000..9daa237
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg
@@ -0,0 +1,50 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5
new file mode 100644
index 0000000..9e0bad2
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5
@@ -0,0 +1 @@
+fe055e22847261fb4e8e965247fa63e4
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg
new file mode 100644
index 0000000..c43c56a
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5
new file mode 100644
index 0000000..9cef76a
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5
@@ -0,0 +1 @@
+28bc7f826bf5c37f1e543c6a2217c011
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg
new file mode 100644
index 0000000..c8128c0
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg
@@ -0,0 +1,123 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5
new file mode 100644
index 0000000..179211c
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5
@@ -0,0 +1 @@
+66249d926cb6fd81bdf9ba46dc56d466
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg
new file mode 100644
index 0000000..3eded28
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5
new file mode 100644
index 0000000..494b2db
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5
@@ -0,0 +1 @@
+fe3072609a9a0bf3d14e3143add0e6da
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg
new file mode 100644
index 0000000..64b8b29
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg
@@ -0,0 +1,123 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5
new file mode 100644
index 0000000..bdddb02
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5
@@ -0,0 +1 @@
+6604e171883373f917ba1e50c7dcf2a8
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg
new file mode 100644
index 0000000..d06ccaf
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg
@@ -0,0 +1,101 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5
new file mode 100644
index 0000000..49db9b2
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5
@@ -0,0 +1 @@
+18a45266c6274df8d06c6771aea4d3ce
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg
new file mode 100644
index 0000000..ac12bca
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg
@@ -0,0 +1,123 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5
new file mode 100644
index 0000000..d5a551d
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5
@@ -0,0 +1 @@
+2efae0628f3580e167ff4e2e9744ff76
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg
new file mode 100644
index 0000000..c7427eb
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5
new file mode 100644
index 0000000..b6d0832
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5
@@ -0,0 +1 @@
+ccb36b28b36810b7debb14198aa8c840
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg
new file mode 100644
index 0000000..15e3aaa
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg
@@ -0,0 +1,101 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5
new file mode 100644
index 0000000..616400e
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5
@@ -0,0 +1 @@
+2dda560e911927ca62424d428f826e98
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg
new file mode 100644
index 0000000..094e23c
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5
new file mode 100644
index 0000000..5292fed
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5
@@ -0,0 +1 @@
+8a521fb6ddaca64c6678d226bec595a0
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg
new file mode 100644
index 0000000..6141687
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg
@@ -0,0 +1,101 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5
new file mode 100644
index 0000000..904ab8d
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5
@@ -0,0 +1 @@
+6fbf377ddd24e2b0afa956a95f55e6c5
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg
new file mode 100644
index 0000000..57a064c
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg
@@ -0,0 +1,101 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5 b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5
new file mode 100644
index 0000000..68d6c1c
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5
@@ -0,0 +1 @@
+2e054bb79c0b6f45c4788678aac6e514
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg
new file mode 100644
index 0000000..8bd749b
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5
new file mode 100644
index 0000000..f0a528b
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5
@@ -0,0 +1 @@
+ab8cbd57a4ebb302c58c19a4efbc1c6e
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg
new file mode 100644
index 0000000..acbac22
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5 b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5
new file mode 100644
index 0000000..064b512
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5
@@ -0,0 +1 @@
+40be6a2b68a00531af40fd3546a6f158
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg
new file mode 100644
index 0000000..bf31fdb
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg
@@ -0,0 +1,139 @@
+
+
+
+
+
diff --git a/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5 b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5
new file mode 100644
index 0000000..2632d9a
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5
@@ -0,0 +1 @@
+5ca25c9e4be6eb96370b0328e2a5e679
\ No newline at end of file
diff --git a/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg
new file mode 100644
index 0000000..1f3a16f
--- /dev/null
+++ b/docs/rtf/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c.rtf b/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c.rtf
new file mode 100644
index 0000000..d54cf96
--- /dev/null
+++ b/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c.rtf
@@ -0,0 +1,137 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
+{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;}
+{\stylesheet
+{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
+{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect}
+{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
+{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
+{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
+{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
+{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
+{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
+{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
+{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
+{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
+{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
+{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
+{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
+{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
+{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
+{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
+{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
+{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
+{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
+{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
+{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
+{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;}
+{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;}
+{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;}
+{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;}
+{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;}
+{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;}
+{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;}
+{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;}
+{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;}
+{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;}
+{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;}
+{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;}
+{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;}
+{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;}
+{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;}
+{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;}
+{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;}
+{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;}
+{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;}
+{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;}
+{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;}
+{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;}
+{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;}
+{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;}
+{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;}
+{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;}
+{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;}
+{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;}
+{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;}
+{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;}
+{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;}
+{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;}
+{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;}
+{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;}
+{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;}
+{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;}
+{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;}
+{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;}
+{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;}
+{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;}
+{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;}
+{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;}
+{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;}
+{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;}
+{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;}
+{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;}
+{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;}
+{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;}
+{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;}
+{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;}
+{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;}
+{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;}
+{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;}
+{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;}
+{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;}
+{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;}
+{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;}
+{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;}
+{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;}
+{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;}
+{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;}
+{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;}
+{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;}
+{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;}
+{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;}
+{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;}
+{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;}
+{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;}
+{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;}
+{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;}
+{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;}
+{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;}
+{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;}
+{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;}
+{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;}
+}
+{\comment begin body}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests Directory Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests Directory Reference}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests Directory Reference}
+{\bkmkstart AAAAAAAAPA}
+{\bkmkend AAAAAAAAPA}
+Directory dependency graph for tests:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Files\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b __init__.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b conftest.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b test_commit_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b test_config_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b test_doc_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b test_web_config.py}\par
+}
+}
\ No newline at end of file
diff --git a/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 b/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5
new file mode 100644
index 0000000..afb9081
--- /dev/null
+++ b/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5
@@ -0,0 +1 @@
+fdbdbdbe253c547a3b41063e5036418d
\ No newline at end of file
diff --git a/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg b/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg
new file mode 100644
index 0000000..53f13f5
--- /dev/null
+++ b/docs/rtf/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/docs/rtf/dir_1648a057408aae8db85b8e3797335623.rtf b/docs/rtf/dir_1648a057408aae8db85b8e3797335623.rtf
new file mode 100644
index 0000000..32faca0
--- /dev/null
+++ b/docs/rtf/dir_1648a057408aae8db85b8e3797335623.rtf
@@ -0,0 +1,119 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
+{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;}
+{\stylesheet
+{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
+{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect}
+{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
+{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
+{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
+{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
+{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
+{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
+{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
+{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
+{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
+{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
+{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
+{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
+{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
+{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
+{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
+{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
+{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
+{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
+{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
+{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
+{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;}
+{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;}
+{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;}
+{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;}
+{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;}
+{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;}
+{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;}
+{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;}
+{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;}
+{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;}
+{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;}
+{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;}
+{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;}
+{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;}
+{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;}
+{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;}
+{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;}
+{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;}
+{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;}
+{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;}
+{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;}
+{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;}
+{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;}
+{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;}
+{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;}
+{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;}
+{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;}
+{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;}
+{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;}
+{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;}
+{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;}
+{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;}
+{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;}
+{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;}
+{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;}
+{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;}
+{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;}
+{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;}
+{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;}
+{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;}
+{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;}
+{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;}
+{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;}
+{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;}
+{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;}
+{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;}
+{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;}
+{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;}
+{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;}
+{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;}
+{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;}
+{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;}
+{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;}
+{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;}
+{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;}
+{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;}
+{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;}
+{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;}
+{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;}
+{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;}
+{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;}
+{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;}
+{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;}
+{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;}
+{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;}
+{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;}
+{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;}
+{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;}
+{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;}
+{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;}
+{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;}
+{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;}
+{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;}
+{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;}
+{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;}
+}
+{\comment begin body}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs Directory Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs Directory Reference}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs Directory Reference}
+{\bkmkstart AAAAAAAAOX}
+{\bkmkend AAAAAAAAOX}
+Directory dependency graph for docs:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "dir_1648a057408aae8db85b8e3797335623_dep.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
\ No newline at end of file
diff --git a/docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.md5 b/docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.md5
new file mode 100644
index 0000000..2214ec5
--- /dev/null
+++ b/docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.md5
@@ -0,0 +1 @@
+103c12b563793db32ed50b111f45bada
\ No newline at end of file
diff --git a/docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.svg b/docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.svg
new file mode 100644
index 0000000..b859cd6
--- /dev/null
+++ b/docs/rtf/dir_1648a057408aae8db85b8e3797335623_dep.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23.rtf b/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23.rtf
new file mode 100644
index 0000000..8e7a5c7
--- /dev/null
+++ b/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23.rtf
@@ -0,0 +1,137 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
+{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;}
+{\stylesheet
+{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
+{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect}
+{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
+{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
+{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
+{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
+{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
+{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
+{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
+{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
+{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
+{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
+{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
+{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
+{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
+{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
+{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
+{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
+{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
+{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
+{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
+{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
+{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;}
+{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;}
+{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;}
+{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;}
+{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;}
+{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;}
+{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;}
+{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;}
+{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;}
+{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;}
+{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;}
+{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;}
+{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;}
+{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;}
+{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;}
+{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;}
+{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;}
+{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;}
+{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;}
+{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;}
+{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;}
+{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;}
+{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;}
+{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;}
+{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;}
+{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;}
+{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;}
+{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;}
+{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;}
+{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;}
+{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;}
+{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;}
+{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;}
+{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;}
+{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;}
+{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;}
+{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;}
+{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;}
+{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;}
+{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;}
+{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;}
+{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;}
+{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;}
+{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;}
+{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;}
+{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;}
+{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;}
+{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;}
+{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;}
+{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;}
+{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;}
+{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;}
+{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;}
+{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;}
+{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;}
+{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;}
+{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;}
+{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;}
+{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;}
+{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;}
+{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;}
+{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;}
+{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;}
+{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;}
+{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;}
+{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;}
+{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;}
+{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;}
+{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;}
+{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;}
+{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;}
+{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;}
+{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;}
+{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;}
+{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;}
+}
+{\comment begin body}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands Directory Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands Directory Reference}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands Directory Reference}
+{\bkmkstart AAAAAAAAOW}
+{\bkmkend AAAAAAAAOW}
+Directory dependency graph for commands:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Files\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b __init__.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b auth_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b commit_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b config_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b doc_commands.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b hook_commands.py}\par
+}
+}
\ No newline at end of file
diff --git a/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 b/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5
new file mode 100644
index 0000000..597f466
--- /dev/null
+++ b/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5
@@ -0,0 +1 @@
+1c8b9302d49050442030c2a1fe004137
\ No newline at end of file
diff --git a/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg b/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg
new file mode 100644
index 0000000..a17413c
--- /dev/null
+++ b/docs/rtf/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
diff --git a/docs/rtf/dir_b3b22d2ab7966b65f6b237e3231b41be.rtf b/docs/rtf/dir_b3b22d2ab7966b65f6b237e3231b41be.rtf
new file mode 100644
index 0000000..4689fd1
--- /dev/null
+++ b/docs/rtf/dir_b3b22d2ab7966b65f6b237e3231b41be.rtf
@@ -0,0 +1,135 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
+{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;}
+{\stylesheet
+{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
+{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect}
+{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
+{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
+{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
+{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
+{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
+{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
+{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
+{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
+{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
+{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
+{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
+{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
+{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
+{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
+{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
+{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
+{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
+{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
+{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
+{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
+{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;}
+{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;}
+{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;}
+{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;}
+{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;}
+{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;}
+{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;}
+{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;}
+{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;}
+{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;}
+{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;}
+{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;}
+{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;}
+{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;}
+{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;}
+{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;}
+{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;}
+{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;}
+{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;}
+{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;}
+{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;}
+{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;}
+{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;}
+{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;}
+{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;}
+{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;}
+{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;}
+{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;}
+{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;}
+{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;}
+{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;}
+{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;}
+{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;}
+{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;}
+{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;}
+{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;}
+{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;}
+{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;}
+{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;}
+{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;}
+{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;}
+{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;}
+{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;}
+{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;}
+{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;}
+{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;}
+{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;}
+{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;}
+{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;}
+{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;}
+{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;}
+{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;}
+{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;}
+{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;}
+{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;}
+{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;}
+{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;}
+{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;}
+{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;}
+{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;}
+{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;}
+{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;}
+{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;}
+{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;}
+{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;}
+{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;}
+{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;}
+{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;}
+{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;}
+{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;}
+{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;}
+{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;}
+{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;}
+{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;}
+{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;}
+}
+{\comment begin body}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli Directory Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli Directory Reference}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli Directory Reference}
+{\bkmkstart AAAAAAAAOY}
+{\bkmkend AAAAAAAAOY}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Directories\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+directory {\b docs}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+directory {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+directory {\b tests}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Files\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b setup.py}\par
+}
+}
\ No newline at end of file
diff --git a/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5.rtf b/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5.rtf
new file mode 100644
index 0000000..8874f23
--- /dev/null
+++ b/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5.rtf
@@ -0,0 +1,163 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
+{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;}
+{\stylesheet
+{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
+{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect}
+{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
+{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
+{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
+{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
+{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
+{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
+{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
+{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
+{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
+{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
+{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
+{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
+{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
+{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
+{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
+{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
+{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
+{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
+{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
+{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
+{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;}
+{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;}
+{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;}
+{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;}
+{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;}
+{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;}
+{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;}
+{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;}
+{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;}
+{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;}
+{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;}
+{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;}
+{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;}
+{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;}
+{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;}
+{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;}
+{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;}
+{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;}
+{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;}
+{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;}
+{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;}
+{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;}
+{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;}
+{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;}
+{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;}
+{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;}
+{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;}
+{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;}
+{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;}
+{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;}
+{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;}
+{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;}
+{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;}
+{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;}
+{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;}
+{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;}
+{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;}
+{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;}
+{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;}
+{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;}
+{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;}
+{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;}
+{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;}
+{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;}
+{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;}
+{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;}
+{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;}
+{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;}
+{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;}
+{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;}
+{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;}
+{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;}
+{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;}
+{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;}
+{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;}
+{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;}
+{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;}
+{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;}
+{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;}
+{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;}
+{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;}
+{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;}
+{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;}
+{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;}
+{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;}
+{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;}
+{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;}
+{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;}
+{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;}
+{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;}
+{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;}
+{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;}
+{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;}
+{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;}
+{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;}
+}
+{\comment begin body}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook Directory Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook Directory Reference}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook Directory Reference}
+{\bkmkstart AAAAAAAAOZ}
+{\bkmkend AAAAAAAAOZ}
+Directory dependency graph for penify_hook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Directories\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+directory {\b commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Files\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b __init__.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b api_client.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b base_analyzer.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b commit_analyzer.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b config_command.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b constants.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b file_analyzer.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b folder_analyzer.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b git_analyzer.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b jira_client.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b llm_client.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b login_command.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b main.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b ui_utils.py}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+file {\b utils.py}\par
+}
+}
\ No newline at end of file
diff --git a/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 b/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5
new file mode 100644
index 0000000..577134d
--- /dev/null
+++ b/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5
@@ -0,0 +1 @@
+81055f3442546e3f091686cb9eef1bc5
\ No newline at end of file
diff --git a/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg b/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg
new file mode 100644
index 0000000..5b913db
--- /dev/null
+++ b/docs/rtf/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5
new file mode 100644
index 0000000..3843ca4
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5
@@ -0,0 +1 @@
+8ad325585e8efe43cb16f6c7070d7d0a
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg
new file mode 100644
index 0000000..7efc66a
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5
new file mode 100644
index 0000000..a7db012
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5
@@ -0,0 +1 @@
+65e495614449516908c997067ca3d2d2
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg
new file mode 100644
index 0000000..42af25d
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg
@@ -0,0 +1,60 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5
new file mode 100644
index 0000000..17fadc1
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5
@@ -0,0 +1 @@
+31a51591f0a8f9ef897c4a08daac5829
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg
new file mode 100644
index 0000000..c94169d
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5
new file mode 100644
index 0000000..051c10c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5
@@ -0,0 +1 @@
+ec7d7c899a70e1c68057353448e9a6d9
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg
new file mode 100644
index 0000000..9b6688c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg
@@ -0,0 +1,76 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5
new file mode 100644
index 0000000..f0df322
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5
@@ -0,0 +1 @@
+ebbb356587ab923660dadd713f529935
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg
new file mode 100644
index 0000000..a8d9791
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg
@@ -0,0 +1,139 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5
new file mode 100644
index 0000000..30b2f36
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5
@@ -0,0 +1 @@
+b42af33551c96c0ccabd26bf5dac7901
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg
new file mode 100644
index 0000000..35f0b28
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg
@@ -0,0 +1,146 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5
new file mode 100644
index 0000000..c49ca59
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5
@@ -0,0 +1 @@
+9d31c6bce57180d0019639c06f0a64c6
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg
new file mode 100644
index 0000000..fd13edd
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5
new file mode 100644
index 0000000..9c1af92
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5
@@ -0,0 +1 @@
+76b990698c4e374b742a1a611bfd524b
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg
new file mode 100644
index 0000000..9299eb7
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg
@@ -0,0 +1,300 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5
new file mode 100644
index 0000000..47a6cde
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5
@@ -0,0 +1 @@
+a8800179f1f560b476cc721ea33d08f7
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg
new file mode 100644
index 0000000..a93e9a1
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5
new file mode 100644
index 0000000..8a855e7
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5
@@ -0,0 +1 @@
+168858f3e9d4759f99db4c52c229e797
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg
new file mode 100644
index 0000000..cb6e77a
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5
new file mode 100644
index 0000000..3595ee0
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5
@@ -0,0 +1 @@
+543187d5c63c1c460ff6dd5d57c6a646
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg
new file mode 100644
index 0000000..1f7e932
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5
new file mode 100644
index 0000000..fd6eb21
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5
@@ -0,0 +1 @@
+91a6c2c6a25f3c8c1d38cd6f5f5c3f25
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg
new file mode 100644
index 0000000..15152bf
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5
new file mode 100644
index 0000000..f9c067a
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5
@@ -0,0 +1 @@
+78a315f2a9f5ef12496dc5b4a1f2f578
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg
new file mode 100644
index 0000000..2575f6a
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg
@@ -0,0 +1,398 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5
new file mode 100644
index 0000000..1d6bd9c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5
@@ -0,0 +1 @@
+1312bc7ffa0a3c4b3d914591e46647ea
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg
new file mode 100644
index 0000000..b5caeb1
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5
new file mode 100644
index 0000000..4427799
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5
@@ -0,0 +1 @@
+64e3e5d1614b987e9beaa7b1002e49e6
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg
new file mode 100644
index 0000000..a6fab0f
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg
@@ -0,0 +1,94 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5
new file mode 100644
index 0000000..47f24a6
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5
@@ -0,0 +1 @@
+e227b3587529f3c7fa14501fb496ccc8
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg
new file mode 100644
index 0000000..036847e
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg
@@ -0,0 +1,106 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5
new file mode 100644
index 0000000..5a5a866
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5
@@ -0,0 +1 @@
+9c6b048bd5412b617ea890b1f88c2104
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg
new file mode 100644
index 0000000..0a189a5
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg
@@ -0,0 +1,214 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5
new file mode 100644
index 0000000..c4b9ce2
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5
@@ -0,0 +1 @@
+67c138c843a1f5d8ab7592c326643328
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg
new file mode 100644
index 0000000..4cb30cf
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5
new file mode 100644
index 0000000..280df61
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5
@@ -0,0 +1 @@
+32e055c0ae757bbecf2b86db164d29df
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg
new file mode 100644
index 0000000..89ccd03
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg
@@ -0,0 +1,128 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5
new file mode 100644
index 0000000..6643612
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5
@@ -0,0 +1 @@
+69777adad7caeabd935b90d3f0ca21e8
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg
new file mode 100644
index 0000000..c7e939c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5
new file mode 100644
index 0000000..3e643ef
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5
@@ -0,0 +1 @@
+4f8f2c5d878438fd8fa2e1f0ca1dbc52
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg
new file mode 100644
index 0000000..150e9b7
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg
@@ -0,0 +1,264 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5
new file mode 100644
index 0000000..26009b0
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5
@@ -0,0 +1 @@
+91b1c0b60f8171163e43b782cfdc5e4b
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg
new file mode 100644
index 0000000..1c3e84e
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg
@@ -0,0 +1,51 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5
new file mode 100644
index 0000000..a2245b9
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5
@@ -0,0 +1 @@
+e208c1be2bea05a2824626f2971c2bf3
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg
new file mode 100644
index 0000000..5f08f28
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg
@@ -0,0 +1,403 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5
new file mode 100644
index 0000000..9c2e575
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5
@@ -0,0 +1 @@
+68e4fb55d25659f523e8547c8cb01464
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg
new file mode 100644
index 0000000..ce47665
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5
new file mode 100644
index 0000000..1f53baa
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5
@@ -0,0 +1 @@
+d1ffd3debe0bd71ea914f1dd47c727ad
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg
new file mode 100644
index 0000000..d4a9fb5
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg
@@ -0,0 +1,116 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5
new file mode 100644
index 0000000..7795142
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5
@@ -0,0 +1 @@
+e83a80d18918d47faae41628fcd92c7a
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg
new file mode 100644
index 0000000..ad6fa7d
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5
new file mode 100644
index 0000000..166f9b7
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5
@@ -0,0 +1 @@
+e627346d77982130e6685bfc2c553220
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg
new file mode 100644
index 0000000..2e29aa1
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5
new file mode 100644
index 0000000..472a430
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5
@@ -0,0 +1 @@
+d7ee1e07127beb9f489b974a61acce5d
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg
new file mode 100644
index 0000000..8fa410b
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg
@@ -0,0 +1,170 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5
new file mode 100644
index 0000000..9d429ee
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5
@@ -0,0 +1 @@
+ed70390d069e80c493faf1a14a7c6fff
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg
new file mode 100644
index 0000000..c8b3178
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5
new file mode 100644
index 0000000..171b82e
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5
@@ -0,0 +1 @@
+5e9faa5a79a60188abcf0c90efae69aa
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg
new file mode 100644
index 0000000..0ae8a84
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg
@@ -0,0 +1,221 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5
new file mode 100644
index 0000000..0dc7e32
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5
@@ -0,0 +1 @@
+0fa78969e5f8672d0da52972dd124680
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg
new file mode 100644
index 0000000..c570dfd
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg
@@ -0,0 +1,60 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5
new file mode 100644
index 0000000..197f108
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5
@@ -0,0 +1 @@
+25f36344702d0e8ec428aac2f670078e
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg
new file mode 100644
index 0000000..12ed4ff
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg
@@ -0,0 +1,124 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5
new file mode 100644
index 0000000..333d2ec
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5
@@ -0,0 +1 @@
+3ec2e3ff4462cc865b4cb6fd3a62753d
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg
new file mode 100644
index 0000000..712e836
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg
@@ -0,0 +1,124 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5
new file mode 100644
index 0000000..1e009e6
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5
@@ -0,0 +1 @@
+4f75720d323fed0e1cf98ec14ae8f6e9
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg
new file mode 100644
index 0000000..ba2ae8f
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg
@@ -0,0 +1,182 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5
new file mode 100644
index 0000000..a09bdd4
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5
@@ -0,0 +1 @@
+f35e472a3767aa0a0b09219e96174cf9
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg
new file mode 100644
index 0000000..9d7881e
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5
new file mode 100644
index 0000000..48311b5
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5
@@ -0,0 +1 @@
+a17b5eb406ca6a74de12d7201d9bcee7
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg
new file mode 100644
index 0000000..89dc211
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5
new file mode 100644
index 0000000..2daae41
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5
@@ -0,0 +1 @@
+34cbd1a77d726e3937d67455d405b0ba
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg
new file mode 100644
index 0000000..7743579
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5
new file mode 100644
index 0000000..ad91965
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5
@@ -0,0 +1 @@
+6a1ceeef99a0101ba5882e9e71fa9bce
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg
new file mode 100644
index 0000000..1ef455e
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5
new file mode 100644
index 0000000..7a114f5
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5
@@ -0,0 +1 @@
+1f6ec32e02e9919f90ba1a6a23743cb6
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg
new file mode 100644
index 0000000..5ef77f9
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5
new file mode 100644
index 0000000..304cb74
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5
@@ -0,0 +1 @@
+73631f13dbb5d5f90aafdead88d96c1c
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg
new file mode 100644
index 0000000..06f8a9c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg
@@ -0,0 +1,620 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5
new file mode 100644
index 0000000..4bf17ac
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5
@@ -0,0 +1 @@
+3a9435159e82b3293bbcf47f41f2b41c
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg
new file mode 100644
index 0000000..5001f6b
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5
new file mode 100644
index 0000000..e8c2c22
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5
@@ -0,0 +1 @@
+e844738072248c6c64fdcc2330f4e553
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg
new file mode 100644
index 0000000..54903a7
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg
@@ -0,0 +1,259 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5
new file mode 100644
index 0000000..61c5559
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5
@@ -0,0 +1 @@
+107c8ab941ac9fce368d49be27d3ad77
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg
new file mode 100644
index 0000000..725dce6
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5
new file mode 100644
index 0000000..28e733d
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5
@@ -0,0 +1 @@
+31face48bece50b969dd777e2fc02655
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg
new file mode 100644
index 0000000..5f29536
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5
new file mode 100644
index 0000000..95113cf
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5
@@ -0,0 +1 @@
+dc9c89eee18a938f2f9191abf1d0c4e3
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg
new file mode 100644
index 0000000..0913177
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5
new file mode 100644
index 0000000..cd55665
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5
@@ -0,0 +1 @@
+9fb882734b6d928eec5be79c1f8ddcfd
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg
new file mode 100644
index 0000000..45e4d85
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg
@@ -0,0 +1,243 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5
new file mode 100644
index 0000000..2cb272d
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5
@@ -0,0 +1 @@
+86ecc3cd8eb77718a70cf2d0a033d81b
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg
new file mode 100644
index 0000000..c5c8ad0
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5
new file mode 100644
index 0000000..aeb43db
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5
@@ -0,0 +1 @@
+5a5f4e31cb2a03012aa538af45b7c2f7
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg
new file mode 100644
index 0000000..1be6b94
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg
@@ -0,0 +1,71 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5
new file mode 100644
index 0000000..13a3f9b
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5
@@ -0,0 +1 @@
+07bb20aff57367351bd025b6bbac0225
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg
new file mode 100644
index 0000000..344f55a
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5
new file mode 100644
index 0000000..2972d31
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5
@@ -0,0 +1 @@
+c7fe8cba89008798c4a6df0ce478844e
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg
new file mode 100644
index 0000000..9b30dd3
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5
new file mode 100644
index 0000000..69b06bc
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5
@@ -0,0 +1 @@
+e9b17f53f8eea3fa235635a840d97fb5
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg
new file mode 100644
index 0000000..75f49e6
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg
@@ -0,0 +1,178 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5
new file mode 100644
index 0000000..5199573
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5
@@ -0,0 +1 @@
+e25efaa5775be3034819eb11f9cbeeb3
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg
new file mode 100644
index 0000000..75e6afd
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg
@@ -0,0 +1,87 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5
new file mode 100644
index 0000000..882dba5
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5
@@ -0,0 +1 @@
+3b447097b4d45a9b7a66bc911d7dd54f
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg
new file mode 100644
index 0000000..49f0a57
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5
new file mode 100644
index 0000000..e14594c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5
@@ -0,0 +1 @@
+f7f77cf41919f414860683374ddefc0a
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg
new file mode 100644
index 0000000..e5601e4
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5
new file mode 100644
index 0000000..8538194
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5
@@ -0,0 +1 @@
+9c27aeee4681a41d96bdc9cb1c2cd259
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg
new file mode 100644
index 0000000..12b58a6
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg
@@ -0,0 +1,162 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5
new file mode 100644
index 0000000..f566c4a
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5
@@ -0,0 +1 @@
+0ee2c99f818d114be866466bd3ca67e3
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg
new file mode 100644
index 0000000..66b23f8
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5
new file mode 100644
index 0000000..9d7b6fc
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5
@@ -0,0 +1 @@
+4693bdcc77b647a09f27d1c12b6cf38a
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg
new file mode 100644
index 0000000..eca3aa9
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg
@@ -0,0 +1,268 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5
new file mode 100644
index 0000000..0acebf0
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5
@@ -0,0 +1 @@
+ebb2d3fbd74327cb6297532859329884
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg
new file mode 100644
index 0000000..64e8b48
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg
@@ -0,0 +1,337 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5
new file mode 100644
index 0000000..fc03531
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5
@@ -0,0 +1 @@
+cb2ef693a136057440c77b2ffc5fc5cc
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg
new file mode 100644
index 0000000..d2fcc11
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5
new file mode 100644
index 0000000..c14d515
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5
@@ -0,0 +1 @@
+65fe82e63024fcc065fa65dce2c0c8fb
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg
new file mode 100644
index 0000000..5d98bf8
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5
new file mode 100644
index 0000000..568301c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5
@@ -0,0 +1 @@
+34c0d184b1a914e69d4b0bdacbaaff04
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg
new file mode 100644
index 0000000..4185c69
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5
new file mode 100644
index 0000000..354e231
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5
@@ -0,0 +1 @@
+788f6631fd68b88312b14eace530bcf4
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg
new file mode 100644
index 0000000..aca9e47
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg
@@ -0,0 +1,72 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5
new file mode 100644
index 0000000..1431c94
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5
@@ -0,0 +1 @@
+dd726258fb2e799d709d2647521b3371
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg
new file mode 100644
index 0000000..058cc5f
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5
new file mode 100644
index 0000000..768ce43
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5
@@ -0,0 +1 @@
+7f750ca69d16550b240f7065f5db45d2
\ No newline at end of file
diff --git a/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg
new file mode 100644
index 0000000..a31134c
--- /dev/null
+++ b/docs/rtf/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg
@@ -0,0 +1,727 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5
new file mode 100644
index 0000000..b280dc5
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5
@@ -0,0 +1 @@
+28c17f21f2a2a250d23b14c68e3e5d3a
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg
new file mode 100644
index 0000000..fc67c78
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5
new file mode 100644
index 0000000..53e2e0a
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5
@@ -0,0 +1 @@
+192fbe5412db3710d1849692c54ac106
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg
new file mode 100644
index 0000000..0c38fcf
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5
new file mode 100644
index 0000000..300f399
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5
@@ -0,0 +1 @@
+aef759552fc6cc4d80899b0b13739a5e
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg
new file mode 100644
index 0000000..4d2e365
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg
@@ -0,0 +1,186 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5
new file mode 100644
index 0000000..ef64a42
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5
@@ -0,0 +1 @@
+10d76966ac7089e8706fb1aec3e4f9d6
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg
new file mode 100644
index 0000000..2445c23
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5
new file mode 100644
index 0000000..076630a
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5
@@ -0,0 +1 @@
+064f1a8c9470887507dea5cf5dd184eb
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg
new file mode 100644
index 0000000..d0a2d25
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5
new file mode 100644
index 0000000..314f15d
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5
@@ -0,0 +1 @@
+e42b926dad2f0ff5205af415d972f1da
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg
new file mode 100644
index 0000000..e97c365
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5
new file mode 100644
index 0000000..99c08a9
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5
@@ -0,0 +1 @@
+d4d1f9d92eb42ae249ce3409ab7627ac
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg
new file mode 100644
index 0000000..46d7331
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5
new file mode 100644
index 0000000..28ac74a
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5
@@ -0,0 +1 @@
+810237d2c8640fcab5bd4448f12a9692
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg
new file mode 100644
index 0000000..6706a8c
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg
@@ -0,0 +1,186 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5
new file mode 100644
index 0000000..56e1467
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5
@@ -0,0 +1 @@
+dc60bba75d6f8dafbd4701e4ac271385
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg
new file mode 100644
index 0000000..b4c88c5
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg
@@ -0,0 +1,186 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5
new file mode 100644
index 0000000..ef9f04c
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5
@@ -0,0 +1 @@
+7930a342103b95a29b43ca93e1212cff
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg
new file mode 100644
index 0000000..6172b6f
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5 b/docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5
new file mode 100644
index 0000000..8969799
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5
@@ -0,0 +1 @@
+4dfa85ad92a13ab307edd504ab65bb1a
\ No newline at end of file
diff --git a/docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg b/docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg
new file mode 100644
index 0000000..e5d09f9
--- /dev/null
+++ b/docs/rtf/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg
@@ -0,0 +1,186 @@
+
+
+
+
+
diff --git a/docs/rtf/refman.rtf b/docs/rtf/refman.rtf
new file mode 100644
index 0000000..9adbf64
--- /dev/null
+++ b/docs/rtf/refman.rtf
@@ -0,0 +1,8871 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
+{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
+{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;}
+{\stylesheet
+{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
+{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect}
+{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
+{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
+{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
+{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
+{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
+{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
+{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
+{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
+{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
+{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
+{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
+{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
+{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
+{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
+{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
+{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
+{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
+{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
+{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
+{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
+{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;}
+{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;}
+{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;}
+{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;}
+{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;}
+{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;}
+{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;}
+{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;}
+{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;}
+{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;}
+{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;}
+{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;}
+{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;}
+{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;}
+{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;}
+{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;}
+{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;}
+{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;}
+{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;}
+{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;}
+{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;}
+{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;}
+{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;}
+{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;}
+{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;}
+{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;}
+{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;}
+{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;}
+{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;}
+{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;}
+{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;}
+{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;}
+{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;}
+{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;}
+{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;}
+{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;}
+{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;}
+{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;}
+{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;}
+{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;}
+{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;}
+{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;}
+{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;}
+{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;}
+{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;}
+{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;}
+{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;}
+{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;}
+{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;}
+{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;}
+{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;}
+{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;}
+{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;}
+{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;}
+{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;}
+{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;}
+{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;}
+{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;}
+{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;}
+{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;}
+{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;}
+{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;}
+{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;}
+{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;}
+{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;}
+{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;}
+{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;}
+{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;}
+{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;}
+{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;}
+{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;}
+{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;}
+{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;}
+{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;}
+{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;}
+}
+{\info
+{\title {\comment penify-cli }penify-cli}
+{\comment Generated by doxygen 1.9.4.}
+{\creatim \yr2025\mo5\dy15\hr10\min20\sec10}
+}\pard\plain
+\sectd\pgnlcrm
+{\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}}
+\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid
+\vertalc\qc\par\par\par\par\par\par\par
+\pard\plain \s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid
+{\field\fldedit {\*\fldinst TITLE \\*MERGEFORMAT}{\fldrslt penify-cli}}\par
+\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid
+\par
+\par\par\par\par\par\par\par\par\par\par\par\par
+\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid
+{\field\fldedit {\*\fldinst AUTHOR \\*MERGEFORMAT}{\fldrslt AUTHOR}}\par
+Version \par{\field\fldedit {\*\fldinst CREATEDATE \\*MERGEFORMAT}{\fldrslt Thu May 15 2025 }}\par
+\page\page\vertalt
+\pard\plain
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Table of Contents\par
+\pard\plain \par
+{\field\fldedit {\*\fldinst TOC \\f \\*MERGEFORMAT}{\fldrslt Table of contents}}\par
+\pard\plain
+\sect \sbkpage \pgndec \pgnrestart
+\sect \sectd \sbknone
+{\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Penify CLI - Commit Commands{\tc \v Penify CLI - Commit Commands}\par \pard\plain
+{\bkmkstart AAAAAAAAPB}
+{\bkmkend AAAAAAAAPB}
+\par \pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+The {\f2 commit} command allows you to generate smart, AI-powered commit messages for your Git changes. This document explains all available options and combinations.\par
+{\bkmkstart AAAAAAAABJ}
+{\bkmkend AAAAAAAABJ}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Basic Usage
+\par}
+{\tc\tcl2 \v Basic Usage}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit\par
+}
+\par
+By default, this command:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Analyzes your staged Git changes\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Generates a concise commit title only\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Uses local LLM if configured, or falls back to Penify API\par}
+\par
+\par}
+{\bkmkstart AAAAAAAABK}
+{\bkmkend AAAAAAAABK}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Command Options
+\par}
+{\tc\tcl2 \v Command Options}
+{\bkmkstart AAAAAAAABL}
+{\bkmkend AAAAAAAABL}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+-m, --message
+\par}
+{\tc\tcl3 \v -m, --message}
+Provide context for the commit message generation:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -m "Fix login flow"\par
+}
+\par
+This hint helps the AI understand your intention and improves the quality of the generated message.\par}
+{\bkmkstart AAAAAAAABM}
+{\bkmkend AAAAAAAABM}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+-e, --terminal
+\par}
+{\tc\tcl3 \v -e, --terminal}
+Open an editor to review and edit the generated commit message before committing:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -e\par
+}
+\par
+This opens your default Git editor with the generated message for review.\par}
+{\bkmkstart AAAAAAAABN}
+{\bkmkend AAAAAAAABN}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+-d, --description
+\par}
+{\tc\tcl3 \v -d, --description}
+Generate a detailed commit message with both title and description:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -d\par
+}
+\par
+Without this flag, only the commit title is generated.\par}
+\par}
+{\bkmkstart AAAAAAAABO}
+{\bkmkend AAAAAAAABO}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Option Combinations
+\par}
+{\tc\tcl2 \v Option Combinations}
+You can combine these options for different workflows:\par
+{\bkmkstart AAAAAAAABP}
+{\bkmkend AAAAAAAABP}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate Title Only with Context
+\par}
+{\tc\tcl3 \v Generate Title Only with Context}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -m "Update login UI"\par
+}
+\par}
+{\bkmkstart AAAAAAAABQ}
+{\bkmkend AAAAAAAABQ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate Title and Description with Context
+\par}
+{\tc\tcl3 \v Generate Title and Description with Context}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -m "Update login UI" -d\par
+}
+\par}
+{\bkmkstart AAAAAAAABR}
+{\bkmkend AAAAAAAABR}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate and Edit Full Commit Message
+\par}
+{\tc\tcl3 \v Generate and Edit Full Commit Message}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -d -e\par
+}
+\par}
+{\bkmkstart AAAAAAAABS}
+{\bkmkend AAAAAAAABS}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate, Edit, and Provide Context
+\par}
+{\tc\tcl3 \v Generate, Edit, and Provide Context}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit -m "Refactor authentication" -d -e\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAABT}
+{\bkmkend AAAAAAAABT}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+LLM and JIRA Integration
+\par}
+{\tc\tcl2 \v LLM and JIRA Integration}
+{\bkmkstart AAAAAAAABU}
+{\bkmkend AAAAAAAABU}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Using Local LLM
+\par}
+{\tc\tcl3 \v Using Local LLM}
+If you've configured a local LLM using {\f2 penify config llm} , the commit command will automatically use it for message generation.\par
+Benefits:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Privacy: your code changes don't leave your machine\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Speed: no network latency\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Works offline\par}
+\par
+\par}
+{\bkmkstart AAAAAAAABV}
+{\bkmkend AAAAAAAABV}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+JIRA Enhancement
+\par}
+{\tc\tcl3 \v JIRA Enhancement}
+If you've configured JIRA integration using {\f2 penify config jira} , the commit command will:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Detect JIRA issue references in your changes\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Fetch issue details from your JIRA instance\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Include issue information in the commit message\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+4.\tab Format the commit message according to JIRA's smart commit format\par}
+\par
+Example output: {
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid PROJ-123: Fix authentication bug in login flow\par
+\par
+- Updated OAuth token validation\par
+- Fixed session timeout handling\par
+- Added unit tests for edge cases\par
+\par
+[PROJ-123]\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAABW}
+{\bkmkend AAAAAAAABW}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Configuration Requirements
+\par}
+{\tc\tcl2 \v Configuration Requirements}
+For the {\f2 commit} command to work:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab You must have configured either:{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Local LLM via {\f2 penify config llm} , OR\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Logged in via {\f2 penify login} \par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab For JIRA enhancement (optional):{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Configure JIRA via {\f2 penify config jira} \par}
+}
+\par
+\par}
+{\bkmkstart AAAAAAAABX}
+{\bkmkend AAAAAAAABX}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Examples
+\par}
+{\tc\tcl2 \v Examples}
+{\bkmkstart AAAAAAAABY}
+{\bkmkend AAAAAAAABY}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Basic Commit with Default Settings
+\par}
+{\tc\tcl3 \v Basic Commit with Default Settings}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Stage your changes\par
+git add .\par
+\par
+# Generate commit message\par
+penify commit\par
+\par
+# Commit with the generated message\par
+git commit -m "Generated message here"\par
+}
+\par}
+{\bkmkstart AAAAAAAABZ}
+{\bkmkend AAAAAAAABZ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Full Workflow with All Features
+\par}
+{\tc\tcl3 \v Full Workflow with All Features}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Stage your changes\par
+git add .\par
+\par
+# Generate detailed commit message with JIRA integration, \par
+# provide context, and open editor for review\par
+penify commit -m "Fix login issue" -d -e\par
+\par
+# The commit is automatically completed after you save and exit the editor\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAACA}
+{\bkmkend AAAAAAAACA}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Troubleshooting
+\par}
+{\tc\tcl2 \v Troubleshooting}
+{\bkmkstart AAAAAAAACB}
+{\bkmkend AAAAAAAACB}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Common Issues
+\par}
+{\tc\tcl3 \v Common Issues}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab **"No LLM model or API token provided"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Run {\f2 penify config llm} to configure a local LLM, or\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Run {\f2 penify login} to authenticate with Penify\par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab **"Failed to connect to JIRA"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check your JIRA configuration with {\f2 cat ~/.penify} \par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Verify your network connection\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure your JIRA credentials are valid\par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab **"Error initializing LLM client"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Verify your LLM configuration settings\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure the LLM API is accessible \par}
+}
+\par
+\par}
+\par}
+}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Penify CLI - Configuration Commands{\tc \v Penify CLI - Configuration Commands}\par \pard\plain
+{\bkmkstart AAAAAAAAPC}
+{\bkmkend AAAAAAAAPC}
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+The {\f2 config} command allows you to set up and manage configuration settings for Penify CLI. This document explains all available configuration options and how to use them.\par
+{\bkmkstart AAAAAAAACC}
+{\bkmkend AAAAAAAACC}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Configuration Overview
+\par}
+{\tc\tcl2 \v Configuration Overview}
+Penify CLI stores configuration in a JSON file at {\f2 ~/.penify/config.json} . The configuration includes:\par
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+LLM (Large Language Model) settings for local commit message generation\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+JIRA integration settings for enhanced commit messages\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API tokens and other credentials\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACD}
+{\bkmkend AAAAAAAACD}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Basic Usage
+\par}
+{\tc\tcl2 \v Basic Usage}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Configure LLM settings\par
+penify config llm\par
+\par
+# Configure JIRA integration\par
+penify config jira\par
+}
+\par}
+{\bkmkstart AAAAAAAACE}
+{\bkmkend AAAAAAAACE}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+LLM Configuration
+\par}
+{\tc\tcl2 \v LLM Configuration}
+{\bkmkstart AAAAAAAACF}
+{\bkmkend AAAAAAAACF}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Web Interface
+\par}
+{\tc\tcl3 \v Web Interface}
+Running {\f2 penify config llm} opens a web interface in your browser where you can configure:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab {\b Model} : The LLM model to use (e.g., {\f2 gpt-3.5-turbo} )\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab {\b API Base URL} : The endpoint URL for your LLM API (e.g., {\f2 {\f2 https://api.openai.com/v1}} )\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab {\b API Key} : Your authentication key for the LLM API\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACG}
+{\bkmkend AAAAAAAACG}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Supported LLMs
+\par}
+{\tc\tcl3 \v Supported LLMs}
+Penify CLI supports various LLM providers:\par
+{\bkmkstart AAAAAAAACH}
+{\bkmkend AAAAAAAACH}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+OpenAI
+\par}
+{\tc\tcl4 \v OpenAI}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Model: {\f2 gpt-3.5-turbo} or {\f2 gpt-4} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Base: {\f2 {\f2 https://api.openai.com/v1}} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Key: Your OpenAI API key\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACI}
+{\bkmkend AAAAAAAACI}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Anthropic
+\par}
+{\tc\tcl4 \v Anthropic}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Model: {\f2 claude-instant-1} or {\f2 claude-2} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Base: {\f2 {\f2 https://api.anthropic.com/v1}} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Key: Your Anthropic API key\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACJ}
+{\bkmkend AAAAAAAACJ}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Ollama (Local)
+\par}
+{\tc\tcl4 \v Ollama (Local)}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Model: {\f2 llama2} or any model you have installed\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Base: {\f2 {\f2 http://localhost:11434}} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Key: (leave blank)\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACK}
+{\bkmkend AAAAAAAACK}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Azure OpenAI
+\par}
+{\tc\tcl4 \v Azure OpenAI}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Model: Your deployed model name\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Base: Your Azure endpoint\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Key: Your Azure API key\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAACL}
+{\bkmkend AAAAAAAACL}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Configuration File Structure
+\par}
+{\tc\tcl3 \v Configuration File Structure}
+After configuration, your {\f2 ~/.penify/config.json} will contain:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \{\par
+ "llm": \{\par
+ "model": "gpt-3.5-turbo",\par
+ "api_base": "https://api.openai.com/v1",\par
+ "api_key": "sk-..."\par
+ \}\par
+\}\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAACM}
+{\bkmkend AAAAAAAACM}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+JIRA Configuration
+\par}
+{\tc\tcl2 \v JIRA Configuration}
+{\bkmkstart AAAAAAAACN}
+{\bkmkend AAAAAAAACN}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Web Interface
+\par}
+{\tc\tcl3 \v Web Interface}
+Running {\f2 penify config jira} opens a web interface where you can configure:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab {\b JIRA URL} : Your JIRA instance URL (e.g., {\f2 {\f2 https://yourcompany.atlassian.net}} )\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab {\b Username} : Your JIRA username (typically your email)\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab {\b API Token} : Your JIRA API token\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACO}
+{\bkmkend AAAAAAAACO}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Creating a JIRA API Token
+\par}
+{\tc\tcl3 \v Creating a JIRA API Token}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Log in to {\f2 https://id.atlassian.com/manage-profile/security/api-tokens}\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Click "Create API token"\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Give it a name (e.g., "Penify CLI")\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+4.\tab Copy the generated token and paste it into the configuration\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACP}
+{\bkmkend AAAAAAAACP}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Configuration File Structure
+\par}
+{\tc\tcl3 \v Configuration File Structure}
+After configuration, your {\f2 ~/.penify/config.json} will contain:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \{\par
+ "jira": \{\par
+ "url": "https://yourcompany.atlassian.net",\par
+ "username": "your.email@example.com",\par
+ "api_token": "your-jira-api-token"\par
+ \}\par
+\}\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAACQ}
+{\bkmkend AAAAAAAACQ}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Configuration Locations
+\par}
+{\tc\tcl2 \v Configuration Locations}
+Penify CLI looks for configuration in multiple locations:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Project-specific: {\f2 .penify/config.json} in the Git repository root\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab User-specific: {\f2 ~/.penify/config.json} in your home directory\par}
+\par
+The project-specific configuration takes precedence if both exist.\par}
+{\bkmkstart AAAAAAAACR}
+{\bkmkend AAAAAAAACR}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Environment Variables
+\par}
+{\tc\tcl2 \v Environment Variables}
+You can override configuration settings using environment variables:\par
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_API_TOKEN} : Override the stored API token\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_LLM_MODEL} : Override the configured LLM model\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_LLM_API_BASE} : Override the configured LLM API base URL\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_LLM_API_KEY} : Override the configured LLM API key\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_JIRA_URL} : Override the configured JIRA URL\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_JIRA_USER} : Override the configured JIRA username\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 PENIFY_JIRA_TOKEN} : Override the configured JIRA API token\par}
+\par
+Example: {
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid export PENIFY_LLM_MODEL="gpt-4"\par
+penify commit\par
+}
+\par}
+{\bkmkstart AAAAAAAACS}
+{\bkmkend AAAAAAAACS}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Command-Line Configuration
+\par}
+{\tc\tcl2 \v Command-Line Configuration}
+For advanced users or scripting, you can directly edit the configuration file:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # View current configuration\par
+cat ~/.penify/config.json\par
+\par
+# Edit configuration with your preferred editor\par
+nano ~/.penify/config.json\par
+}
+\par}
+{\bkmkstart AAAAAAAACT}
+{\bkmkend AAAAAAAACT}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Sharing Configuration
+\par}
+{\tc\tcl2 \v Sharing Configuration}
+You can share configuration between machines by copying the {\f2 .penify/config.json} file. However, be cautious with API keys and credentials.\par
+For team settings, consider:{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Using a project-specific {\f2 .penify/config.json} with shared settings\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Excluding API keys from shared configuration\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Using environment variables for sensitive credentials\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACU}
+{\bkmkend AAAAAAAACU}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Troubleshooting
+\par}
+{\tc\tcl2 \v Troubleshooting}
+{\bkmkstart AAAAAAAACV}
+{\bkmkend AAAAAAAACV}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Common Issues
+\par}
+{\tc\tcl3 \v Common Issues}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab **"Error reading configuration file"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check if the file exists: {\f2 ls -la ~/.penify} \par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure it contains valid JSON: {\f2 cat ~/.penify/config.json} \par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab **"Failed to connect to LLM API"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Verify API base URL and API key\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check network connectivity to the API endpoint\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure your account has access to the specified model\par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab **"Failed to connect to JIRA"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check JIRA URL format (should include {\f2 {\f2 https://}} )\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Verify username and API token\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure your JIRA account has API access permissions \par}
+}
+\par
+\par}
+\par}
+}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Penify CLI - Detailed Usage Guide{\tc \v Penify CLI - Detailed Usage Guide}\par \pard\plain
+{\bkmkstart AAAAAAAAPD}
+{\bkmkend AAAAAAAAPD}
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+This document provides in-depth information about all features and capabilities of the Penify CLI tool.\par
+{\bkmkstart AAAAAAAACW}
+{\bkmkend AAAAAAAACW}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Table of Contents
+\par}
+{\tc\tcl2 \v Table of Contents}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Penify CLI - Detailed Usage Guide{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Table of Contents\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Authentication{
+\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Login Process\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+API Token Storage\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Token Precedence\par}
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Command Overview\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Commit Message Generation\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Code Documentation Generation{
+\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Use Cases\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Authentication Requirement\par}
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Configuration Settings\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Git Hooks{
+\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Post-Commit Hook\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Custom Hook Location\par}
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Advanced Use Cases{
+\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+CI/CD Integration\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Remote Repository Documentation\par}
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Troubleshooting{
+\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Common Issues\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Logs\par
+\pard\plain \s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Support\par}
+}
+}
+\par
+\par}
+{\bkmkstart AAAAAAAACX}
+{\bkmkend AAAAAAAACX}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Authentication
+\par}
+{\tc\tcl2 \v Authentication}
+{\bkmkstart AAAAAAAACY}
+{\bkmkend AAAAAAAACY}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Login Process
+\par}
+{\tc\tcl3 \v Login Process}
+When you run {\f2 penify login} , the tool:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Opens your default web browser\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Redirects you to Penify's login page\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Captures the authentication token after successful login\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+4.\tab Saves the token in {\f2 ~/.penify} file\par}
+\par
+\par}
+{\bkmkstart AAAAAAAACZ}
+{\bkmkend AAAAAAAACZ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+API Token Storage
+\par}
+{\tc\tcl3 \v API Token Storage}
+API tokens are stored in your home directory in the {\f2 .penify} file. This JSON file contains:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \{\par
+ "api_keys": "your-api-token",\par
+ "llm": \{ "model": "...", "api_base": "...", "api_key": "..." \},\par
+ "jira": \{ "url": "...", "username": "...", "api_token": "..." \}\par
+\}\par
+}
+\par}
+{\bkmkstart AAAAAAAADA}
+{\bkmkend AAAAAAAADA}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Token Precedence
+\par}
+{\tc\tcl3 \v Token Precedence}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Environment variable {\f2 PENIFY_API_TOKEN} (highest priority)\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Token in {\f2 ~/.penify} file\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAADB}
+{\bkmkend AAAAAAAADB}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Command Overview
+\par}
+{\tc\tcl2 \v Command Overview}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify\par
+\'E2\'94\'9C\'E2\'94\'80\'E2\'94\'80 commit Generate smart commit messages\par
+\'E2\'94\'9C\'E2\'94\'80\'E2\'94\'80 config Configure local LLM and JIRA\par
+\'E2\'94\'82 \'E2\'94\'9C\'E2\'94\'80\'E2\'94\'80 llm Configure local LLM settings\par
+\'E2\'94\'82 \'E2\'94\'94\'E2\'94\'80\'E2\'94\'80 jira Configure JIRA integration\par
+\'E2\'94\'9C\'E2\'94\'80\'E2\'94\'80 login Log in to Penify account\par
+\'E2\'94\'94\'E2\'94\'80\'E2\'94\'80 docgen Generate code documentation\par
+ \'E2\'94\'9C\'E2\'94\'80\'E2\'94\'80 install-hook Install Git post-commit hook\par
+ \'E2\'94\'94\'E2\'94\'80\'E2\'94\'80 uninstall-hook Remove Git post-commit hook\par
+}
+\par}
+{\bkmkstart AAAAAAAADC}
+{\bkmkend AAAAAAAADC}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Commit Message Generation
+\par}
+{\tc\tcl2 \v Commit Message Generation}
+The {\f2 commit} command analyzes your staged changes and generates meaningful commit messages. It can:\par
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Use a local LLM if configured\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Enhance messages with JIRA issue details\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Provide both title and description\par}
+\par
+For specific options and examples, see {\b docs/commit-commands.md}.\par}
+{\bkmkstart AAAAAAAADD}
+{\bkmkend AAAAAAAADD}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Code Documentation Generation
+\par}
+{\tc\tcl2 \v Code Documentation Generation}
+The {\f2 docgen} command generates documentation for your code:\par
+{\bkmkstart AAAAAAAADE}
+{\bkmkend AAAAAAAADE}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Use Cases
+\par}
+{\tc\tcl3 \v Use Cases}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab {\b Current Git Diff} : Default behavior, documents only changed files\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab {\b Specific File} : Pass a file path with {\f2 -l path/to/file.py} \par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab {\b Entire Folder} : Pass a folder path with {\f2 -l path/to/folder} \par}
+\par
+\par}
+{\bkmkstart AAAAAAAADF}
+{\bkmkend AAAAAAAADF}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Authentication Requirement
+\par}
+{\tc\tcl3 \v Authentication Requirement}
+This feature requires authentication with a Penify account. Run {\f2 penify login} before using documentation features.\par}
+\par}
+{\bkmkstart AAAAAAAADG}
+{\bkmkend AAAAAAAADG}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Configuration Settings
+\par}
+{\tc\tcl2 \v Configuration Settings}
+Configure local settings using the {\f2 config} command:\par
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b LLM Settings} : Configure a local LLM for commit message generation\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b JIRA Settings} : Set up JIRA integration for enhanced commit messages\par}
+\par
+For detailed configuration options, see {\b docs/config-commands.md}.\par}
+{\bkmkstart AAAAAAAADH}
+{\bkmkend AAAAAAAADH}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Git Hooks
+\par}
+{\tc\tcl2 \v Git Hooks}
+Penify can install Git hooks to automate documentation generation:\par
+{\bkmkstart AAAAAAAADI}
+{\bkmkend AAAAAAAADI}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Post-Commit Hook
+\par}
+{\tc\tcl3 \v Post-Commit Hook}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b Install} : {\f2 penify docgen install-hook} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b What it does} : Automatically generates documentation for changed files after each commit\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b Uninstall} : {\f2 penify docgen uninstall-hook} \par}
+\par
+\par}
+{\bkmkstart AAAAAAAADJ}
+{\bkmkend AAAAAAAADJ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Custom Hook Location
+\par}
+{\tc\tcl3 \v Custom Hook Location}
+You can specify a custom location for Git hooks:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen install-hook -l /path/to/git/repo\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAADK}
+{\bkmkend AAAAAAAADK}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Advanced Use Cases
+\par}
+{\tc\tcl2 \v Advanced Use Cases}
+{\bkmkstart AAAAAAAADL}
+{\bkmkend AAAAAAAADL}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+CI/CD Integration
+\par}
+{\tc\tcl3 \v CI/CD Integration}
+For CI/CD pipelines:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Set {\f2 PENIFY_API_TOKEN} as an environment variable\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Run commands without requiring interactive login\par}
+\par
+\par}
+{\bkmkstart AAAAAAAADM}
+{\bkmkend AAAAAAAADM}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Remote Repository Documentation
+\par}
+{\tc\tcl3 \v Remote Repository Documentation}
+Generate documentation for an entire repository:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid git clone https://github.com/user/repo\par
+cd repo\par
+penify docgen -l .\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAADN}
+{\bkmkend AAAAAAAADN}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Troubleshooting
+\par}
+{\tc\tcl2 \v Troubleshooting}
+{\bkmkstart AAAAAAAADO}
+{\bkmkend AAAAAAAADO}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Common Issues
+\par}
+{\tc\tcl3 \v Common Issues}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab {\b API Key Errors} : Ensure you've run {\f2 penify login} or set {\f2 PENIFY_API_TOKEN} \par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab {\b LLM Configuration} : Check your LLM settings with {\f2 cat ~/.penify} \par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab {\b JIRA Integration} : Verify JIRA credentials in your configuration\par}
+\par
+\par}
+{\bkmkstart AAAAAAAADP}
+{\bkmkend AAAAAAAADP}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Logs
+\par}
+{\tc\tcl3 \v Logs}
+For more detailed logs, you can set the environment variable:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid export PENIFY_DEBUG=1\par
+}
+\par}
+{\bkmkstart AAAAAAAADQ}
+{\bkmkend AAAAAAAADQ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Support
+\par}
+{\tc\tcl3 \v Support}
+For additional help, visit {\f2 https://docs.penify.dev/} or contact {\f2 support@penify.dev} \par}
+\par}
+}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Penify CLI - Documentation Generation Commands{\tc \v Penify CLI - Documentation Generation Commands}\par \pard\plain
+{\bkmkstart AAAAAAAAPE}
+{\bkmkend AAAAAAAAPE}
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+This document provides a detailed guide to all permutations and combinations of the {\f2 docgen} command, including extensive information about Git hook commands for automating documentation generation.\par
+{\bkmkstart AAAAAAAADR}
+{\bkmkend AAAAAAAADR}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Table of Contents
+\par}
+{\tc\tcl2 \v Table of Contents}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Basic Usage\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Command Options\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Option Combinations\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Git Hook Commands{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Hook Installation\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Hook Customization\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Hook Uninstallation\par}
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Advanced Use Cases\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Troubleshooting\par}
+\par
+\par}
+{\bkmkstart AAAAAAAADS}
+{\bkmkend AAAAAAAADS}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Basic Usage
+\par}
+{\tc\tcl2 \v Basic Usage}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen\par
+}
+\par
+By default, this command:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Analyzes the current Git diff (changes since last commit)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Generates documentation for changed files only\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Requires authentication via {\f2 penify login} \par}
+\par
+\par}
+{\bkmkstart AAAAAAAADT}
+{\bkmkend AAAAAAAADT}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Command Options
+\par}
+{\tc\tcl2 \v Command Options}
+{\bkmkstart AAAAAAAADU}
+{\bkmkend AAAAAAAADU}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+-l, --location
+\par}
+{\tc\tcl3 \v -l, --location}
+Specify a target for documentation generation:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Generate documentation for a specific file\par
+penify docgen -l path/to/file.py\par
+\par
+# Generate documentation for a specific folder\par
+penify docgen -l path/to/folder\par
+}
+\par
+Without this flag, Penify analyzes only Git-tracked modified files.\par}
+{\bkmkstart AAAAAAAADV}
+{\bkmkend AAAAAAAADV}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Subcommands
+\par}
+{\tc\tcl3 \v Subcommands}
+{\bkmkstart AAAAAAAADW}
+{\bkmkend AAAAAAAADW}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+install-hook
+\par}
+{\tc\tcl4 \v install-hook}
+Install a Git post-commit hook to automatically generate documentation:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen install-hook\par
+}
+\par}
+{\bkmkstart AAAAAAAADX}
+{\bkmkend AAAAAAAADX}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+uninstall-hook
+\par}
+{\tc\tcl4 \v uninstall-hook}
+Remove the Git post-commit hook:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen uninstall-hook\par
+}
+\par}
+\par}
+\par}
+{\bkmkstart AAAAAAAADY}
+{\bkmkend AAAAAAAADY}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Option Combinations
+\par}
+{\tc\tcl2 \v Option Combinations}
+{\bkmkstart AAAAAAAADZ}
+{\bkmkend AAAAAAAADZ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate Documentation for Current Git Diff
+\par}
+{\tc\tcl3 \v Generate Documentation for Current Git Diff}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Basic usage - current Git diff\par
+penify docgen\par
+}
+\par}
+{\bkmkstart AAAAAAAAEA}
+{\bkmkend AAAAAAAAEA}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate Documentation for a Specific File
+\par}
+{\tc\tcl3 \v Generate Documentation for a Specific File}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Single file documentation\par
+penify docgen -l src/main.py\par
+}
+\par}
+{\bkmkstart AAAAAAAAEB}
+{\bkmkend AAAAAAAAEB}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Generate Documentation for a Folder
+\par}
+{\tc\tcl3 \v Generate Documentation for a Folder}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Folder documentation\par
+penify docgen -l src/models/\par
+}
+\par}
+{\bkmkstart AAAAAAAAEC}
+{\bkmkend AAAAAAAAEC}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Install Hook in Current Repository
+\par}
+{\tc\tcl3 \v Install Hook in Current Repository}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Install hook in current Git repository\par
+penify docgen install-hook\par
+}
+\par}
+{\bkmkstart AAAAAAAAED}
+{\bkmkend AAAAAAAAED}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Install Hook in Specific Repository
+\par}
+{\tc\tcl3 \v Install Hook in Specific Repository}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Install hook in a specific Git repository\par
+penify docgen install-hook -l /path/to/repo\par
+}
+\par}
+{\bkmkstart AAAAAAAAEE}
+{\bkmkend AAAAAAAAEE}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Uninstall Hook from Current Repository
+\par}
+{\tc\tcl3 \v Uninstall Hook from Current Repository}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Uninstall hook from current Git repository\par
+penify docgen uninstall-hook\par
+}
+\par}
+{\bkmkstart AAAAAAAAEF}
+{\bkmkend AAAAAAAAEF}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Uninstall Hook from Specific Repository
+\par}
+{\tc\tcl3 \v Uninstall Hook from Specific Repository}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Uninstall hook from a specific Git repository\par
+penify docgen uninstall-hook -l /path/to/repo\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAAEG}
+{\bkmkend AAAAAAAAEG}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Git Hook Commands
+\par}
+{\tc\tcl2 \v Git Hook Commands}
+Penify provides Git hook commands to automate documentation generation as part of your Git workflow.\par
+{\bkmkstart AAAAAAAAEH}
+{\bkmkend AAAAAAAAEH}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Hook Installation
+\par}
+{\tc\tcl3 \v Hook Installation}
+{\bkmkstart AAAAAAAAEI}
+{\bkmkend AAAAAAAAEI}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+How Hooks Work
+\par}
+{\tc\tcl4 \v How Hooks Work}
+When you install a Git hook with {\f2 penify docgen install-hook} , Penify:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Creates a post-commit hook script in the {\f2 .git/hooks} directory\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Makes the script executable\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Configures the hook to run {\f2 penify docgen} after each commit\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAEJ}
+{\bkmkend AAAAAAAAEJ}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Hook Script Content
+\par}
+{\tc\tcl4 \v Hook Script Content}
+The generated post-commit hook contains:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid #!/bin/sh\par
+# This is a post-commit hook generated by penify.\par
+# Automatically generates documentation for changed files after each commit.\par
+\par
+penify docgen -gf /path/to/git/repository -t your_api_token\par
+}
+\par}
+{\bkmkstart AAAAAAAAEK}
+{\bkmkend AAAAAAAAEK}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Installation Location
+\par}
+{\tc\tcl4 \v Installation Location}
+By default, hooks are installed in the current Git repository. You can specify a different location:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen install-hook -l /path/to/repo\par
+}
+\par}
+{\bkmkstart AAAAAAAAEL}
+{\bkmkend AAAAAAAAEL}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Installation Requirements
+\par}
+{\tc\tcl4 \v Installation Requirements}
+To install hooks, you need:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+A valid Penify API token (login first with {\f2 penify login} )\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Write permissions to the {\f2 .git/hooks} directory\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAEM}
+{\bkmkend AAAAAAAAEM}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Verifying Installation
+\par}
+{\tc\tcl4 \v Verifying Installation}
+After installation, you can verify that the hook is installed:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid cat .git/hooks/post-commit\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAAEN}
+{\bkmkend AAAAAAAAEN}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Hook Customization
+\par}
+{\tc\tcl3 \v Hook Customization}
+You can customize the post-commit hook after installation:\par
+{\bkmkstart AAAAAAAAEO}
+{\bkmkend AAAAAAAAEO}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Modifying Hook Behavior
+\par}
+{\tc\tcl4 \v Modifying Hook Behavior}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Edit the {\f2 .git/hooks/post-commit} file\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Add additional options to the {\f2 penify docgen} command\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Add other commands to run after commit\par}
+\par
+Example of a customized hook:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid #!/bin/sh\par
+# This is a post-commit hook generated by penify.\par
+# Automatically generates documentation for changed files after each commit.\par
+\par
+# Generate documentation\par
+penify docgen -gf /path/to/git/repository -t your_api_token\par
+\par
+# Additional custom commands\par
+echo "Documentation generation complete!"\par
+}
+\par}
+{\bkmkstart AAAAAAAAEP}
+{\bkmkend AAAAAAAAEP}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Advanced Hook Scenarios
+\par}
+{\tc\tcl4 \v Advanced Hook Scenarios}
+{\b Conditional Documentation Generation} :\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid #!/bin/sh\par
+# Only generate documentation for commits to the main branch\par
+BRANCH=$(git rev-parse --abbrev-ref HEAD)\par
+if [ "$BRANCH" = "main" ]; then\par
+ penify docgen -gf /path/to/git/repository -t your_api_token\par
+fi\par
+}
+\par
+{\b Documenting Specific Files/Folders} :\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid #!/bin/sh\par
+# Only document Python files in the src directory\par
+penify docgen -l src/ -gf /path/to/git/repository -t your_api_token\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAAEQ}
+{\bkmkend AAAAAAAAEQ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Hook Uninstallation
+\par}
+{\tc\tcl3 \v Hook Uninstallation}
+{\bkmkstart AAAAAAAAER}
+{\bkmkend AAAAAAAAER}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Standard Uninstallation
+\par}
+{\tc\tcl4 \v Standard Uninstallation}
+To remove a hook from the current repository:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen uninstall-hook\par
+}
+\par}
+{\bkmkstart AAAAAAAAES}
+{\bkmkend AAAAAAAAES}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Specific Repository Uninstallation
+\par}
+{\tc\tcl4 \v Specific Repository Uninstallation}
+To remove a hook from a specific repository:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen uninstall-hook -l /path/to/repo\par
+}
+\par}
+{\bkmkstart AAAAAAAAET}
+{\bkmkend AAAAAAAAET}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Manual Hook Removal
+\par}
+{\tc\tcl4 \v Manual Hook Removal}
+If needed, you can manually remove the hook:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid rm .git/hooks/post-commit\par
+}
+\par}
+{\bkmkstart AAAAAAAAEU}
+{\bkmkend AAAAAAAAEU}
+{{\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid
+Verifying Uninstallation
+\par}
+{\tc\tcl4 \v Verifying Uninstallation}
+Check that the hook was successfully removed:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid ls -la .git/hooks/post-commit # Should return "No such file or directory"\par
+}
+\par}
+\par}
+\par}
+{\bkmkstart AAAAAAAAEV}
+{\bkmkend AAAAAAAAEV}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Advanced Use Cases
+\par}
+{\tc\tcl2 \v Advanced Use Cases}
+{\bkmkstart AAAAAAAAEW}
+{\bkmkend AAAAAAAAEW}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Continuous Integration
+\par}
+{\tc\tcl3 \v Continuous Integration}
+Run documentation generation in CI pipelines:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # In your CI script\par
+export PENIFY_API_TOKEN=your_api_token\par
+penify docgen -l src/\par
+}
+\par}
+{\bkmkstart AAAAAAAAEX}
+{\bkmkend AAAAAAAAEX}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Batch Documentation
+\par}
+{\tc\tcl3 \v Batch Documentation}
+Generate documentation for multiple repositories:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Bash script for batch documentation\par
+for repo in repo1 repo2 repo3; do\par
+ cd /path/to/$repo\par
+ penify docgen -l .\par
+done\par
+}
+\par}
+{\bkmkstart AAAAAAAAEY}
+{\bkmkend AAAAAAAAEY}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Custom Git Hook Integration
+\par}
+{\tc\tcl3 \v Custom Git Hook Integration}
+Integrate with other Git hooks:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # In .git/hooks/pre-push\par
+penify docgen -l src/\par
+}
+\par}
+{\bkmkstart AAAAAAAAEZ}
+{\bkmkend AAAAAAAAEZ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Documenting Release Tags
+\par}
+{\tc\tcl3 \v Documenting Release Tags}
+Generate documentation when creating a release tag:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Document everything when creating a tag\par
+git tag -a v1.0.0\par
+penify docgen -l . # Document entire codebase\par
+git commit --amend -m "Release v1.0.0 with updated documentation"\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAAFA}
+{\bkmkend AAAAAAAAFA}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Troubleshooting
+\par}
+{\tc\tcl2 \v Troubleshooting}
+{\bkmkstart AAAAAAAAFB}
+{\bkmkend AAAAAAAAFB}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Common Issues
+\par}
+{\tc\tcl3 \v Common Issues}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab **"Authentication required"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Run {\f2 penify login} before using documentation features\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check your API token with {\f2 cat ~/.penify} \par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab **"Permission denied when installing hook"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check Git repository permissions\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Try running with sudo (if appropriate for your environment)\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure the {\f2 .git/hooks} directory exists\par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab **"Hook installed but not running"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check if the hook is executable: {\f2 ls -la .git/hooks/post-commit} \par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Make it executable if needed: {\f2 chmod +x .git/hooks/post-commit} \par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check for syntax errors in the hook script\par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+4.\tab **"File or directory not found"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Verify the path provided to the {\f2 -l} option\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Ensure you're running the command from the correct directory\par}
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+5.\tab **"Hook uninstallation failed"**{
+\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Check permissions on the {\f2 .git/hooks} directory\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Try manual removal: {\f2 rm .git/hooks/post-commit} \par}
+}
+\par
+\par}
+{\bkmkstart AAAAAAAAFC}
+{\bkmkend AAAAAAAAFC}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Debugging
+\par}
+{\tc\tcl3 \v Debugging}
+For detailed output when running documentation commands:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid export PENIFY_DEBUG=1\par
+penify docgen -l src/\par
+}
+\par}
+{\bkmkstart AAAAAAAAFD}
+{\bkmkend AAAAAAAAFD}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Getting Help
+\par}
+{\tc\tcl3 \v Getting Help}
+For command-specific help:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen --help\par
+penify docgen install-hook --help\par
+penify docgen uninstall-hook --help\par
+}
+ \par}
+\par}
+}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Penify CLI Example Workflows{\tc \v Penify CLI Example Workflows}\par \pard\plain
+{\bkmkstart AAAAAAAAPF}
+{\bkmkend AAAAAAAAPF}
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+This document demonstrates how to use Penify CLI in real-world development workflows to improve your productivity.\par
+{\bkmkstart AAAAAAAAFE}
+{\bkmkend AAAAAAAAFE}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Workflow 1: Efficient Git Commits with AI
+\par}
+{\tc\tcl2 \v Workflow 1: Efficient Git Commits with AI}
+{\bkmkstart AAAAAAAAFF}
+{\bkmkend AAAAAAAAFF}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Setup
+\par}
+{\tc\tcl3 \v Setup}
+First, configure your local LLM for offline operation:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify config llm\par
+}
+\par
+Configure your JIRA integration for enhanced commit messages:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify config jira\par
+}
+\par}
+{\bkmkstart AAAAAAAAFG}
+{\bkmkend AAAAAAAAFG}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Daily Workflow
+\par}
+{\tc\tcl3 \v Daily Workflow}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Make your code changes as usual\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab When ready to commit, use Penify to generate a smart commit message:\par}
+\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit\par
+}
+\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Review and confirm the generated commit message\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Git commit and push as usual\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAFH}
+{\bkmkend AAAAAAAAFH}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Benefits
+\par}
+{\tc\tcl3 \v Benefits}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Consistent and descriptive commit messages\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Automatic inclusion of relevant JIRA ticket information\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Time saved from writing detailed commit messages\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAAFI}
+{\bkmkend AAAAAAAAFI}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Workflow 2: Documentation Generation Pipeline
+\par}
+{\tc\tcl2 \v Workflow 2: Documentation Generation Pipeline}
+{\bkmkstart AAAAAAAAFJ}
+{\bkmkend AAAAAAAAFJ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Setup
+\par}
+{\tc\tcl3 \v Setup}
+Login to Penify to access advanced documentation features:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify login\par
+}
+\par
+Install the Git hook for automatic documentation generation:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen install-hook\par
+}
+\par}
+{\bkmkstart AAAAAAAAFK}
+{\bkmkend AAAAAAAAFK}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Daily Workflow
+\par}
+{\tc\tcl3 \v Daily Workflow}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Make your code changes as usual\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Commit your changes\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+3.\tab Documentation is automatically generated for changed files\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+4.\tab Review the generated documentation\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAFL}
+{\bkmkend AAAAAAAAFL}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Manual Documentation
+\par}
+{\tc\tcl3 \v Manual Documentation}
+For specific files or folders:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen -l src/components/authentication\par
+}
+\par}
+{\bkmkstart AAAAAAAAFM}
+{\bkmkend AAAAAAAAFM}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Benefits
+\par}
+{\tc\tcl3 \v Benefits}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Always up-to-date documentation\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Consistent documentation style\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Time saved from writing detailed documentation\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAAFN}
+{\bkmkend AAAAAAAAFN}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Workflow 3: Code Review Enhancement
+\par}
+{\tc\tcl2 \v Workflow 3: Code Review Enhancement}
+{\bkmkstart AAAAAAAAFO}
+{\bkmkend AAAAAAAAFO}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Setup
+\par}
+{\tc\tcl3 \v Setup}
+Ensure you're logged into Penify:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify login\par
+}
+\par}
+{\bkmkstart AAAAAAAAFP}
+{\bkmkend AAAAAAAAFP}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Workflow
+\par}
+{\tc\tcl3 \v Workflow}
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Before submitting a PR, generate documentation for changed files:\par}
+\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen\par
+}
+\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Include the generated documentation in your PR\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Reviewers can better understand your changes with the AI-generated explanations\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAFQ}
+{\bkmkend AAAAAAAAFQ}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Benefits
+\par}
+{\tc\tcl3 \v Benefits}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Improved PR quality\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Faster code reviews\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Better team understanding of code changes\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAAFR}
+{\bkmkend AAAAAAAAFR}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Workflow 4: Onboarding New Team Members
+\par}
+{\tc\tcl2 \v Workflow 4: Onboarding New Team Members}
+{\bkmkstart AAAAAAAAFS}
+{\bkmkend AAAAAAAAFS}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+For Team Leads
+\par}
+{\tc\tcl3 \v For Team Leads}
+Generate comprehensive documentation for the entire codebase:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen -l .\par
+}
+\par}
+{\bkmkstart AAAAAAAAFT}
+{\bkmkend AAAAAAAAFT}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+For New Team Members
+\par}
+{\tc\tcl3 \v For New Team Members}
+Generate focused documentation for components you're working on:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify docgen -l src/components/my-feature\par
+}
+\par}
+{\bkmkstart AAAAAAAAFU}
+{\bkmkend AAAAAAAAFU}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Benefits
+\par}
+{\tc\tcl3 \v Benefits}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Faster onboarding\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Better understanding of code structure\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Reduced questions to senior team members\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAAFV}
+{\bkmkend AAAAAAAAFV}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Workflow 5: Legacy Code Understanding
+\par}
+{\tc\tcl2 \v Workflow 5: Legacy Code Understanding}
+When working with unfamiliar legacy code:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Document a specific complex file\par
+penify docgen -l src/legacy/complex_module.py\par
+\par
+# Document an entire legacy component\par
+penify docgen -l src/legacy/old_component\par
+}
+\par
+{\bkmkstart AAAAAAAAFW}
+{\bkmkend AAAAAAAAFW}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Benefits
+\par}
+{\tc\tcl3 \v Benefits}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Quickly understand complex legacy systems\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Reduce time spent deciphering undocumented code\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Make safer changes to legacy systems \par}
+\par
+\par}
+\par}
+}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Penify CLI Tool{\tc \v Penify CLI Tool}\par \pard\plain
+{\bkmkstart AAAAAAAAPG}
+{\bkmkend AAAAAAAAPG}
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+ \par
+A CLI tool to generate smart commit messages, code documentation, and more.\par
+{\bkmkstart AAAAAAAAFX}
+{\bkmkend AAAAAAAAFX}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Features
+\par}
+{\tc\tcl2 \v Features}
+{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Automatically generate documentation for your code\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Support for multiple programming languages\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Git hook integration for automatic documentation on commits\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Folder and file analysis\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAFY}
+{\bkmkend AAAAAAAAFY}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Installation
+\par}
+{\tc\tcl2 \v Installation}
+Install from PyPI:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid pip install penify\par
+}
+\par}
+{\bkmkstart AAAAAAAAFZ}
+{\bkmkend AAAAAAAAFZ}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Usage
+\par}
+{\tc\tcl2 \v Usage}
+Penify CLI provides several subcommands for different functionalities, organized into basic commands (no login required) and advanced commands (login required).\par}
+{\bkmkstart AAAAAAAAGA}
+{\bkmkend AAAAAAAAGA}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Basic Commands (No login required)
+\par}
+{\tc\tcl2 \v Basic Commands (No login required)}
+{\bkmkstart AAAAAAAAGB}
+{\bkmkend AAAAAAAAGB}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Commit
+\par}
+{\tc\tcl3 \v Commit}
+Generate smart commit messages using local LLM:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify commit [-m "Optional message"] [-e] [-d]\par
+}
+\par
+Options:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 -m, --message} : Optional custom commit message\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 -e, --terminal} : Open editor to modify commit message before committing\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 -d, --description} : Generate commit message with both title and description (without this flag, only title is generated)\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAGC}
+{\bkmkend AAAAAAAAGC}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Config
+\par}
+{\tc\tcl3 \v Config}
+Configure local LLM and JIRA settings:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Configure LLM settings\par
+penify config llm --model MODEL_NAME [--api-base API_URL] [--api-key API_KEY]\par
+\par
+# Configure LLM settings through web interface\par
+penify config llm-web\par
+\par
+# Configure JIRA settings\par
+penify config jira --url JIRA_URL --username USERNAME --api-token TOKEN [--verify]\par
+\par
+# Configure JIRA settings through web interface\par
+penify config jira-web\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAAGD}
+{\bkmkend AAAAAAAAGD}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Advanced Commands (Login required)
+\par}
+{\tc\tcl2 \v Advanced Commands (Login required)}
+{\bkmkstart AAAAAAAAGE}
+{\bkmkend AAAAAAAAGE}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Login
+\par}
+{\tc\tcl3 \v Login}
+To log in and obtain an API token:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify login\par
+}
+\par
+This command will open a browser window for authentication. After successful login, the API key will be saved locally for future use.\par}
+{\bkmkstart AAAAAAAAGF}
+{\bkmkend AAAAAAAAGF}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Documentation Generation
+\par}
+{\tc\tcl3 \v Documentation Generation}
+Generate documentation for Git diff, files or folders:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Generate documentation for latest Git commit diff\par
+penify docgen\par
+\par
+# Generate documentation for specific file or folder\par
+penify docgen -l /path/to/file/or/folder\par
+}
+\par
+Options:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 -l, --location} : Path to specific file or folder for documentation generation (defaults to current directory)\par}
+\par
+\par}
+{\bkmkstart AAAAAAAAGG}
+{\bkmkend AAAAAAAAGG}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Git Hook Management
+\par}
+{\tc\tcl3 \v Git Hook Management}
+Install or uninstall Git post-commit hooks:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid # Install Git hook\par
+penify docgen install-hook [-l /path/to/repo]\par
+\par
+# Uninstall Git hook\par
+penify docgen uninstall-hook [-l /path/to/repo]\par
+}
+\par
+Options:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\f2 -l, --location} : Path to the Git repository (defaults to current directory)\par}
+\par
+\par}
+\par}
+{\bkmkstart AAAAAAAAGH}
+{\bkmkend AAAAAAAAGH}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Authentication
+\par}
+{\tc\tcl2 \v Authentication}
+Penify CLI uses an API token for authentication with advanced features.\par
+If no token is available and you try to access an advanced feature, you'll be prompted to log in.\par}
+{\bkmkstart AAAAAAAAGI}
+{\bkmkend AAAAAAAAGI}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Local LLM Configuration
+\par}
+{\tc\tcl2 \v Local LLM Configuration}
+For commit message generation, Penify can use a local LLM. Configure it using:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify config llm --model MODEL_NAME --api-base API_URL --api-key API_KEY\par
+}
+\par
+Common configurations:{
+\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+OpenAI: {\f2 --model gpt-3.5-turbo --api-base {\f2 https://api.openai.com/v1} --api-key YOUR_KEY} \par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Anthropic: {\f2 --model claude-2 --api-base {\f2 https://api.anthropic.com} --api-key YOUR_KEY} \par}
+\par
+\par}
+{\bkmkstart AAAAAAAAGJ}
+{\bkmkend AAAAAAAAGJ}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+JIRA Integration
+\par}
+{\tc\tcl2 \v JIRA Integration}
+Configure JIRA integration to enhance commit messages with issue details:\par
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid penify config jira --url https://your-domain.atlassian.net --username your-email@example.com --api-token YOUR_API_TOKEN\par
+}
+\par}
+{\bkmkstart AAAAAAAAGK}
+{\bkmkend AAAAAAAAGK}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Development
+\par}
+{\tc\tcl2 \v Development}
+To set up the development environment:\par
+{
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+1.\tab Clone the repository: {
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid git clone https://github.com/SingularityX-ai/penify-cli.git\par
+}
+\par
+\pard\plain \s140\fi-360\li360\widctlpar\fs20\cgrid
+2.\tab Install the package in editable mode: {
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid pip install -e .\par
+}
+\par}
+\par
+{\bkmkstart AAAAAAAAGL}
+{\bkmkend AAAAAAAAGL}
+{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Running Tests
+\par}
+{\tc\tcl3 \v Running Tests}
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid pytest\par
+}
+\par}
+\par}
+{\bkmkstart AAAAAAAAGM}
+{\bkmkend AAAAAAAAGM}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+License
+\par}
+{\tc\tcl2 \v License}
+This project is licensed under the MIT License.\par}
+{\bkmkstart AAAAAAAAGN}
+{\bkmkend AAAAAAAAGN}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Author
+\par}
+{\tc\tcl2 \v Author}
+Suman Saurabh ({\f2 ss.sumansaurabh92@gmail.com})\par}
+{\bkmkstart AAAAAAAAGO}
+{\bkmkend AAAAAAAAGO}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Contributing
+\par}
+{\tc\tcl2 \v Contributing}
+Contributions are welcome! Please feel free to submit a Pull Request.\par}
+{\bkmkstart AAAAAAAAGP}
+{\bkmkend AAAAAAAAGP}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Issues
+\par}
+{\tc\tcl2 \v Issues}
+If you encounter any problems or have suggestions, please file an issue on the {\f2 GitHub repository}.\par}
+{\bkmkstart AAAAAAAAGQ}
+{\bkmkend AAAAAAAAGQ}
+{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Support
+\par}
+{\tc\tcl2 \v Support}
+For automated API Documentation, Architecture Documentation, Code Documentation, Pull Request Documentation, or if you need a demo, please join our {\f2 Discord support channel}. \par}
+}}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Namespace Index\par \pard\plain
+{\tc \v Namespace Index}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Namespace List\par \pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here is a list of all namespaces with brief descriptions:}
+{
+\par
+\pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid
+{\b {\b penify_hook} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.api_client} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.base_analyzer} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHE \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commands.auth_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commands.commit_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHW \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commands.config_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIA \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commands.doc_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIN \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commands.hook_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commit_analyzer} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIX \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.config_command} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJE \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.constants} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJH \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.file_analyzer} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJK \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.folder_analyzer} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJR \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.git_analyzer} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJW \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.jira_client} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKD \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.llm_client} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKV \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.login_command} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAALC \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.main} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAALF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.ui_utils} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAALH \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.utils} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMI \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b setup} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMO \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANC \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.conftest} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAND \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_commit_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANE \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_config_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_doc_commands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOG \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_web_config} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+\par}
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Hierarchical Index\par \pard\plain
+{\tc \v Hierarchical Index}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Class Hierarchy\par \pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid This inheritance list is sorted roughly, but not completely, alphabetically:}
+{
+\par
+\pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid
+penify_hook.api_client.APIClient\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGU \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+penify_hook.base_analyzer.BaseAnalyzer\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHF \\*MERGEFORMAT}{\fldrslt pagenum}}
+{
+\par
+\pard\plain \s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid
+penify_hook.commit_analyzer.CommitDocGenHook\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIY \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+penify_hook.file_analyzer.FileAnalyzerGenHook\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJM \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+penify_hook.folder_analyzer.FolderAnalyzerGenHook\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+penify_hook.git_analyzer.GitDocGenHook\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJY \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+}\par
+Exception\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGR \\*MERGEFORMAT}{\fldrslt pagenum}}
+{
+\par
+\pard\plain \s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid
+penify_hook.utils.GitRepoNotFoundError\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMN \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+}\par
+penify_hook.jira_client.JiraClient\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+penify_hook.llm_client.LLMClient\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKW \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+tests.test_commit_commands.TestCommitCommands\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+tests.test_config_commands.TestConfigCommands\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+tests.test_web_config.TestWebConfig\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+}
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Class Index\par \pard\plain
+{\tc \v Class Index}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Class List\par \pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here are the classes, structs, unions and interfaces with brief descriptions:}
+{
+\par
+\pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid
+{\b {\b penify_hook.api_client.APIClient} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGU \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.base_analyzer.BaseAnalyzer} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.commit_analyzer.CommitDocGenHook} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIY \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b Exception} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGR \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.file_analyzer.FileAnalyzerGenHook} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJM \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.folder_analyzer.FolderAnalyzerGenHook} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.git_analyzer.GitDocGenHook} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJY \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.utils.GitRepoNotFoundError} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMN \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.jira_client.JiraClient} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b penify_hook.llm_client.LLMClient} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKW \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_commit_commands.TestCommitCommands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_config_commands.TestConfigCommands} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b {\b tests.test_web_config.TestWebConfig} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+\par}
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+File Index\par \pard\plain
+{\tc \v File Index}
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+File List\par \pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here is a list of all files with brief descriptions:}
+{
+\par
+\pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/{\b setup.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABD \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b __init__.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAI \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b api_client.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAG \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b base_analyzer.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAH \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b commit_analyzer.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAQ \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b config_command.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAR \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b constants.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAS \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b file_analyzer.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAT \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b folder_analyzer.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAU \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b git_analyzer.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAV \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b jira_client.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAW \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b llm_client.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAX \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b login_command.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAY \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b main.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAZ \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b ui_utils.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABA \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b utils.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABB \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/{\b __init__.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAJ \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/{\b auth_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAL \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/{\b commit_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAM \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/{\b config_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAN \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/{\b doc_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAO \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/{\b hook_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAP \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b __init__.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAK \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b conftest.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABE \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_commit_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABF \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_config_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABG \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_doc_commands.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABH \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+{\b /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_web_config.py} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABI \\*MERGEFORMAT}{\fldrslt pagenum}}
+\par
+\par}
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Namespace Documentation\par \pard\plain
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook}
+{\xe \v penify_hook}
+{\bkmkstart AAAAAAAAGS}
+{\bkmkend AAAAAAAAGS}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b api_client}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b base_analyzer}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b commit_analyzer}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b config_command}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b constants}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b file_analyzer}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b folder_analyzer}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b git_analyzer}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b jira_client}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b llm_client}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b login_command}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b main}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b ui_utils}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b utils}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.api_client Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.api_client}
+{\xe \v penify_hook.api_client}
+{\bkmkstart AAAAAAAAGT}
+{\bkmkend AAAAAAAAGT}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b APIClient}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.base_analyzer Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.base_analyzer}
+{\xe \v penify_hook.base_analyzer}
+{\bkmkstart AAAAAAAAHE}
+{\bkmkend AAAAAAAAHE}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b BaseAnalyzer}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commands}
+{\xe \v penify_hook.commands}
+{\bkmkstart AAAAAAAAHS}
+{\bkmkend AAAAAAAAHS}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b auth_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b commit_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b config_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b doc_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b hook_commands}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commands.auth_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commands.auth_commands}
+{\xe \v penify_hook.commands.auth_commands}
+{\bkmkstart AAAAAAAAHT}
+{\bkmkend AAAAAAAAHT}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b save_credentials} (api_key)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b login} (api_url, dashboard_url)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v login\:penify_hook.commands.auth_commands}
+{\xe \v penify_hook.commands.auth_commands\:login}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.auth_commands.login ( {\i api_url}, {\i dashboard_url})}}
+\par
+{\bkmkstart AAAAAAAAHU}
+{\bkmkend AAAAAAAAHU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Open the login page in a web browser and capture the token via redirect.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v save_credentials\:penify_hook.commands.auth_commands}
+{\xe \v penify_hook.commands.auth_commands\:save_credentials}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.auth_commands.save_credentials ( {\i api_key})}}
+\par
+{\bkmkstart AAAAAAAAHV}
+{\bkmkend AAAAAAAAHV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Save the API key in a priority-based manner.\par
+\par
+This function attempts to save the API key in two locations, based on priority:\par
+1. In a `.env` file located in the root of the Git repository if one is found.\par
+2. In a global `.penify` file located in the user's home directory as a\par
+fallback. The function first tries to locate the Git repository using\par
+`recursive_search_git_folder`. If a Git repository is found, it reads the\par
+existing `.env` file (if present), updates or adds the API key under the key\par
+`PENIFY_API_TOKEN`, and writes the updated content back. If any error occurs\par
+during this process, it falls back to saving the credentials in the global\par
+`.penify` file. The function handles exceptions and prints appropriate error\par
+messages.\par
+\par
+Args:\par
+ api_key (str): The API key to save.\par
+\par
+Returns:\par
+ bool: True if the API key is saved successfully, False otherwise.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commands.commit_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commands.commit_commands}
+{\xe \v penify_hook.commands.commit_commands}
+{\bkmkstart AAAAAAAAHW}
+{\bkmkend AAAAAAAAHW}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b commit_code} (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b setup_commit_parser} (parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b handle_commit} (args)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v commit_code\:penify_hook.commands.commit_commands}
+{\xe \v penify_hook.commands.commit_commands\:commit_code}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.commit_commands.commit_code ( {\i api_url}, {\i token}, {\i message}, {\i open_terminal}, {\i generate_description}, {\i llm_model} = {\f2 None}, {\i llm_api_base} = {\f2 None}, {\i llm_api_key} = {\f2 None}, {\i jira_url} = {\f2 None}, {\i jira_user} = {\f2 None}, {\i jira_api_token} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAHX}
+{\bkmkend AAAAAAAAHX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Enhance Git commits with AI-powered commit messages.\par
+\par
+This function allows for the generation of enhanced commit messages using\par
+natural language processing models and optionally integrates with JIRA for\par
+additional context. It processes the current Git folder to find relevant files\par
+and generates a detailed commit message based on the provided parameters.\par
+\par
+Args:\par
+ api_url (str): URL of the API endpoint.\par
+ token (str): Authentication token for the API.\par
+ message (str): Initial commit message provided by the user.\par
+ open_terminal (bool): Whether to open the terminal after committing.\par
+ generate_description (bool): Whether to generate a detailed description in the commit message.\par
+ llm_model (str?): The language model to use for generating the commit message. Defaults to None.\par
+ llm_api_base (str?): Base URL of the LLM API. Defaults to None.\par
+ llm_api_key (str?): API key for accessing the LLM service. Defaults to None.\par
+ jira_url (str?): URL of the JIRA instance. Defaults to None.\par
+ jira_user (str?): Username for authenticating with JIRA. Defaults to None.\par
+ jira_api_token (str?): API token for accessing JIRA. Defaults to None.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v handle_commit\:penify_hook.commands.commit_commands}
+{\xe \v penify_hook.commands.commit_commands\:handle_commit}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.commit_commands.handle_commit ( {\i args})}}
+\par
+{\bkmkstart AAAAAAAAHY}
+{\bkmkend AAAAAAAAHY}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Handle commit functionality by processing arguments and invoking the\par
+appropriate commands.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v setup_commit_parser\:penify_hook.commands.commit_commands}
+{\xe \v penify_hook.commands.commit_commands\:setup_commit_parser}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.commit_commands.setup_commit_parser ( {\i parser})}}
+\par
+{\bkmkstart AAAAAAAAHZ}
+{\bkmkend AAAAAAAAHZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Sets up an argument parser for generating smart commit messages.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commands.config_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands}
+{\bkmkstart AAAAAAAAIA}
+{\bkmkend AAAAAAAAIA}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+None {\b load_env_files} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Path {\b get_penify_config} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Any {\b get_env_var_or_default} (str env_var, Any default=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b save_llm_config} (model, api_base, api_key)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b save_jira_config} (url, username, api_token)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict[str, str] {\b get_llm_config} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict[str, str] {\b get_jira_config} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b config_llm_web} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b config_jira_web} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Optional[str] {\b get_token} ()\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b DOTENV_AVAILABLE} = True\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b path}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v config_jira_web\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:config_jira_web}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.config_commands.config_jira_web ()}}
+\par
+{\bkmkstart AAAAAAAAIB}
+{\bkmkend AAAAAAAAIB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Starts a web server for configuring JIRA settings.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v config_llm_web\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:config_llm_web}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.config_commands.config_llm_web ()}}
+\par
+{\bkmkstart AAAAAAAAIC}
+{\bkmkend AAAAAAAAIC}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Starts an HTTP server for configuring LLM settings via a web interface.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_env_var_or_default\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:get_env_var_or_default}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Any penify_hook.commands.config_commands.get_env_var_or_default (str {\i env_var}, Any {\i default} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAID}
+{\bkmkend AAAAAAAAID}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Get environment variable or return default value.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_jira_config\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:get_jira_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Dict[str, str] penify_hook.commands.config_commands.get_jira_config ()}}
+\par
+{\bkmkstart AAAAAAAAIE}
+{\bkmkend AAAAAAAAIE}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Retrieve JIRA configuration from environment variables.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_llm_config\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:get_llm_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Dict[str, str] penify_hook.commands.config_commands.get_llm_config ()}}
+\par
+{\bkmkstart AAAAAAAAIF}
+{\bkmkend AAAAAAAAIF}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Retrieve LLM configuration from environment variables.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_penify_config\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:get_penify_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Path penify_hook.commands.config_commands.get_penify_config ()}}
+\par
+{\bkmkstart AAAAAAAAIG}
+{\bkmkend AAAAAAAAIG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Returns the path to the `config.json` file within the `.penify` directory,\par
+creating it if necessary.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_token\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:get_token}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Optional[str] penify_hook.commands.config_commands.get_token ()}}
+\par
+{\bkmkstart AAAAAAAAIH}
+{\bkmkend AAAAAAAAIH}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Retrieves an API token using a prioritized method.\par
+\par
+This function first attempts to load environment variables from all `.env`\par
+files and checks if the `PENIFY_API_TOKEN` environment variable is set. If\par
+found, it returns the token. If not, it looks for the API key in a\par
+configuration file named 'api_keys'. If both methods fail, it returns None.\par
+\par
+Returns:\par
+ str or None: The API token if found, otherwise None.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v load_env_files\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:load_env_files}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ None penify_hook.commands.config_commands.load_env_files ()}}
+\par
+{\bkmkstart AAAAAAAAII}
+{\bkmkend AAAAAAAAII}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Load environment variables from .env files in various locations with proper\par
+priority.\par
+\par
+This function loads environment variables from .env files located in different\par
+directories, prioritizing the current directory over the Git repo root and the\par
+user home directory. The loading process ensures that later files override\par
+earlier ones.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v save_jira_config\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:save_jira_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.config_commands.save_jira_config ( {\i url}, {\i username}, {\i api_token})}}
+\par
+{\bkmkstart AAAAAAAAIJ}
+{\bkmkend AAAAAAAAIJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Save JIRA configuration settings to a .env file.\par
+\par
+This function saves JIRA configuration following these steps: 1. Determine the\par
+target .env file location based on whether the current directory is inside a\par
+Git repository. 2. If inside a Git repo, use the Git repo root's .env file;\par
+otherwise, use the user home directory's .env file. 3. Read the existing\par
+content of the .env file (if it exists) to preserve other settings. 4. Update\par
+the .env content with the new JIRA configuration. 5. Write the updated content\par
+back to the .env file. 6. Optionally, reload environment variables to make\par
+changes immediately available.\par
+\par
+Args:\par
+ url (str): The JIRA URL to be saved in the .env file.\par
+ username (str): The JIRA username to be saved in the .env file.\par
+ api_token (str): The JIRA API token to be saved in the .env file.\par
+\par
+Returns:\par
+ bool: True if the configuration was successfully saved, False otherwise.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v save_llm_config\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:save_llm_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.config_commands.save_llm_config ( {\i model}, {\i api_base}, {\i api_key})}}
+\par
+{\bkmkstart AAAAAAAAIK}
+{\bkmkend AAAAAAAAIK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Save LLM configuration settings to an .env file.\par
+\par
+This function saves the LLM configuration following a specific priority: 1. Git\par
+repo root .env (if inside a git repo) 2. User home directory .env It handles\par
+the detection of the Git repo root, reads the existing .env content, updates it\par
+with the new LLM configuration, and writes it back to the file. It also reloads\par
+the environment variables to make changes immediately available.\par
+\par
+Args:\par
+ model (str): The name of the language model.\par
+ api_base (str): The base URL for the API.\par
+ api_key (str): The API key for authentication.\par
+\par
+Returns:\par
+ bool: True if the configuration is saved successfully, False otherwise.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v DOTENV_AVAILABLE\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:DOTENV_AVAILABLE}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+bool penify_hook.commands.config_commands.DOTENV_AVAILABLE = True}}
+\par
+{\bkmkstart AAAAAAAAIL}
+{\bkmkend AAAAAAAAIL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v path\:penify_hook.commands.config_commands}
+{\xe \v penify_hook.commands.config_commands\:path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.commands.config_commands.path}}
+\par
+{\bkmkstart AAAAAAAAIM}
+{\bkmkend AAAAAAAAIM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commands.doc_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commands.doc_commands}
+{\xe \v penify_hook.commands.doc_commands}
+{\bkmkstart AAAAAAAAIN}
+{\bkmkend AAAAAAAAIN}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b generate_doc} (api_url, token, location=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b setup_docgen_parser} (parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b handle_docgen} (args)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b docgen_description}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v generate_doc\:penify_hook.commands.doc_commands}
+{\xe \v penify_hook.commands.doc_commands\:generate_doc}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.doc_commands.generate_doc ( {\i api_url}, {\i token}, {\i location} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAIO}
+{\bkmkend AAAAAAAAIO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generates documentation based on the given parameters.\par
+\par
+This function initializes an API client using the provided API URL and token.\par
+It then generates documentation by analyzing the specified location, which can\par
+be a folder, a file, or the current working directory if no location is\par
+provided. The function handles different types of analysis based on the input\par
+location and reports any errors encountered during the process.\par
+\par
+Args:\par
+ api_url (str): The URL of the API to connect to for documentation generation.\par
+ token (str): The authentication token for accessing the API.\par
+ location (str?): The path to a specific file or folder to analyze. If not provided,\par
+ the current working directory is used.\par
+}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v handle_docgen\:penify_hook.commands.doc_commands}
+{\xe \v penify_hook.commands.doc_commands\:handle_docgen}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.doc_commands.handle_docgen ( {\i args})}}
+\par
+{\bkmkstart AAAAAAAAIP}
+{\bkmkend AAAAAAAAIP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Handle document generation and hook management based on subcommands.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v setup_docgen_parser\:penify_hook.commands.doc_commands}
+{\xe \v penify_hook.commands.doc_commands\:setup_docgen_parser}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.doc_commands.setup_docgen_parser ( {\i parser})}}
+\par
+{\bkmkstart AAAAAAAAIQ}
+{\bkmkend AAAAAAAAIQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Configure a parser for generating documentation using Git commands.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v docgen_description\:penify_hook.commands.doc_commands}
+{\xe \v penify_hook.commands.doc_commands\:docgen_description}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.commands.doc_commands.docgen_description}}
+\par
+{\bkmkstart AAAAAAAAIR}
+{\bkmkend AAAAAAAAIR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\b Initial value:}{
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 = {\cf22 """Generate code documentation using Penify.}\par
+2 {\cf22 }\par
+3 {\cf22 This command requires you to be logged in to your Penify account.}\par
+4 {\cf22 You can generate documentation for:}\par
+5 {\cf22 - Current Git diff (default)}\par
+6 {\cf22 - Specific file}\par
+7 {\cf22 - Specific folder}\par
+8 {\cf22 """}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commands.hook_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commands.hook_commands}
+{\xe \v penify_hook.commands.hook_commands}
+{\bkmkstart AAAAAAAAIS}
+{\bkmkend AAAAAAAAIS}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b install_git_hook} (location, token)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b uninstall_git_hook} (location)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b HOOK_FILENAME} = "post-commit"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b HOOK_TEMPLATE}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v install_git_hook\:penify_hook.commands.hook_commands}
+{\xe \v penify_hook.commands.hook_commands\:install_git_hook}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.hook_commands.install_git_hook ( {\i location}, {\i token})}}
+\par
+{\bkmkstart AAAAAAAAIT}
+{\bkmkend AAAAAAAAIT}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Install a post-commit Git hook that generates documentation for changed files.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v uninstall_git_hook\:penify_hook.commands.hook_commands}
+{\xe \v penify_hook.commands.hook_commands\:uninstall_git_hook}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commands.hook_commands.uninstall_git_hook ( {\i location})}}
+\par
+{\bkmkstart AAAAAAAAIU}
+{\bkmkend AAAAAAAAIU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Uninstalls the post-commit hook from the specified location.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v HOOK_FILENAME\:penify_hook.commands.hook_commands}
+{\xe \v penify_hook.commands.hook_commands\:HOOK_FILENAME}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit"}}
+\par
+{\bkmkstart AAAAAAAAIV}
+{\bkmkend AAAAAAAAIV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v HOOK_TEMPLATE\:penify_hook.commands.hook_commands}
+{\xe \v penify_hook.commands.hook_commands\:HOOK_TEMPLATE}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.commands.hook_commands.HOOK_TEMPLATE}}
+\par
+{\bkmkstart AAAAAAAAIW}
+{\bkmkend AAAAAAAAIW}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\b Initial value:}{
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 = {\cf22 """#!/bin/sh}\par
+2 {\cf22 # This is a post-commit hook generated by penify.}\par
+3 {\cf22 # Automatically generates documentation for changed files after each commit.}\par
+4 {\cf22 }\par
+5 {\cf22 penify docgen -gf \{git_folder_path\} -t \{token\}}\par
+6 {\cf22 """}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commit_analyzer Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commit_analyzer}
+{\xe \v penify_hook.commit_analyzer}
+{\bkmkstart AAAAAAAAIX}
+{\bkmkend AAAAAAAAIX}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b CommitDocGenHook}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.config_command Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.config_command}
+{\xe \v penify_hook.config_command}
+{\bkmkstart AAAAAAAAJE}
+{\bkmkend AAAAAAAAJE}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b setup_config_parser} (parent_parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b handle_config} (args)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v handle_config\:penify_hook.config_command}
+{\xe \v penify_hook.config_command\:handle_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.config_command.handle_config ( {\i args})}}
+\par
+{\bkmkstart AAAAAAAAJF}
+{\bkmkend AAAAAAAAJF}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Handle configuration settings based on the specified config type.\par
+\par
+This function processes different types of configurations such as LLM (Language\par
+Model) and JIRA. It saves configurations, sets up web-based configurations, and\par
+verifies JIRA connections. Depending on the `args.config_type`, it imports\par
+necessary modules, handles configuration saving or setup, and optionally\par
+verifies JIRA connectivity.\par
+\par
+Args:\par
+ args (argparse.Namespace): Command-line arguments containing the type of configuration to handle.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v setup_config_parser\:penify_hook.config_command}
+{\xe \v penify_hook.config_command\:setup_config_parser}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.config_command.setup_config_parser ( {\i parent_parser})}}
+\par
+{\bkmkstart AAAAAAAAJG}
+{\bkmkend AAAAAAAAJG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Set up configuration parsers with subcommands for LLM and JIRA settings.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.constants Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.constants}
+{\xe \v penify_hook.constants}
+{\bkmkstart AAAAAAAAJH}
+{\bkmkend AAAAAAAAJH}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b API_URL} = 'http://localhost:8000/api'\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b DASHBOARD_URL} = "https://dashboard.penify.dev/auth/localhost/login"\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v API_URL\:penify_hook.constants}
+{\xe \v penify_hook.constants\:API_URL}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.constants.API_URL = 'http://localhost:8000/api'}}
+\par
+{\bkmkstart AAAAAAAAJI}
+{\bkmkend AAAAAAAAJI}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v DASHBOARD_URL\:penify_hook.constants}
+{\xe \v penify_hook.constants\:DASHBOARD_URL}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"}}
+\par
+{\bkmkstart AAAAAAAAJJ}
+{\bkmkend AAAAAAAAJJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.file_analyzer Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.file_analyzer}
+{\xe \v penify_hook.file_analyzer}
+{\bkmkstart AAAAAAAAJK}
+{\bkmkend AAAAAAAAJK}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b FileAnalyzerGenHook}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b logger} = logging.getLogger(__name__)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v logger\:penify_hook.file_analyzer}
+{\xe \v penify_hook.file_analyzer\:logger}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.file_analyzer.logger = logging.getLogger(__name__)}}
+\par
+{\bkmkstart AAAAAAAAJL}
+{\bkmkend AAAAAAAAJL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.folder_analyzer Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.folder_analyzer}
+{\xe \v penify_hook.folder_analyzer}
+{\bkmkstart AAAAAAAAJR}
+{\bkmkend AAAAAAAAJR}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b FolderAnalyzerGenHook}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.git_analyzer Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.git_analyzer}
+{\xe \v penify_hook.git_analyzer}
+{\bkmkstart AAAAAAAAJW}
+{\bkmkend AAAAAAAAJW}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b GitDocGenHook}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b logger} = logging.getLogger(__name__)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v logger\:penify_hook.git_analyzer}
+{\xe \v penify_hook.git_analyzer\:logger}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.git_analyzer.logger = logging.getLogger(__name__)}}
+\par
+{\bkmkstart AAAAAAAAJX}
+{\bkmkend AAAAAAAAJX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.jira_client Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.jira_client}
+{\xe \v penify_hook.jira_client}
+{\bkmkstart AAAAAAAAKD}
+{\bkmkend AAAAAAAAKD}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b JiraClient}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b JIRA_AVAILABLE} = True\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v JIRA_AVAILABLE\:penify_hook.jira_client}
+{\xe \v penify_hook.jira_client\:JIRA_AVAILABLE}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+bool penify_hook.jira_client.JIRA_AVAILABLE = True}}
+\par
+{\bkmkstart AAAAAAAAKE}
+{\bkmkend AAAAAAAAKE}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.llm_client Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.llm_client}
+{\xe \v penify_hook.llm_client}
+{\bkmkstart AAAAAAAAKV}
+{\bkmkend AAAAAAAAKV}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b LLMClient}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.login_command Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.login_command}
+{\xe \v penify_hook.login_command}
+{\bkmkstart AAAAAAAALC}
+{\bkmkend AAAAAAAALC}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b setup_login_parser} (parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b handle_login} (args)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v handle_login\:penify_hook.login_command}
+{\xe \v penify_hook.login_command\:handle_login}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.login_command.handle_login ( {\i args})}}
+\par
+{\bkmkstart AAAAAAAALD}
+{\bkmkend AAAAAAAALD}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Initiates a user login process using predefined constants and the `login`\par
+function.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v setup_login_parser\:penify_hook.login_command}
+{\xe \v penify_hook.login_command\:setup_login_parser}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.login_command.setup_login_parser ( {\i parser})}}
+\par
+{\bkmkstart AAAAAAAALE}
+{\bkmkend AAAAAAAALE}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Set up command-line arguments for login.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.main Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.main}
+{\xe \v penify_hook.main}
+{\bkmkstart AAAAAAAALF}
+{\bkmkend AAAAAAAALF}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b main} ()\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v main\:penify_hook.main}
+{\xe \v penify_hook.main\:main}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.main.main ()}}
+\par
+{\bkmkstart AAAAAAAALG}
+{\bkmkend AAAAAAAALG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Main function to handle command-line interface (CLI) interactions with Penify\par
+services.\par
+\par
+This tool provides a command-line interface for generating smart commit\par
+messages, configuring local-LLM and JIRA, and generating code documentation. It\par
+supports basic commands that do not require login and advanced commands that\par
+require user authentication. The `--version` flag can be used to display the\par
+version information.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.ui_utils Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils}
+{\bkmkstart AAAAAAAALH}
+{\bkmkend AAAAAAAALH}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b format_info} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b format_success} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b format_warning} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b format_error} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b format_highlight} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b format_file_path} (file_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_info} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_success} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_warning} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_error} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_processing} (file_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_status} (status, message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b create_progress_bar} (total, desc="Processing", unit="item")\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b create_stage_progress_bar} (stages, desc="Processing")\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b update_stage} (pbar, stage_name)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b autoreset}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b INFO_COLOR} = Fore.CYAN\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b SUCCESS_COLOR} = Fore.GREEN\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b WARNING_COLOR} = Fore.YELLOW\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b ERROR_COLOR} = Fore.RED\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b HIGHLIGHT_COLOR} = Fore.BLUE\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b NEUTRAL_COLOR} = Fore.WHITE\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b SUCCESS_SYMBOL} = "\'E2\'9C\'93"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b WARNING_SYMBOL} = "\'E2\'97\'8B"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b ERROR_SYMBOL} = "\'E2\'9C\'97"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b PROCESSING_SYMBOL} = "\'E2\'9F\'B3"\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Detailed Description\par
+\pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid UI utilities for Penify CLI.\par
+\par
+This module provides utility functions for consistent UI formatting,\par
+colored output, and progress indicators across the Penify CLI application.\par
+}
+ \par
+}}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v create_progress_bar\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:create_progress_bar}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.create_progress_bar ( {\i total}, {\i desc} = {\f2 "Processing"}, {\i unit} = {\f2 "item"})}}
+\par
+{\bkmkstart AAAAAAAALI}
+{\bkmkend AAAAAAAALI}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Create a tqdm progress bar with consistent styling.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v create_stage_progress_bar\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:create_stage_progress_bar}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.create_stage_progress_bar ( {\i stages}, {\i desc} = {\f2 "Processing"})}}
+\par
+{\bkmkstart AAAAAAAALJ}
+{\bkmkend AAAAAAAALJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Create a tqdm progress bar for processing stages with consistent styling.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v format_error\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:format_error}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.format_error ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALK}
+{\bkmkend AAAAAAAALK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Format an error message with the specified error color.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v format_file_path\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:format_file_path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.format_file_path ( {\i file_path})}}
+\par
+{\bkmkstart AAAAAAAALL}
+{\bkmkend AAAAAAAALL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Format a file path with a warning color.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v format_highlight\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:format_highlight}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.format_highlight ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALM}
+{\bkmkend AAAAAAAALM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Format a highlighted message with appropriate color.}
+ \par
+}}
+{\xe \v format_info\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:format_info}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.format_info ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALN}
+{\bkmkend AAAAAAAALN}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Format an informational message with appropriate color.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v format_success\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:format_success}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.format_success ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALO}
+{\bkmkend AAAAAAAALO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Formats a success message with green color and reset style.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v format_warning\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:format_warning}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.format_warning ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALP}
+{\bkmkend AAAAAAAALP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Format a warning message with appropriate color.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v print_error\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:print_error}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.print_error ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALQ}
+{\bkmkend AAAAAAAALQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Print an error message with appropriate formatting.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v print_info\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:print_info}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.print_info ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALR}
+{\bkmkend AAAAAAAALR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Prints an informational message with formatting.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v print_processing\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:print_processing}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.print_processing ( {\i file_path})}}
+\par
+{\bkmkstart AAAAAAAALS}
+{\bkmkend AAAAAAAALS}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Print a processing message for a specified file.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v print_status\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:print_status}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.print_status ( {\i status}, {\i message})}}
+\par
+{\bkmkstart AAAAAAAALT}
+{\bkmkend AAAAAAAALT}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Print a status message with an appropriate symbol.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v print_success\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:print_success}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.print_success ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALU}
+{\bkmkend AAAAAAAALU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Prints a formatted success message.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v print_warning\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:print_warning}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.print_warning ( {\i message})}}
+\par
+{\bkmkstart AAAAAAAALV}
+{\bkmkend AAAAAAAALV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Prints a warning message with formatted output.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v update_stage\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:update_stage}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.ui_utils.update_stage ( {\i pbar}, {\i stage_name})}}
+\par
+{\bkmkstart AAAAAAAALW}
+{\bkmkend AAAAAAAALW}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Update the progress bar with a new stage name.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v autoreset\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:autoreset}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.autoreset}}
+\par
+{\bkmkstart AAAAAAAALX}
+{\bkmkend AAAAAAAALX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v ERROR_COLOR\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:ERROR_COLOR}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.ERROR_COLOR = Fore.RED}}
+\par
+{\bkmkstart AAAAAAAALY}
+{\bkmkend AAAAAAAALY}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v ERROR_SYMBOL\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:ERROR_SYMBOL}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.ui_utils.ERROR_SYMBOL = "\'E2\'9C\'97"}}
+\par
+{\bkmkstart AAAAAAAALZ}
+{\bkmkend AAAAAAAALZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v HIGHLIGHT_COLOR\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:HIGHLIGHT_COLOR}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE}}
+\par
+{\bkmkstart AAAAAAAAMA}
+{\bkmkend AAAAAAAAMA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v INFO_COLOR\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:INFO_COLOR}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.INFO_COLOR = Fore.CYAN}}
+\par
+{\bkmkstart AAAAAAAAMB}
+{\bkmkend AAAAAAAAMB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v NEUTRAL_COLOR\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:NEUTRAL_COLOR}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE}}
+\par
+{\bkmkstart AAAAAAAAMC}
+{\bkmkend AAAAAAAAMC}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v PROCESSING_SYMBOL\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:PROCESSING_SYMBOL}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.ui_utils.PROCESSING_SYMBOL = "\'E2\'9F\'B3"}}
+\par
+{\bkmkstart AAAAAAAAMD}
+{\bkmkend AAAAAAAAMD}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v SUCCESS_COLOR\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:SUCCESS_COLOR}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN}}
+\par
+{\bkmkstart AAAAAAAAME}
+{\bkmkend AAAAAAAAME}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v SUCCESS_SYMBOL\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:SUCCESS_SYMBOL}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.ui_utils.SUCCESS_SYMBOL = "\'E2\'9C\'93"}}
+\par
+{\bkmkstart AAAAAAAAMF}
+{\bkmkend AAAAAAAAMF}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v WARNING_COLOR\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:WARNING_COLOR}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW}}
+\par
+{\bkmkstart AAAAAAAAMG}
+{\bkmkend AAAAAAAAMG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v WARNING_SYMBOL\:penify_hook.ui_utils}
+{\xe \v penify_hook.ui_utils\:WARNING_SYMBOL}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+string penify_hook.ui_utils.WARNING_SYMBOL = "\'E2\'97\'8B"}}
+\par
+{\bkmkstart AAAAAAAAMH}
+{\bkmkend AAAAAAAAMH}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.utils Namespace Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.utils}
+{\xe \v penify_hook.utils}
+{\bkmkstart AAAAAAAAMI}
+{\bkmkend AAAAAAAAMI}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b GitRepoNotFoundError}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b get_repo_details} (Repo repo)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b recursive_search_git_folder} (folder_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b find_git_parent} (path)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b logger} = logging.getLogger(__name__)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v find_git_parent\:penify_hook.utils}
+{\xe \v penify_hook.utils\:find_git_parent}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.utils.find_git_parent ( {\i path})}}
+\par
+{\bkmkstart AAAAAAAAMJ}
+{\bkmkend AAAAAAAAMJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Traverse up from the given path to find the nearest directory containing a .git\par
+subdirectory.}
+ \par
+}}
+{\xe \v get_repo_details\:penify_hook.utils}
+{\xe \v penify_hook.utils\:get_repo_details}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.utils.get_repo_details (Repo {\i repo})}}
+\par
+{\bkmkstart AAAAAAAAMK}
+{\bkmkend AAAAAAAAMK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Determine the details of a repository including its remote URL, hosting\par
+service, organization name, and repository name.\par
+\par
+This function extracts the remote URL from the given Git repository object and\par
+determines the hosting service (e.g., GitHub, Azure DevOps, Bitbucket, GitLab).\par
+It then parses the URL to extract the organization name and repository name. If\par
+the URL does not match any known hosting service pattern, it sets the hosting\par
+service as "Unknown". The function handles exceptions that may occur during\par
+this process and logs an error message if needed.\par
+\par
+Args:\par
+ repo (Repo): A GitPython Repo object representing the local git repository.\par
+\par
+Returns:\par
+ dict: A dictionary containing the organization name, repository name, and hosting\par
+ service.\par
+}
+ \par
+}}
+{\xe \v recursive_search_git_folder\:penify_hook.utils}
+{\xe \v penify_hook.utils\:recursive_search_git_folder}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.utils.recursive_search_git_folder ( {\i folder_path})}}
+\par
+{\bkmkstart AAAAAAAAML}
+{\bkmkend AAAAAAAAML}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Recursively searches for a .git folder starting from the given directory.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v logger\:penify_hook.utils}
+{\xe \v penify_hook.utils\:logger}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.utils.logger = logging.getLogger(__name__)}}
+\par
+{\bkmkstart AAAAAAAAMM}
+{\bkmkend AAAAAAAAMM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+setup Namespace Reference\par \pard\plain
+{\tc\tcl2 \v setup}
+{\xe \v setup}
+{\bkmkstart AAAAAAAAMO}
+{\bkmkend AAAAAAAAMO}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b name}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b version}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b packages}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b install_requires}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b entry_points}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b author}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b author_email}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b description}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b long_description}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b long_description_content_type}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b url}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b classifiers}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b python_requires}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variable Documentation\par
+\pard\plain
+{\xe \v author\:setup}
+{\xe \v setup\:author}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.author}}
+\par
+{\bkmkstart AAAAAAAAMP}
+{\bkmkend AAAAAAAAMP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v author_email\:setup}
+{\xe \v setup\:author_email}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.author_email}}
+\par
+{\bkmkstart AAAAAAAAMQ}
+{\bkmkend AAAAAAAAMQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v classifiers\:setup}
+{\xe \v setup\:classifiers}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.classifiers}}
+\par
+{\bkmkstart AAAAAAAAMR}
+{\bkmkend AAAAAAAAMR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v description\:setup}
+{\xe \v setup\:description}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.description}}
+\par
+{\bkmkstart AAAAAAAAMS}
+{\bkmkend AAAAAAAAMS}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v entry_points\:setup}
+{\xe \v setup\:entry_points}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.entry_points}}
+\par
+{\bkmkstart AAAAAAAAMT}
+{\bkmkend AAAAAAAAMT}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v install_requires\:setup}
+{\xe \v setup\:install_requires}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.install_requires}}
+\par
+{\bkmkstart AAAAAAAAMU}
+{\bkmkend AAAAAAAAMU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v long_description\:setup}
+{\xe \v setup\:long_description}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.long_description}}
+\par
+{\bkmkstart AAAAAAAAMV}
+{\bkmkend AAAAAAAAMV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v long_description_content_type\:setup}
+{\xe \v setup\:long_description_content_type}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.long_description_content_type}}
+\par
+{\bkmkstart AAAAAAAAMW}
+{\bkmkend AAAAAAAAMW}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v name\:setup}
+{\xe \v setup\:name}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.name}}
+\par
+{\bkmkstart AAAAAAAAMX}
+{\bkmkend AAAAAAAAMX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v packages\:setup}
+{\xe \v setup\:packages}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.packages}}
+\par
+{\bkmkstart AAAAAAAAMY}
+{\bkmkend AAAAAAAAMY}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v python_requires\:setup}
+{\xe \v setup\:python_requires}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.python_requires}}
+\par
+{\bkmkstart AAAAAAAAMZ}
+{\bkmkend AAAAAAAAMZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v url\:setup}
+{\xe \v setup\:url}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.url}}
+\par
+{\bkmkstart AAAAAAAANA}
+{\bkmkend AAAAAAAANA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v version\:setup}
+{\xe \v setup\:version}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+setup.version}}
+\par
+{\bkmkstart AAAAAAAANB}
+{\bkmkend AAAAAAAANB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests Namespace Reference\par \pard\plain
+{\tc\tcl2 \v tests}
+{\xe \v tests}
+{\bkmkstart AAAAAAAANC}
+{\bkmkend AAAAAAAANC}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b conftest}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b test_commit_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b test_config_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b test_doc_commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b test_web_config}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.conftest Namespace Reference\par \pard\plain
+{\tc\tcl2 \v tests.conftest}
+{\xe \v tests.conftest}
+{\bkmkstart AAAAAAAAND}
+{\bkmkend AAAAAAAAND}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_commit_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_commit_commands}
+{\xe \v tests.test_commit_commands}
+{\bkmkstart AAAAAAAANE}
+{\bkmkend AAAAAAAANE}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b TestCommitCommands}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_config_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_config_commands}
+{\xe \v tests.test_config_commands}
+{\bkmkstart AAAAAAAANS}
+{\bkmkend AAAAAAAANS}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b TestConfigCommands}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_doc_commands Namespace Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_doc_commands}
+{\xe \v tests.test_doc_commands}
+{\bkmkstart AAAAAAAAOG}
+{\bkmkend AAAAAAAAOG}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_generate_doc_no_location} (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_generate_doc_file_location} (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_generate_doc_folder_location} (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_generate_doc_error_handling} (mock_api_client, mock_git_analyzer, mock_exit)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_setup_docgen_parser} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_handle_docgen_install_hook} (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_handle_docgen_uninstall_hook} (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_handle_docgen_generate} (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_handle_docgen_no_token} (mock_exit, mock_get_token)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_generate_doc_with_file_exception} (mock_api_client, mock_getcwd)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_generate_doc_with_folder_exception} (mock_api_client, mock_getcwd)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Function Documentation\par
+\pard\plain
+{\xe \v test_generate_doc_error_handling\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_generate_doc_error_handling}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_generate_doc_error_handling ( {\i mock_api_client}, {\i mock_git_analyzer}, {\i mock_exit})}}
+\par
+{\bkmkstart AAAAAAAAOH}
+{\bkmkend AAAAAAAAOH}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generate a documentation string for the provided code snippet using\par
+Google Docstring style.\par
+\par
+Short one line description: Test function to ensure proper error\par
+handling during API calls with GitAnalyzer. Multiline long description:\par
+This test function is designed to verify that the generate_doc function\par
+handles exceptions correctly when an error occurs during API interaction\par
+with GitAnalyzer. It sets up a mock API client and a mock Git analyzer,\par
+causing the analyzer to raise an exception to simulate a failure\par
+condition. The function then asserts that the exit code is set to 1 when\par
+the error handling mechanism is invoked.\par
+\par
+Args:\par
+ mock_api_client (MagicMock): A mock object simulating the API client.\par
+ mock_git_analyzer (MagicMock): A mock object simulating the Git analyzer, configured to raise an\par
+ exception.\par
+ mock_exit (MagicMock): A mock object representing the exit function, which should be called\par
+ with an error code.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_generate_doc_file_location\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_generate_doc_file_location}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_generate_doc_file_location ( {\i mock_api_client}, {\i mock_folder_analyzer}, {\i mock_file_analyzer}, {\i mock_git_analyzer})}}
+\par
+{\bkmkstart AAAAAAAAOI}
+{\bkmkend AAAAAAAAOI}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test generating a documentation file location.\par
+\par
+This function tests the process of generating a documentation file\par
+location using mock objects for API client, folder analyzer, file\par
+analyzer, and Git analyzer. It sets up the necessary mocks, calls the\par
+`generate_doc` function with specified parameters, and asserts that the\par
+appropriate methods on the mock objects are called as expected.\par
+\par
+Args:\par
+ mock_api_client (MagicMock): Mock object for the API client.\par
+ mock_folder_analyzer (MagicMock): Mock object for the folder analyzer.\par
+ mock_file_analyzer (MagicMock): Mock object for the file analyzer.\par
+ mock_git_analyzer (MagicMock): Mock object for the Git analyzer.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_generate_doc_folder_location\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_generate_doc_folder_location}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_generate_doc_folder_location ( {\i mock_api_client}, {\i mock_folder_analyzer}, {\i mock_file_analyzer}, {\i mock_git_analyzer})}}
+\par
+{\bkmkstart AAAAAAAAOJ}
+{\bkmkend AAAAAAAAOJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the function to generate documentation for a folder location.\par
+\par
+It sets up mock objects for API client, folder analyzer, file analyzer,\par
+and Git analyzer, then calls the `generate_doc` function with specified\par
+parameters. Finally, it asserts that the correct methods on the mock\par
+objects were called as expected.\par
+\par
+Args:\par
+ mock_api_client (MagicMock): Mock object for the API client.\par
+ mock_folder_analyzer (MagicMock): Mock object for the folder analyzer.\par
+ mock_file_analyzer (MagicMock): Mock object for the file analyzer.\par
+ mock_git_analyzer (MagicMock): Mock object for the Git analyzer.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_generate_doc_no_location\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_generate_doc_no_location}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_generate_doc_no_location ( {\i mock_getcwd}, {\i mock_api_client}, {\i mock_folder_analyzer}, {\i mock_file_analyzer}, {\i mock_git_analyzer})}}
+\par
+{\bkmkstart AAAAAAAAOK}
+{\bkmkend AAAAAAAAOK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test function to generate documentation without location information.\par
+\par
+This function sets up mocks for the API client, current working\par
+directory, and Git analyzer. It then calls the `generate_doc` function\par
+with a fake API URL and token. The function is expected to initialize\par
+the API client, configure the Git analyzer, and run it without any\par
+location information.\par
+\par
+Args:\par
+ mock_getcwd (MagicMock): Mock for os.getcwd().\par
+ mock_api_client (MagicMock): Mock for creating an API client.\par
+ mock_folder_analyzer (MagicMock): Mock for folder analysis.\par
+ mock_file_analyzer (MagicMock): Mock for file analysis.\par
+ mock_git_analyzer (MagicMock): Mock for Git analyzer setup.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_generate_doc_with_file_exception\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_generate_doc_with_file_exception}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_generate_doc_with_file_exception ( {\i mock_api_client}, {\i mock_getcwd})}}
+\par
+{\bkmkstart AAAAAAAAOL}
+{\bkmkend AAAAAAAAOL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generate documentation from a Python source file.\par
+\par
+This function reads a Python file and generates a docstring based on its\par
+content. It uses mock objects to simulate API calls and directory\par
+operations during testing.\par
+\par
+Args:\par
+ mock_api_client (unittest.mock.MagicMock): A mock object for simulating API client behavior.\par
+ mock_getcwd (unittest.mock.MagicMock): A mock object for simulating the current working directory function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_generate_doc_with_folder_exception\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_generate_doc_with_folder_exception}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_generate_doc_with_folder_exception ( {\i mock_api_client}, {\i mock_getcwd})}}
+\par
+{\bkmkstart AAAAAAAAOM}
+{\bkmkend AAAAAAAAOM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generate documentation from a given API endpoint and save it to a\par
+folder.\par
+\par
+This function fetches data from the specified API endpoint, processes\par
+it, and saves the generated documentation in the provided folder. If an\par
+error occurs during the fetching process, a SystemExit exception is\par
+raised with an appropriate message.\par
+\par
+Args:\par
+ api_url (str): The URL of the API endpoint from which data will be fetched.\par
+ token (str): The authentication token required to access the API.\par
+ folder_path (str): The path to the folder where the documentation will be saved.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_handle_docgen_generate\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_handle_docgen_generate}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_handle_docgen_generate ( {\i mock_get_token}, {\i mock_generate_doc}, {\i mock_uninstall_hook}, {\i mock_install_hook})}}
+\par
+{\bkmkstart AAAAAAAAON}
+{\bkmkend AAAAAAAAON}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the direct documentation generation functionality.\par
+\par
+This function tests the `handle_docgen` function when no subcommand is\par
+provided. It verifies that the document generation hook is called and\par
+the uninstall and install hooks are not called.\par
+\par
+Args:\par
+ mock_get_token (MagicMock): Mocked function to get authentication token.\par
+ mock_generate_doc (MagicMock): Mocked function for generating documentation.\par
+ mock_uninstall_hook (MagicMock): Mocked function for uninstalling the document generation hook.\par
+ mock_install_hook (MagicMock): Mocked function for installing the document generation hook.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_handle_docgen_install_hook\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_handle_docgen_install_hook}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_handle_docgen_install_hook ( {\i mock_exit}, {\i mock_get_token}, {\i mock_generate_doc}, {\i mock_uninstall_hook}, {\i mock_install_hook})}}
+\par
+{\bkmkstart AAAAAAAAOO}
+{\bkmkend AAAAAAAAOO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the handling of the 'install-hook' subcommand.\par
+\par
+This function sets up a mock environment where it simulates the\par
+execution of the 'install-hook' subcommand. It verifies that the\par
+`mock_install_hook` is called with the correct arguments, while\par
+`mock_generate_doc` and `mock_uninstall_hook` are not called.\par
+\par
+Args:\par
+ mock_exit (MagicMock): Mock object for sys.exit.\par
+ mock_get_token (MagicMock): Mock object to simulate fetching a token.\par
+ mock_generate_doc (MagicMock): Mock object to simulate generating documentation.\par
+ mock_uninstall_hook (MagicMock): Mock object to simulate uninstalling a hook.\par
+ mock_install_hook (MagicMock): Mock object to simulate installing a hook.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_handle_docgen_no_token\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_handle_docgen_no_token}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_handle_docgen_no_token ( {\i mock_exit}, {\i mock_get_token})}}
+\par
+{\bkmkstart AAAAAAAAOP}
+{\bkmkend AAAAAAAAOP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the behavior of the `handle_docgen` function when no token is\par
+provided.\par
+\par
+This function asserts that if no token is returned by `mock_get_token`,\par
+the `handle_docgen` function will call `mock_exit` with a status code of\par
+1.\par
+\par
+Args:\par
+ mock_exit (MagicMock): A MagicMock object simulating the `exit` function.\par
+ mock_get_token (MagicMock): A MagicMock object simulating the `get_token` function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_handle_docgen_uninstall_hook\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_handle_docgen_uninstall_hook}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_handle_docgen_uninstall_hook ( {\i mock_exit}, {\i mock_get_token}, {\i mock_generate_doc}, {\i mock_uninstall_hook}, {\i mock_install_hook})}}
+\par
+{\bkmkstart AAAAAAAAOQ}
+{\bkmkend AAAAAAAAOQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the uninstall-hook subcommand of the handle_docgen function.\par
+This test case sets up a mock environment and verifies that the\par
+uninstall-hook is called with the correct location, while generate_doc\par
+and install_hook are not called.\par
+\par
+Args:\par
+ mock_exit (MagicMock): A mock for the exit function.\par
+ mock_get_token (MagicMock): A mock for the get_token function.\par
+ mock_generate_doc (MagicMock): A mock for the generate_doc function.\par
+ mock_uninstall_hook (MagicMock): A mock for the uninstall_hook function.\par
+ mock_install_hook (MagicMock): A mock for the install_hook function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_setup_docgen_parser\:tests.test_doc_commands}
+{\xe \v tests.test_doc_commands\:test_setup_docgen_parser}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_doc_commands.test_setup_docgen_parser ()}}
+\par
+{\bkmkstart AAAAAAAAOR}
+{\bkmkend AAAAAAAAOR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the setup_docgen_parser function to ensure it properly configures\par
+the ArgumentParser for docgen options.\par
+\par
+It verifies that the parser correctly sets up docgen options and handles\par
+different subcommands like 'install-hook' and 'uninstall-hook'.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_web_config Namespace Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_web_config}
+{\xe \v tests.test_web_config}
+{\bkmkstart AAAAAAAAOS}
+{\bkmkend AAAAAAAAOS}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b TestWebConfig}\par
+}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+Class Documentation{\tc \v Class Documentation}
+\par \pard\plain
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.api_client.APIClient Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient}
+{\bkmkstart AAAAAAAAGU}
+{\bkmkend AAAAAAAAGU}
+Collaboration diagram for penify_hook.api_client.APIClient:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, {\b api_url}, str api_token=None, str bearer_token=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b send_file_for_docstring_generation} (self, file_name, content, line_numbers, repo_details=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b generate_commit_summary} (self, git_diff, str instruction="", repo_details=None, dict jira_context=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+list[str] {\b get_supported_file_types} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b generate_commit_summary_with_llm} (self, diff, message, bool generate_description, repo_details, {\b LLMClient} llm_client, jira_context=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b get_api_key} (self)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b api_url}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b AUTH_TOKEN}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b BEARER_TOKEN}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.api_client.APIClient.__init__ ( {\i self}, {\i api_url}, str {\i api_token} = {\f2 None}, str {\i bearer_token} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAGV}
+{\bkmkend AAAAAAAAGV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v generate_commit_summary\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:generate_commit_summary}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.api_client.APIClient.generate_commit_summary ( {\i self}, {\i git_diff}, str {\i instruction} = {\f2 ""}, {\i repo_details} = {\f2 None}, dict {\i jira_context} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAGW}
+{\bkmkend AAAAAAAAGW}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generates a commit summary by sending a POST request to the API endpoint.\par
+\par
+This function constructs a payload containing the git diff and any additional\par
+instructions provided. It then sends this payload to a specified API endpoint\par
+to generate a summary of the commit. If the request is successful, it returns\par
+the response from the API; otherwise, it returns None. The function also\par
+handles optional repository details and JIRA context if they are provided.\par
+\par
+Args:\par
+ git_diff (str): The git diff of the commit.\par
+ instruction (str): Additional instruction for the commit. Defaults to "".\par
+ repo_details (dict): Details of the git repository. Defaults to None.\par
+ jira_context (dict): JIRA issue details to enhance the commit summary. Defaults to None.\par
+\par
+Returns:\par
+ dict: The response from the API if the request is successful, None otherwise.\par
+}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v generate_commit_summary_with_llm\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:generate_commit_summary_with_llm}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.api_client.APIClient.generate_commit_summary_with_llm ( {\i self}, {\i diff}, {\i message}, bool {\i generate_description}, {\i repo_details}, {\b LLMClient} {\i llm_client}, {\i jira_context} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAGX}
+{\bkmkend AAAAAAAAGX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generates a commit summary using a local LLM client; falls back to API on\par
+error.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_api_key\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:get_api_key}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.api_client.APIClient.get_api_key ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAGY}
+{\bkmkend AAAAAAAAGY}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Fetch an API key from a specified URL using a Bearer token.}
+ \par
+}}
+{\xe \v get_supported_file_types\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:get_supported_file_types}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ list[str] penify_hook.api_client.APIClient.get_supported_file_types ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAGZ}
+{\bkmkend AAAAAAAAGZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Retrieve supported file types from the API or return a default list.}
+ \par
+}}
+{\xe \v send_file_for_docstring_generation\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:send_file_for_docstring_generation}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.api_client.APIClient.send_file_for_docstring_generation ( {\i self}, {\i file_name}, {\i content}, {\i line_numbers}, {\i repo_details} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAHA}
+{\bkmkend AAAAAAAAHA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Send file content and modified lines to the API and return modified content.}
+ \par
+}}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v api_url\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:api_url}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.api_client.APIClient.api_url}}
+\par
+{\bkmkstart AAAAAAAAHB}
+{\bkmkend AAAAAAAAHB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v AUTH_TOKEN\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:AUTH_TOKEN}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.api_client.APIClient.AUTH_TOKEN}}
+\par
+{\bkmkstart AAAAAAAAHC}
+{\bkmkend AAAAAAAAHC}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v BEARER_TOKEN\:penify_hook.api_client.APIClient}
+{\xe \v penify_hook.api_client.APIClient\:BEARER_TOKEN}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.api_client.APIClient.BEARER_TOKEN}}
+\par
+{\bkmkstart AAAAAAAAHD}
+{\bkmkend AAAAAAAAHD}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b api_client.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.base_analyzer.BaseAnalyzer Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer}
+{\bkmkstart AAAAAAAAHF}
+{\bkmkend AAAAAAAAHF}
+Inheritance diagram for penify_hook.base_analyzer.BaseAnalyzer:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for penify_hook.base_analyzer.BaseAnalyzer:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b folder_path}, {\b APIClient} {\b api_client})\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b folder_path}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b repo_path}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b repo}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b repo_details}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b relative_file_path}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b api_client}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b supported_file_types}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.base_analyzer.BaseAnalyzer.__init__ ( {\i self}, str {\i folder_path}, {\b APIClient} {\i api_client})}}
+\par
+{\bkmkstart AAAAAAAAHG}
+{\bkmkend AAAAAAAAHG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+\par
+{
+Reimplemented in {\b penify_hook.folder_analyzer.FolderAnalyzerGenHook} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHH \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b penify_hook.file_analyzer.FileAnalyzerGenHook} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHI \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b penify_hook.git_analyzer.GitDocGenHook} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHJ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b penify_hook.commit_analyzer.CommitDocGenHook} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v api_client\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:api_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.api_client}}
+\par
+{\bkmkstart AAAAAAAAHL}
+{\bkmkend AAAAAAAAHL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v folder_path\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:folder_path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.folder_path}}
+\par
+{\bkmkstart AAAAAAAAHM}
+{\bkmkend AAAAAAAAHM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v relative_file_path\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:relative_file_path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.relative_file_path}}
+\par
+{\bkmkstart AAAAAAAAHN}
+{\bkmkend AAAAAAAAHN}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v repo\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:repo}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.repo}}
+\par
+{\bkmkstart AAAAAAAAHO}
+{\bkmkend AAAAAAAAHO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v repo_details\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:repo_details}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.repo_details}}
+\par
+{\bkmkstart AAAAAAAAHP}
+{\bkmkend AAAAAAAAHP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v repo_path\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:repo_path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.repo_path}}
+\par
+{\bkmkstart AAAAAAAAHQ}
+{\bkmkend AAAAAAAAHQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v supported_file_types\:penify_hook.base_analyzer.BaseAnalyzer}
+{\xe \v penify_hook.base_analyzer.BaseAnalyzer\:supported_file_types}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.base_analyzer.BaseAnalyzer.supported_file_types}}
+\par
+{\bkmkstart AAAAAAAAHR}
+{\bkmkend AAAAAAAAHR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b base_analyzer.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.commit_analyzer.CommitDocGenHook Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook}
+{\bkmkstart AAAAAAAAIY}
+{\bkmkend AAAAAAAAIY}
+Inheritance diagram for penify_hook.commit_analyzer.CommitDocGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for penify_hook.commit_analyzer.CommitDocGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b repo_path}, {\b APIClient} {\b api_client}, {\b llm_client}=None, jira_client=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+dict {\b get_summary} (self, str instruction, bool generate_description)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b run} (self, Optional[str] msg, bool edit_commit_message, bool generate_description)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+tuple {\b process_jira_integration} (self, str title, str description, str msg)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b llm_client}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Private Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b _amend_commit} (self)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commit_analyzer.CommitDocGenHook.__init__ ( {\i self}, str {\i repo_path}, {\b APIClient} {\i api_client}, {\i llm_client} = {\f2 None}, {\i jira_client} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAHK}
+{\bkmkend AAAAAAAAHK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+\par
+{
+Reimplemented from {\b penify_hook.base_analyzer.BaseAnalyzer} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par
+Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v _amend_commit\:penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook\:_amend_commit}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commit_analyzer.CommitDocGenHook._amend_commit ( {\i self}){\f2 [private]}}}
+\par
+{\bkmkstart AAAAAAAAIZ}
+{\bkmkend AAAAAAAAIZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Amends the last commit message in the repository.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_summary\:penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook\:get_summary}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ dict penify_hook.commit_analyzer.CommitDocGenHook.get_summary ( {\i self}, str {\i instruction}, bool {\i generate_description})}}
+\par
+{\bkmkstart AAAAAAAAJA}
+{\bkmkend AAAAAAAAJA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generate a summary for the commit based on the staged changes.\par
+\par
+This function retrieves the differences of the staged changes in the repository\par
+and generates a commit summary using the provided instruction. If there are no\par
+changes staged for commit, an exception is raised. If a JIRA client is\par
+connected, it will attempt to extract issue keys from the current branch and\par
+use them to fetch context. The summary can be generated either with a Language\par
+Model (LLM) client or through the API client.\par
+\par
+Args:\par
+ instruction (str): A string containing instructions for generating the commit summary.\par
+ generate_description (bool): Whether to include detailed descriptions in the summary.\par
+\par
+Raises:\par
+ ValueError: If there are no changes staged for commit.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v process_jira_integration\:penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook\:process_jira_integration}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ tuple penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration ( {\i self}, str {\i title}, str {\i description}, str {\i msg})}}
+\par
+{\bkmkstart AAAAAAAAJB}
+{\bkmkend AAAAAAAAJB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Process JIRA integration by extracting issue keys from commit message\par
+components and branch name.\par
+\par
+This function looks for JIRA issue keys in the provided commit title,\par
+description, original user message, and the active branch name. It uses these\par
+keys to update the commit message with JIRA information and adds comments to\par
+the corresponding JIRA issues. If no keys are found, it logs a warning.\par
+\par
+Args:\par
+ title (str): The generated commit title.\par
+ description (str): The generated commit description.\par
+ msg (str): The original user message that might contain JIRA references.\par
+\par
+Returns:\par
+ tuple: A tuple containing the updated commit title and description with included JIRA\par
+ information.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v run\:penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook\:run}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.commit_analyzer.CommitDocGenHook.run ( {\i self}, Optional[str] {\i msg}, bool {\i edit_commit_message}, bool {\i generate_description})}}
+\par
+{\bkmkstart AAAAAAAAJC}
+{\bkmkend AAAAAAAAJC}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Run the post-commit hook.\par
+\par
+This method processes the modified files from the last commit, stages them, and\par
+creates an auto-commit with an optional message. It also handles JIRA\par
+integration if available. If there is an error generating the commit summary,\par
+an exception is raised.\par
+\par
+Args:\par
+ msg (Optional[str]): An optional message to include in the commit.\par
+ edit_commit_message (bool): A flag indicating whether to open the git commit\par
+ edit terminal after committing.\par
+ generate_description (bool): A flag indicating whether to include a description\par
+ in the commit message.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v llm_client\:penify_hook.commit_analyzer.CommitDocGenHook}
+{\xe \v penify_hook.commit_analyzer.CommitDocGenHook\:llm_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.commit_analyzer.CommitDocGenHook.llm_client}}
+\par
+{\bkmkstart AAAAAAAAJD}
+{\bkmkend AAAAAAAAJD}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b commit_analyzer.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+Exception Class Reference\par \pard\plain
+{\tc\tcl2 \v Exception}
+{\xe \v Exception}
+{\bkmkstart AAAAAAAAGR}
+{\bkmkend AAAAAAAAGR}
+Inheritance diagram for Exception:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classException__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for Exception:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classException__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b utils.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.file_analyzer.FileAnalyzerGenHook Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\xe \v penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\bkmkstart AAAAAAAAJM}
+{\bkmkend AAAAAAAAJM}
+Inheritance diagram for penify_hook.file_analyzer.FileAnalyzerGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for penify_hook.file_analyzer.FileAnalyzerGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b file_path}, {\b APIClient} {\b api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b process_file} (self, {\b file_path}, pbar, str new_param="")\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b print_processing} (self, {\b file_path})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b run} (self)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b file_path}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\xe \v penify_hook.file_analyzer.FileAnalyzerGenHook\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.file_analyzer.FileAnalyzerGenHook.__init__ ( {\i self}, str {\i file_path}, {\b APIClient} {\i api_client})}}
+\par
+{\bkmkstart AAAAAAAAHI}
+{\bkmkend AAAAAAAAHI}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+\par
+{
+Reimplemented from {\b penify_hook.base_analyzer.BaseAnalyzer} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v print_processing\:penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\xe \v penify_hook.file_analyzer.FileAnalyzerGenHook\:print_processing}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing ( {\i self}, {\i file_path})}}
+\par
+{\bkmkstart AAAAAAAAJN}
+{\bkmkend AAAAAAAAJN}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Prints a message indicating that a file is being processed.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v process_file\:penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\xe \v penify_hook.file_analyzer.FileAnalyzerGenHook\:process_file}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.file_analyzer.FileAnalyzerGenHook.process_file ( {\i self}, {\i file_path}, {\i pbar}, str {\i new_param} = {\f2 ""})}}
+\par
+{\bkmkstart AAAAAAAAJO}
+{\bkmkend AAAAAAAAJO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Processes a file by validating its extension, reading content,\par
+generating documentation, and writing changes back to the file. The function\par
+performs several stages of processing: 1. Validates the file's extension to\par
+ensure it is supported. 2. Reads the content of the file. 3. Sends the file\par
+content for documentation generation. 4. Writes the generated documentation\par
+back to the file if there are changes.\par
+\par
+Args:\par
+ file_path (str): The path of the file to be processed.\par
+ pbar (tqdm.tqdm): A progress bar object to update the status of processing stages.\par
+ new_param (str?): An additional parameter for future use. Defaults to an empty string.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v run\:penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\xe \v penify_hook.file_analyzer.FileAnalyzerGenHook\:run}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.file_analyzer.FileAnalyzerGenHook.run ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAJP}
+{\bkmkend AAAAAAAAJP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Runs the documentation process with a progress bar.\par
+\par
+This method orchestrates the documentation process by creating a progress bar,\par
+processing the file, and handling exceptions to ensure the progress bar\par
+completes properly. It updates the progress bar through various stages and\par
+provides feedback based on the result of the file processing.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v file_path\:penify_hook.file_analyzer.FileAnalyzerGenHook}
+{\xe \v penify_hook.file_analyzer.FileAnalyzerGenHook\:file_path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.file_analyzer.FileAnalyzerGenHook.file_path}}
+\par
+{\bkmkstart AAAAAAAAJQ}
+{\bkmkend AAAAAAAAJQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b file_analyzer.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.folder_analyzer.FolderAnalyzerGenHook Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.folder_analyzer.FolderAnalyzerGenHook}
+{\xe \v penify_hook.folder_analyzer.FolderAnalyzerGenHook}
+{\bkmkstart AAAAAAAAJS}
+{\bkmkend AAAAAAAAJS}
+Inheritance diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b dir_path}, {\b APIClient} {\b api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b list_all_files_in_dir} (self, str {\b dir_path})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b run} (self)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b dir_path}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.folder_analyzer.FolderAnalyzerGenHook}
+{\xe \v penify_hook.folder_analyzer.FolderAnalyzerGenHook\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__ ( {\i self}, str {\i dir_path}, {\b APIClient} {\i api_client})}}
+\par
+{\bkmkstart AAAAAAAAHH}
+{\bkmkend AAAAAAAAHH}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+\par
+{
+Reimplemented from {\b penify_hook.base_analyzer.BaseAnalyzer} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v list_all_files_in_dir\:penify_hook.folder_analyzer.FolderAnalyzerGenHook}
+{\xe \v penify_hook.folder_analyzer.FolderAnalyzerGenHook\:list_all_files_in_dir}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir ( {\i self}, str {\i dir_path})}}
+\par
+{\bkmkstart AAAAAAAAJT}
+{\bkmkend AAAAAAAAJT}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid List all non-hidden files in a directory and its subdirectories.\par
+\par
+This function recursively traverses the specified directory and its\par
+subdirectories, collecting paths of all non-hidden files. It filters out hidden\par
+directories and files (those starting with a dot) to ensure only visible files\par
+are returned.\par
+\par
+Args:\par
+ dir_path (str): The path to the directory whose files and subdirectory files need to be listed.\par
+}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v run\:penify_hook.folder_analyzer.FolderAnalyzerGenHook}
+{\xe \v penify_hook.folder_analyzer.FolderAnalyzerGenHook\:run}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.folder_analyzer.FolderAnalyzerGenHook.run ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAJU}
+{\bkmkend AAAAAAAAJU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Run the post-commit hook and process files with a progress bar.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v dir_path\:penify_hook.folder_analyzer.FolderAnalyzerGenHook}
+{\xe \v penify_hook.folder_analyzer.FolderAnalyzerGenHook\:dir_path}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.folder_analyzer.FolderAnalyzerGenHook.dir_path}}
+\par
+{\bkmkstart AAAAAAAAJV}
+{\bkmkend AAAAAAAAJV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b folder_analyzer.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.git_analyzer.GitDocGenHook Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.git_analyzer.GitDocGenHook}
+{\xe \v penify_hook.git_analyzer.GitDocGenHook}
+{\bkmkstart AAAAAAAAJY}
+{\bkmkend AAAAAAAAJY}
+Inheritance diagram for penify_hook.git_analyzer.GitDocGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for penify_hook.git_analyzer.GitDocGenHook:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b repo_path}, {\b APIClient} {\b api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b get_modified_files_in_last_commit} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b get_modified_lines} (self, diff_text)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b process_file} (self, file_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b run} (self)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Additional Inherited Members\par
+\pard\plain
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.git_analyzer.GitDocGenHook}
+{\xe \v penify_hook.git_analyzer.GitDocGenHook\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.git_analyzer.GitDocGenHook.__init__ ( {\i self}, str {\i repo_path}, {\b APIClient} {\i api_client})}}
+\par
+{\bkmkstart AAAAAAAAHJ}
+{\bkmkend AAAAAAAAHJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+\par
+{
+Reimplemented from {\b penify_hook.base_analyzer.BaseAnalyzer} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par
+Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v get_modified_files_in_last_commit\:penify_hook.git_analyzer.GitDocGenHook}
+{\xe \v penify_hook.git_analyzer.GitDocGenHook\:get_modified_files_in_last_commit}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAJZ}
+{\bkmkend AAAAAAAAJZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Get the list of files modified in the last commit.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_modified_lines\:penify_hook.git_analyzer.GitDocGenHook}
+{\xe \v penify_hook.git_analyzer.GitDocGenHook\:get_modified_lines}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.git_analyzer.GitDocGenHook.get_modified_lines ( {\i self}, {\i diff_text})}}
+\par
+{\bkmkstart AAAAAAAAKA}
+{\bkmkend AAAAAAAAKA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Extract modified line numbers from a diff text.\par
+\par
+This function processes a diff text to identify and extract the line numbers\par
+that have been modified. It distinguishes between added and deleted lines and\par
+keeps track of the current line number as it parses through the diff. The\par
+function handles hunk headers and ensures that any deletions at the end of the\par
+file are also captured.\par
+\par
+Args:\par
+ diff_text (str): A string containing the diff text to be processed.\par
+}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v process_file\:penify_hook.git_analyzer.GitDocGenHook}
+{\xe \v penify_hook.git_analyzer.GitDocGenHook\:process_file}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.git_analyzer.GitDocGenHook.process_file ( {\i self}, {\i file_path})}}
+\par
+{\bkmkstart AAAAAAAAKB}
+{\bkmkend AAAAAAAAKB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Processes a file by checking its type, reading its content, and sending it to\par
+an API.\par
+\par
+This method constructs the absolute path of the specified file and verifies if\par
+the file has a valid extension. If the file type is supported, it reads the\par
+content of the file and retrieves the differences from the last commit in the\par
+repository. If changes are detected, it sends the file content along with the\par
+modified lines to an API for further processing. If the API response indicates\par
+no changes, the original file will not be overwritten.\par
+\par
+Args:\par
+ file_path (str): The relative path to the file to be processed.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v run\:penify_hook.git_analyzer.GitDocGenHook}
+{\xe \v penify_hook.git_analyzer.GitDocGenHook\:run}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.git_analyzer.GitDocGenHook.run ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAKC}
+{\bkmkend AAAAAAAAKC}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Run the post-commit hook.\par
+\par
+This method retrieves the list of modified files from the last commit and\par
+processes each file. It stages any files that have been modified during\par
+processing and creates an auto-commit if changes were made. A progress bar is\par
+displayed to indicate the processing status of each file. The method handles\par
+any exceptions that occur during file processing, printing an error message for\par
+each file that fails to process. If any modifications are made to the files, an\par
+auto-commit is created to save those changes.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b git_analyzer.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.utils.GitRepoNotFoundError Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.utils.GitRepoNotFoundError}
+{\xe \v penify_hook.utils.GitRepoNotFoundError}
+{\bkmkstart AAAAAAAAMN}
+{\bkmkend AAAAAAAAMN}
+Inheritance diagram for penify_hook.utils.GitRepoNotFoundError:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+Collaboration diagram for penify_hook.utils.GitRepoNotFoundError:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b utils.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.jira_client.JiraClient Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient}
+{\bkmkstart AAAAAAAAKF}
+{\bkmkend AAAAAAAAKF}
+Collaboration diagram for penify_hook.jira_client.JiraClient:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b jira_url}=None, str {\b jira_user}=None, str {\b jira_api_token}=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b is_connected} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+List[str] {\b extract_issue_keys_from_branch} (self, str branch_name)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+List[str] {\b extract_issue_keys} (self, str text)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Optional[Dict[str, Any]] {\b get_issue_details} (self, str issue_key)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b add_comment} (self, str issue_key, str comment)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b update_issue_status} (self, str issue_key, str transition_name)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+tuple {\b format_commit_message_with_jira_info} (self, str commit_title, str commit_description, List[str] issue_keys=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict[str, Any] {\b get_detailed_issue_context} (self, str issue_key)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict[str, Any] {\b get_commit_context_from_issues} (self, List[str] issue_keys)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+tuple {\b enhance_commit_message} (self, str title, str description, List[str] issue_keys)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b jira_url}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b jira_user}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b jira_api_token}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b jira_client}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Detailed Description\par
+\pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Client for interacting with JIRA API\par
+}
+ \par
+}}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.jira_client.JiraClient.__init__ ( {\i self}, str {\i jira_url} = {\f2 None}, str {\i jira_user} = {\f2 None}, str {\i jira_api_token} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAKG}
+{\bkmkend AAAAAAAAKG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Initialize the JIRA client.\par
+\par
+Args:\par
+ jira_url: Base URL for JIRA instance (e.g., "https://your-domain.atlassian.net")\par
+ jira_user: JIRA username or email\par
+ jira_api_token: JIRA API token\par
+}
+ \par
+}}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v add_comment\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:add_comment}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ bool penify_hook.jira_client.JiraClient.add_comment ( {\i self}, str {\i issue_key}, str {\i comment})}}
+\par
+{\bkmkstart AAAAAAAAKH}
+{\bkmkend AAAAAAAAKH}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Adds a comment to a JIRA issue.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v enhance_commit_message\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:enhance_commit_message}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ tuple penify_hook.jira_client.JiraClient.enhance_commit_message ( {\i self}, str {\i title}, str {\i description}, List[str] {\i issue_keys})}}
+\par
+{\bkmkstart AAAAAAAAKI}
+{\bkmkend AAAAAAAAKI}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Enhance a commit message with business and technical context from JIRA issues.\par
+\par
+This function first checks if the list of issue keys is empty or if there is no\par
+connection. If so, it returns the original title and description without\par
+modification. It then retrieves context information from the specified JIRA\par
+issues. If the primary issue is missing, it formats the commit message with\par
+basic JIRA info. The function enhances the commit title by prefixing it with\par
+the primary issue key if not already included. It appends a business context\par
+section to the description, including details like issue type, status,\par
+priority, sprint, acceptance criteria, and a condensed issue description. If\par
+comments are available, they are added as technical notes. Finally, related\par
+issues are listed.\par
+\par
+Args:\par
+ title (str): Original commit title.\par
+ description (str): Original commit description.\par
+ issue_keys (List[str]): List of JIRA issue keys to include in the enhanced commit message.\par
+\par
+Returns:\par
+ tuple: A tuple containing the enhanced commit title and description with added\par
+ context from JIRA issues.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v extract_issue_keys\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:extract_issue_keys}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ List[str] penify_hook.jira_client.JiraClient.extract_issue_keys ( {\i self}, str {\i text})}}
+\par
+{\bkmkstart AAAAAAAAKJ}
+{\bkmkend AAAAAAAAKJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Extract unique JIRA issue keys from the given text.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v extract_issue_keys_from_branch\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:extract_issue_keys_from_branch}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ List[str] penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch ( {\i self}, str {\i branch_name})}}
+\par
+{\bkmkstart AAAAAAAAKK}
+{\bkmkend AAAAAAAAKK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Extracts unique JIRA issue keys from a branch name.}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v format_commit_message_with_jira_info\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:format_commit_message_with_jira_info}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ tuple penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info ( {\i self}, str {\i commit_title}, str {\i commit_description}, List[str] {\i issue_keys} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAKL}
+{\bkmkend AAAAAAAAKL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Format commit message with JIRA issue information.\par
+\par
+This function updates the provided commit title and description by\par
+incorporating JIRA issue keys. If no issue keys are supplied, it extracts them\par
+from the commit title and description. It then formats the commit title to\par
+include the first issue key if not already present and appends detailed\par
+information about each issue to the commit description.\par
+\par
+Args:\par
+ commit_title (str): The original commit title.\par
+ commit_description (str): The original commit description.\par
+ issue_keys (List[str]?): A list of JIRA issue keys to include in the commit message. If not\par
+ provided, issue keys will be extracted from both the title and the description.\par
+\par
+Returns:\par
+ tuple: A tuple containing the updated commit title and description with JIRA\par
+ information included.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_commit_context_from_issues\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:get_commit_context_from_issues}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Dict[str, Any] penify_hook.jira_client.JiraClient.get_commit_context_from_issues ( {\i self}, List[str] {\i issue_keys})}}
+\par
+{\bkmkstart AAAAAAAAKM}
+{\bkmkend AAAAAAAAKM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Gather contextual information from JIRA issues to improve commit messages.\par
+\par
+This function processes a list of JIRA issue keys, retrieves detailed context\par
+for each issue, and aggregates it into a dictionary that can be used to enhance\par
+commit messages. It first retrieves the primary issue (the first key in the\par
+list) and then gathers basic details for any related issues. The resulting\par
+context includes information from both the primary and related issues, along\par
+with all issue keys.\par
+\par
+Args:\par
+ issue_keys: List of JIRA issue keys to gather information from\par
+\par
+Returns:\par
+ Dict containing business and technical context from the issues\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_detailed_issue_context\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:get_detailed_issue_context}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Dict[str, Any] penify_hook.jira_client.JiraClient.get_detailed_issue_context ( {\i self}, str {\i issue_key})}}
+\par
+{\bkmkstart AAAAAAAAKN}
+{\bkmkend AAAAAAAAKN}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Retrieve comprehensive details about a JIRA issue including context for better\par
+commit messages.\par
+\par
+This function fetches detailed information from a specified JIRA issue and\par
+constructs a dictionary containing various context fields such as the issue\par
+summary, description, type, status, priority, comments, URL, and additional\par
+custom fields like acceptance criteria and sprint information. It handles\par
+errors by logging appropriate warnings or errors.\par
+\par
+Args:\par
+ issue_key (str): The JIRA issue key (e.g., "PROJECT-123").\par
+\par
+Returns:\par
+ Dict[str, Any]: A dictionary containing business and technical context from the issue.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v get_issue_details\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:get_issue_details}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Optional[Dict[str, Any]] penify_hook.jira_client.JiraClient.get_issue_details ( {\i self}, str {\i issue_key})}}
+\par
+{\bkmkstart AAAAAAAAKO}
+{\bkmkend AAAAAAAAKO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Retrieve details of a JIRA issue based on its key.\par
+\par
+This function fetches detailed information about a specified JIRA issue using\par
+the provided issue key. It first checks if the JIRA client is connected; if\par
+not, it logs a warning and returns `None`. If connected, it attempts to\par
+retrieve the issue from the JIRA server. On success, it constructs and returns\par
+a dictionary containing various details such as the issue's key, summary,\par
+status, description, assignee, reporter, type, priority, and URL. Errors during\par
+this process are logged, and `None` is returned.\par
+\par
+Args:\par
+ issue_key (str): The JIRA issue key (e.g., "PROJECT-123").\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v is_connected\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:is_connected}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ bool penify_hook.jira_client.JiraClient.is_connected ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAKP}
+{\bkmkend AAAAAAAAKP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Check if the JIRA client is connected.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v update_issue_status\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:update_issue_status}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ bool penify_hook.jira_client.JiraClient.update_issue_status ( {\i self}, str {\i issue_key}, str {\i transition_name})}}
+\par
+{\bkmkstart AAAAAAAAKQ}
+{\bkmkend AAAAAAAAKQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Update the status of a JIRA issue.\par
+\par
+This method checks if the JIRA client is connected, retrieves available\par
+transitions for the given issue, finds the transition ID by name, and updates\par
+the issue's status accordingly. If any step fails or the specified transition\par
+is not found, appropriate logs are generated, and False is returned.\par
+\par
+Args:\par
+ issue_key (str): The key of the JIRA issue to be updated.\par
+ transition_name (str): The name of the desired transition.\par
+\par
+Returns:\par
+ bool: True if the status was successfully updated, False otherwise.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v jira_api_token\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:jira_api_token}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.jira_client.JiraClient.jira_api_token}}
+\par
+{\bkmkstart AAAAAAAAKR}
+{\bkmkend AAAAAAAAKR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v jira_client\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:jira_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.jira_client.JiraClient.jira_client}}
+\par
+{\bkmkstart AAAAAAAAKS}
+{\bkmkend AAAAAAAAKS}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v jira_url\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:jira_url}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.jira_client.JiraClient.jira_url}}
+\par
+{\bkmkstart AAAAAAAAKT}
+{\bkmkend AAAAAAAAKT}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v jira_user\:penify_hook.jira_client.JiraClient}
+{\xe \v penify_hook.jira_client.JiraClient\:jira_user}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.jira_client.JiraClient.jira_user}}
+\par
+{\bkmkstart AAAAAAAAKU}
+{\bkmkend AAAAAAAAKU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b jira_client.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+penify_hook.llm_client.LLMClient Class Reference\par \pard\plain
+{\tc\tcl2 \v penify_hook.llm_client.LLMClient}
+{\xe \v penify_hook.llm_client.LLMClient}
+{\bkmkstart AAAAAAAAKW}
+{\bkmkend AAAAAAAAKW}
+Collaboration diagram for penify_hook.llm_client.LLMClient:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b __init__} (self, str {\b model}=None, str api_base=None, str api_key=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b litellm} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict {\b generate_commit_summary} (self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b model}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Private Attributes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b _litellm}\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Detailed Description\par
+\pard\plain
+{
+\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Client for interacting with LLM models using LiteLLM.\par
+}
+ \par
+}}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Constructor & Destructor Documentation\par
+\pard\plain
+{\xe \v __init__\:penify_hook.llm_client.LLMClient}
+{\xe \v penify_hook.llm_client.LLMClient\:__init__}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.llm_client.LLMClient.__init__ ( {\i self}, str {\i model} = {\f2 None}, str {\i api_base} = {\f2 None}, str {\i api_key} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAKX}
+{\bkmkend AAAAAAAAKX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Initialize the LLM client.\par
+\par
+Args:\par
+ model: LLM model to use (e.g., "gpt-4", "ollama/llama2", etc.)\par
+ api_base: Base URL for API requests (e.g., "http://localhost:11434" for Ollama)\par
+ api_key: API key for the LLM service\par
+}
+ \par
+}}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v generate_commit_summary\:penify_hook.llm_client.LLMClient}
+{\xe \v penify_hook.llm_client.LLMClient\:generate_commit_summary}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+ Dict penify_hook.llm_client.LLMClient.generate_commit_summary ( {\i self}, str {\i diff}, str {\i message}, bool {\i generate_description}, Dict {\i repo_details}, Dict {\i jira_context} = {\f2 None})}}
+\par
+{\bkmkstart AAAAAAAAKY}
+{\bkmkend AAAAAAAAKY}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Generate a concise and descriptive commit summary based on Git diff, user\par
+instructions, repository details, and optional JIRA context.\par
+\par
+This function constructs a prompt for an LLM to produce a commit title and, if\par
+requested, a detailed description. The summary adheres to Semantic Commit\par
+Messages guidelines. If JIRA context is provided, it enriches the prompt with\par
+relevant issue information.\par
+\par
+Args:\par
+ diff (str): Git diff of changes.\par
+ message (str): User-provided commit message or instructions.\par
+ generate_description (bool): Flag indicating whether to include a detailed description in the summary.\par
+ repo_details (Dict): Details about the repository.\par
+ jira_context (Dict?): Optional JIRA issue context to enhance the summary.\par
+\par
+Returns:\par
+ Dict: A dictionary containing the title and description for the commit. If\par
+ `generate_description` is False, the 'description' key may be absent.\par
+\par
+Raises:\par
+ ValueError: If the LLM model is not configured.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v litellm\:penify_hook.llm_client.LLMClient}
+{\xe \v penify_hook.llm_client.LLMClient\:litellm}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def penify_hook.llm_client.LLMClient.litellm ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAAKZ}
+{\bkmkend AAAAAAAAKZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Returns the litellm module, loading it if necessary.}
+ \par
+}Here is the caller graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Data Documentation\par
+\pard\plain
+{\xe \v _litellm\:penify_hook.llm_client.LLMClient}
+{\xe \v penify_hook.llm_client.LLMClient\:_litellm}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.llm_client.LLMClient._litellm{\f2 [private]}}}
+\par
+{\bkmkstart AAAAAAAALA}
+{\bkmkend AAAAAAAALA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\xe \v model\:penify_hook.llm_client.LLMClient}
+{\xe \v penify_hook.llm_client.LLMClient\:model}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+penify_hook.llm_client.LLMClient.model}}
+\par
+{\bkmkstart AAAAAAAALB}
+{\bkmkend AAAAAAAALB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/{\b llm_client.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_commit_commands.TestCommitCommands Class Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands}
+{\bkmkstart AAAAAAAANF}
+{\bkmkend AAAAAAAANF}
+Collaboration diagram for tests.test_commit_commands.TestCommitCommands:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b mock_api_client} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b mock_llm_client} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b mock_jira_client} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b mock_commit_doc_gen} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b mock_git_folder_search} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b mock_print_functions} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_commit_code_with_llm_client} (self, mock_error, mock_warning, mock_info, {\b mock_git_folder_search}, mock_doc_gen, {\b mock_llm_client}, {\b mock_api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_commit_code_with_jira_client} (self, mock_error, mock_warning, mock_info, {\b mock_git_folder_search}, mock_doc_gen, {\b mock_jira_client}, {\b mock_llm_client}, {\b mock_api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_commit_code_with_jira_connection_failure} (self, mock_error, mock_warning, mock_info, {\b mock_git_folder_search}, mock_doc_gen, {\b mock_jira_client}, {\b mock_api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_commit_code_error_handling} (self, mock_print, mock_exit, {\b mock_git_folder_search}, mock_doc_gen, {\b mock_api_client})\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_setup_commit_parser} (self)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_handle_commit} (self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v mock_api_client\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:mock_api_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.mock_api_client ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANG}
+{\bkmkend AAAAAAAANG}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Mocks an instance of APIClient using unittest.mock.\par
+\par
+This function creates a mock object for APIClient and yields it along\par
+with the mocked instance. It is useful for testing purposes where real\par
+API calls should be avoided.\par
+\par
+Yields:\par
+ tuple: A tuple containing the mock of APIClient and the mocked instance of\par
+ APIClient.\par
+}
+ \par
+}}
+{\xe \v mock_commit_doc_gen\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:mock_commit_doc_gen}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.mock_commit_doc_gen ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANH}
+{\bkmkend AAAAAAAANH}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Mocks the CommitDocGenHook class and returns a MagicMock instance.\par
+\par
+This function uses the `patch` decorator from the `unittest.mock` module\par
+to create a mock of the `CommitDocGenHook` class. It then sets up this\par
+mock to return a new `MagicMock` instance when invoked. The function\par
+yields both the mock object and the mocked instance, allowing for easy\par
+testing of functions that rely on `CommitDocGenHook`.\par
+\par
+Returns:\par
+ tuple: A tuple containing two elements:\par
+ - mock (patch): The patch object used to mock the `CommitDocGenHook`\par
+ class.\par
+ - doc_gen_instance (MagicMock): The mocked instance of\par
+ `CommitDocGenHook`.\par
+}
+ \par
+}}
+{\xe \v mock_git_folder_search\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:mock_git_folder_search}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.mock_git_folder_search ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANI}
+{\bkmkend AAAAAAAANI}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Mock the `recursive_search_git_folder` function to return a predefined\par
+git folder path.\par
+\par
+This function uses the `patch` decorator from the `unittest.mock` module\par
+to intercept calls to `penify_hook.utils.recursive_search_git_folder`.\par
+When called, it will return '/mock/git/folder' instead of performing an\par
+actual search. This is useful for testing purposes where you need a\par
+consistent response without interacting with the file system.\par
+\par
+Yields:\par
+ MagicMock: A mock object that simulates the `recursive_search_git_folder` function.\par
+}
+ \par
+}}
+{\xe \v mock_jira_client\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:mock_jira_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.mock_jira_client ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANJ}
+{\bkmkend AAAAAAAANJ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Create a mock JIRA client for testing purposes.\par
+\par
+This function yields a tuple containing a mock JIRA client instance and\par
+its `is_connected` method. The mock client is configured to simulate an\par
+active connection. This is useful for unit tests that require\par
+interaction with a JIRA client without making actual network calls.\par
+\par
+Yields:\par
+ tuple: A tuple containing the mocked JIRA client instance and its\par
+ `is_connected` method.\par
+}
+ \par
+}}
+{\xe \v mock_llm_client\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:mock_llm_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.mock_llm_client ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANK}
+{\bkmkend AAAAAAAANK}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Mock an instance of LLMClient for testing purposes.\par
+\par
+This function yields a mock object representing an instance of\par
+LLMClient, which can be used to simulate interactions with a language\par
+model during testing. The mock is patched to replace the actual\par
+LLMClient class from the penify_hook module.\par
+\par
+Yields:\par
+ tuple: A tuple containing two elements:\par
+ - mock (MagicMock): The mock object for LLMClient.\par
+ - llm_client_instance (MagicMock): An instance of the mocked LLMClient.\par
+}
+ \par
+}}
+{\xe \v mock_print_functions\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:mock_print_functions}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.mock_print_functions ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANL}
+{\bkmkend AAAAAAAANL}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Mocks the print functions from `penify_hook.ui_utils` for testing\par
+purposes.\par
+\par
+This function uses Python's `unittest.mock.patch` to replace the actual\par
+print functions (`print`, `print_warning`, and `print_error`) with mock\par
+objects. These mock objects can be used in tests to capture calls made\par
+to these print functions without actually printing anything.\par
+\par
+Yields:\par
+ tuple: A tuple containing three mock objects corresponding to `print_info`,\par
+ `print_warning`,\par
+ and `print_error`.\par
+}
+ \par
+}}
+{\xe \v test_commit_code_error_handling\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:test_commit_code_error_handling}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling ( {\i self}, {\i mock_print}, {\i mock_exit}, {\i mock_git_folder_search}, {\i mock_doc_gen}, {\i mock_api_client})}}
+\par
+{\bkmkstart AAAAAAAANM}
+{\bkmkend AAAAAAAANM}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the error handling in the test_commit_code function.\par
+\par
+This function sets up mocks to simulate exceptions and test the error\par
+handling of the commit_code function. It verifies that the function\par
+correctly prints an error message and exits with a status code of 1 when\par
+an exception occurs during documentation generation.\par
+\par
+Args:\par
+ mock_print (MagicMock): Mock for the print function, used to verify error message output.\par
+ mock_exit (MagicMock): Mock for the sys.exit function, used to verify exit behavior.\par
+ mock_git_folder_search (MagicMock): Mock for the git_folder_search function, returning a mock Git folder\par
+ path.\par
+ mock_doc_gen (MagicMock): Mock for the doc_gen function, simulating an exception during\par
+ documentation generation.\par
+ mock_api_client (MagicMock): Mock for the API client class, not directly used but referenced in the\par
+ function signature.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_commit_code_with_jira_client\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:test_commit_code_with_jira_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client ( {\i self}, {\i mock_error}, {\i mock_warning}, {\i mock_info}, {\i mock_git_folder_search}, {\i mock_doc_gen}, {\i mock_jira_client}, {\i mock_llm_client}, {\i mock_api_client})}}
+\par
+{\bkmkstart AAAAAAAANN}
+{\bkmkend AAAAAAAANN}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test committing code using a JIRA client.\par
+\par
+This function tests the commit_code function with various parameters,\par
+including API and JIRA credentials. It sets up mock objects for\par
+dependencies such as the JIRA client, LLM client, and doc generator to\par
+simulate the behavior of the real classes. The function then calls\par
+commit_code and verifies that the JIRA client and doc generator are\par
+called with the correct parameters.\par
+\par
+Args:\par
+ mock_error (MagicMock): A MagicMock object for simulating error logging.\par
+ mock_warning (MagicMock): A MagicMock object for simulating warning logging.\par
+ mock_info (MagicMock): A MagicMock object for simulating info logging.\par
+ mock_git_folder_search (MagicMock): A MagicMock object for simulating the git folder search function.\par
+ mock_doc_gen (MagicMock): A MagicMock object for simulating the doc generator function.\par
+ mock_jira_client (MagicMock): A MagicMock object for simulating the JIRA client class.\par
+ mock_llm_client (MagicMock): A MagicMock object for simulating the LLM client class.\par
+ mock_api_client (MagicMock): A MagicMock object for simulating the API client class.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_commit_code_with_jira_connection_failure\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:test_commit_code_with_jira_connection_failure}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure ( {\i self}, {\i mock_error}, {\i mock_warning}, {\i mock_info}, {\i mock_git_folder_search}, {\i mock_doc_gen}, {\i mock_jira_client}, {\i mock_api_client})}}
+\par
+{\bkmkstart AAAAAAAANO}
+{\bkmkend AAAAAAAANO}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the commit_code function when JIRA connection fails.\par
+\par
+This function tests the scenario where the JIRA connection fails during\par
+a code commit. It sets up various mocks to simulate different components\par
+of the system and then calls the `commit_code` function with specific\par
+parameters. The function is expected to handle the JIRA connection\par
+failure gracefully by logging an appropriate warning.\par
+\par
+Args:\par
+ mock_error (MagicMock): Mock for error logging.\par
+ mock_warning (MagicMock): Mock for warning logging.\par
+ mock_info (MagicMock): Mock for info logging.\par
+ mock_git_folder_search (MagicMock): Mock for searching the Git folder.\par
+ mock_doc_gen (MagicMock): Mock for generating documentation.\par
+ mock_jira_client (MagicMock): Mock for creating a JIRA client.\par
+ mock_api_client (MagicMock): Mock for creating an API client.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_commit_code_with_llm_client\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:test_commit_code_with_llm_client}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client ( {\i self}, {\i mock_error}, {\i mock_warning}, {\i mock_info}, {\i mock_git_folder_search}, {\i mock_doc_gen}, {\i mock_llm_client}, {\i mock_api_client})}}
+\par
+{\bkmkstart AAAAAAAANP}
+{\bkmkend AAAAAAAANP}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test committing code using an LLM client.\par
+\par
+This function sets up mock objects for various components and then calls\par
+the `commit_code` function with specified parameters. It verifies that\par
+the correct mocks are created and called with the appropriate arguments.\par
+\par
+Args:\par
+ mock_error (MagicMock): Mock object for error handling.\par
+ mock_warning (MagicMock): Mock object for warning logging.\par
+ mock_info (MagicMock): Mock object for info logging.\par
+ mock_git_folder_search (MagicMock): Mock object to simulate git folder search.\par
+ mock_doc_gen (MagicMock): Mock object for document generation.\par
+ mock_llm_client (MagicMock): Mock object for LLM client interaction.\par
+ mock_api_client (MagicMock): Mock object for API client interaction.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_handle_commit\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:test_handle_commit}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.test_handle_commit ( {\i self}, {\i mock_print_info}, {\i mock_commit_code}, {\i mock_get_token}, {\i mock_get_llm_config}, {\i mock_get_jira_config})}}
+\par
+{\bkmkstart AAAAAAAANQ}
+{\bkmkend AAAAAAAANQ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the handle_commit function with various mock objects.\par
+\par
+This function sets up mocks for retrieving LLM configuration, JIRA\par
+configuration, and commit code. It then creates an argument object and\par
+calls the handle_commit function. Finally, it verifies that the mock\par
+functions were called with the expected arguments.\par
+\par
+Args:\par
+ mock_print_info (MagicMock): Mock object for printing information.\par
+ mock_commit_code (MagicMock): Mock object for committing code.\par
+ mock_get_token (MagicMock): Mock object for retrieving API token.\par
+ mock_get_llm_config (MagicMock): Mock object for retrieving LLM configuration.\par
+ mock_get_jira_config (MagicMock): Mock object for retrieving JIRA configuration.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_setup_commit_parser\:tests.test_commit_commands.TestCommitCommands}
+{\xe \v tests.test_commit_commands.TestCommitCommands\:test_setup_commit_parser}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser ( {\i self})}}
+\par
+{\bkmkstart AAAAAAAANR}
+{\bkmkend AAAAAAAANR}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Set up the argument parser for the commit command.\par
+\par
+This function configures an argument parser to handle various options\par
+for committing changes. It adds three arguments: - '-m' or '--message':\par
+An optional argument to specify a contextual commit message with a\par
+default value of "N/A". - '-e' or '--terminal': A boolean flag to open\par
+an edit terminal before committing. - '-d' or '--description': A boolean\par
+flag that, when set to False, indicates the generation of a commit\par
+message with title and description.\par
+\par
+Args:\par
+ parser (MagicMock): The argument parser to be configured.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_commit_commands.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_config_commands.TestConfigCommands Class Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands}
+{\bkmkstart AAAAAAAANT}
+{\bkmkend AAAAAAAANT}
+Collaboration diagram for tests.test_config_commands.TestConfigCommands:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_penify_config_existing_dir} (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_penify_config_new_dir} (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_llm_config_exists} (self, mock_file_open, mock_get_config)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_llm_config_empty} (self, mock_file_open, mock_get_config)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_llm_config_invalid_json} (self, mock_print, mock_file_open, mock_get_config)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_jira_config_exists} (self, mock_file_open, mock_get_config)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_save_llm_config_success} (self, mock_print, mock_json_dump, mock_file_open, mock_get_config)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_save_llm_config_failure} (self, mock_print, mock_file_open, mock_get_config)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_save_jira_config_success} (self, mock_print, mock_json_dump, mock_file_open, mock_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_token_from_env} (self, mock_file_open, mock_path, mock_getenv)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_token_from_config} (self, mock_file_open, mock_path, mock_getenv)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_get_token_not_found} (self, mock_file_open, mock_path, mock_getenv)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v test_get_jira_config_exists\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_jira_config_exists}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists ( {\i self}, {\i mock_file_open}, {\i mock_get_config})}}
+\par
+{\bkmkstart AAAAAAAANU}
+{\bkmkend AAAAAAAANU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test that get_jira_config returns the correct JIRA configuration when\par
+the configuration file exists.\par
+\par
+It sets up a mock for the configuration file to simulate its existence\par
+and verifies that the function reads from the correct file and returns\par
+the expected JIRA configuration dictionary. Additionally, it checks that\par
+the mock file open is called with the appropriate arguments.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A mock for the `open` function.\par
+ mock_get_config (MagicMock): A mock for the `get_config` function, which is expected to return a mock\par
+ configuration file object.\par
+\par
+Returns:\par
+ None: This test function does not explicitly return anything. Its assertions\par
+ serve as the verification of its correctness.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_llm_config_empty\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_llm_config_empty}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty ( {\i self}, {\i mock_file_open}, {\i mock_get_config})}}
+\par
+{\bkmkstart AAAAAAAANV}
+{\bkmkend AAAAAAAANV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the behavior of get_llm_config when called with an empty\par
+configuration file.\par
+\par
+This function sets up a mock configuration file that exists but returns\par
+no content. It then calls the `get_llm_config` function and asserts that\par
+it returns an empty dictionary and that the file open method was called\par
+exactly once with the correct arguments.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A MagicMock object simulating the built-in open function.\par
+ mock_get_config (MagicMock): A MagicMock object simulating the get_config function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_llm_config_exists\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_llm_config_exists}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists ( {\i self}, {\i mock_file_open}, {\i mock_get_config})}}
+\par
+{\bkmkstart AAAAAAAANW}
+{\bkmkend AAAAAAAANW}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the get_llm_config function when the configuration file exists.\par
+\par
+This function sets up a mock configuration file that exists and returns\par
+it when called. It then calls the get_llm_config function and asserts\par
+that it returns the correct configuration dictionary. Additionally, it\par
+checks that the mock_file_open function was called with the correct\par
+arguments.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A mock for the open() function.\par
+ mock_get_config (MagicMock): A mock for the get_config() function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_llm_config_invalid_json\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_llm_config_invalid_json}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json ( {\i self}, {\i mock_print}, {\i mock_file_open}, {\i mock_get_config})}}
+\par
+{\bkmkstart AAAAAAAANX}
+{\bkmkend AAAAAAAANX}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test function to verify the behavior of get_llm_config when reading an\par
+invalid JSON file.\par
+\par
+It sets up a mock configuration file that exists but contains invalid\par
+JSON. The function is expected to handle this gracefully by printing an\par
+error message and returning an empty dictionary.\par
+\par
+Args:\par
+ mock_print (MagicMock): Mock for the print function.\par
+ mock_file_open (MagicMock): Mock for the open function.\par
+ mock_get_config (MagicMock): Mock for the get_config function, which returns the mock configuration\par
+ file.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_penify_config_existing_dir\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_penify_config_existing_dir}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir ( {\i self}, {\i mock_file_open}, {\i mock_makedirs}, {\i mock_path}, {\i mock_git_folder})}}
+\par
+{\bkmkstart AAAAAAAANY}
+{\bkmkend AAAAAAAANY}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the get_penify_config function when the .penify config directory\par
+exists.\par
+\par
+It should not create a new directory and assert that all mocked\par
+functions were called correctly.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A MagicMock object simulating the open() function.\par
+ mock_makedirs (MagicMock): A MagicMock object simulating the os.makedirs() function.\par
+ mock_path (MagicMock): A MagicMock object simulating the Path class from pathlib module.\par
+ mock_git_folder (MagicMock): A MagicMock object simulating the git_folder_search() function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_penify_config_new_dir\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_penify_config_new_dir}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir ( {\i self}, {\i mock_file_open}, {\i mock_makedirs}, {\i mock_path}, {\i mock_git_folder})}}
+\par
+{\bkmkstart AAAAAAAANZ}
+{\bkmkend AAAAAAAANZ}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the behavior of get_penify_config when the .penify directory does\par
+not exist.\par
+\par
+This function mocks various system calls to simulate a scenario where\par
+the .penify directory is not present. It then asserts that the\par
+appropriate actions are taken to create the directory and write an empty\par
+JSON file.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A MagicMock object simulating the `open` function.\par
+ mock_makedirs (MagicMock): A MagicMock object simulating the `os.makedirs` function.\par
+ mock_path (MagicMock): A MagicMock object simulating the `Path` class from `pathlib`.\par
+ mock_git_folder (MagicMock): A MagicMock object simulating a git folder search function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_token_from_config\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_token_from_config}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_token_from_config ( {\i self}, {\i mock_file_open}, {\i mock_path}, {\i mock_getenv})}}
+\par
+{\bkmkstart AAAAAAAAOA}
+{\bkmkend AAAAAAAAOA}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test retrieving a token from the configuration.\par
+\par
+This function sets up mocks for environment variables and configuration\par
+files, calls the `get_token` function, and asserts its behavior. It\par
+verifies that when the environment variable is not found, the function\par
+reads a token from a configuration file located in the user's home\par
+directory.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A mock for the `open` function.\par
+ mock_path (MagicMock): A mock for the `pathlib.Path` class.\par
+ mock_getenv (MagicMock): A mock for the `os.getenv` function.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_token_from_env\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_token_from_env}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_token_from_env ( {\i self}, {\i mock_file_open}, {\i mock_path}, {\i mock_getenv})}}
+\par
+{\bkmkstart AAAAAAAAOB}
+{\bkmkend AAAAAAAAOB}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test retrieving a token from the environment variable.\par
+\par
+This function tests the behavior of `get_token` when an environment\par
+variable is set. It verifies that if the 'PENIFY_API_TOKEN' environment\par
+variable exists, the function returns its value without attempting to\par
+read a file.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): A MagicMock object for simulating file operations.\par
+ mock_path (MagicMock): A MagicMock object for simulating path operations.\par
+ mock_getenv (MagicMock): A MagicMock object for simulating environment variable retrieval.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_get_token_not_found\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_get_token_not_found}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_get_token_not_found ( {\i self}, {\i mock_file_open}, {\i mock_path}, {\i mock_getenv})}}
+\par
+{\bkmkstart AAAAAAAAOC}
+{\bkmkend AAAAAAAAOC}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the get_token function when the API token environment variable is\par
+not found.\par
+\par
+This function tests the scenario where the `PENIFY_API_TOKEN`\par
+environment variable is not set. It mocks the environment variable to\par
+return `None`, and verifies that the function returns `None`. The test\par
+also checks that the environment variable is accessed once and that a\par
+file open operation is attempted on a configuration file located in the\par
+user's home directory.\par
+\par
+Args:\par
+ mock_file_open (MagicMock): Mock for the built-in `open` function.\par
+ mock_path (MagicMock): Mock for the `pathlib.Path` module.\par
+ mock_getenv (MagicMock): Mock for the `os.getenv` function.\par
+\par
+Returns:\par
+ None: The function does not return anything; it asserts conditions to verify\par
+ correctness.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_save_jira_config_success\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_save_jira_config_success}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_save_jira_config_success ( {\i self}, {\i mock_print}, {\i mock_json_dump}, {\i mock_file_open}, {\i mock_path})}}
+\par
+{\bkmkstart AAAAAAAAOD}
+{\bkmkend AAAAAAAAOD}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the save_jira_config function to ensure it saves JIRA configuration\par
+successfully.\par
+\par
+This function sets up mocks for various dependencies and tests the\par
+functionality of saving a JIRA configuration. It asserts that the\par
+function returns `True`, the JSON dump is called with the correct\par
+configuration, and the print statement contains the expected message.\par
+\par
+Args:\par
+ mock_print (MagicMock): Mock for the print function.\par
+ mock_json_dump (MagicMock): Mock for the json.dump function.\par
+ mock_file_open (MagicMock): Mock for the open function.\par
+ mock_path (MagicMock): Mock for the path module.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_save_llm_config_failure\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_save_llm_config_failure}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure ( {\i self}, {\i mock_print}, {\i mock_file_open}, {\i mock_get_config})}}
+\par
+{\bkmkstart AAAAAAAAOE}
+{\bkmkend AAAAAAAAOE}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test function to verify that the save_llm_config function returns False\par
+and prints an error message when it fails to save the LLM configuration\par
+due to a permission error.\par
+\par
+It sets up a mock configuration file that exists and calls the\par
+save_llm_config function with valid parameters. The function is expected\par
+to return False and print "Error saving LLM configuration: Permission\par
+denied" in case of a failure.\par
+\par
+Args:\par
+ self (TestLLMConfig): An instance of the test class.\par
+ mock_print (MagicMock): A MagicMock object representing the print function, which will be used\par
+ to assert that it was called with the expected error message.\par
+ mock_file_open (MagicMock): A MagicMock object representing the open function, which is not used in\par
+ this test but is included as a parameter for completeness.\par
+ mock_get_config (MagicMock): A MagicMock object representing the get_config function, which will be\par
+ used to return the mock configuration file.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_save_llm_config_success\:tests.test_config_commands.TestConfigCommands}
+{\xe \v tests.test_config_commands.TestConfigCommands\:test_save_llm_config_success}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_config_commands.TestConfigCommands.test_save_llm_config_success ( {\i self}, {\i mock_print}, {\i mock_json_dump}, {\i mock_file_open}, {\i mock_get_config})}}
+\par
+{\bkmkstart AAAAAAAAOF}
+{\bkmkend AAAAAAAAOF}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the save_llm_config function successfully.\par
+\par
+This function tests that the save_llm_config function correctly saves an\par
+LLM configuration and handles various mock objects and side effects. It\par
+ensures that the function returns True upon successful execution, writes\par
+the expected configuration to a file, and prints a confirmation message.\par
+\par
+Args:\par
+ mock_print (MagicMock): A mock object for the print function.\par
+ mock_json_dump (MagicMock): A mock object for json.dump.\par
+ mock_file_open (MagicMock): A mock object for file opening.\par
+ mock_get_config (MagicMock): A mock object to return a configuration file mock.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_config_commands.py}\par
+}\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+tests.test_web_config.TestWebConfig Class Reference\par \pard\plain
+{\tc\tcl2 \v tests.test_web_config.TestWebConfig}
+{\xe \v tests.test_web_config.TestWebConfig}
+{\bkmkstart AAAAAAAAOT}
+{\bkmkend AAAAAAAAOT}
+Collaboration diagram for tests.test_web_config.TestWebConfig:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+\par
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Public Member Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_config_llm_web_server_setup} (self, mock_resource_filename, mock_server, mock_webbrowser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b test_config_jira_web_server_setup} (self, mock_resource_filename, mock_server, mock_webbrowser)\par
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Member Function Documentation\par
+\pard\plain
+{\xe \v test_config_jira_web_server_setup\:tests.test_web_config.TestWebConfig}
+{\xe \v tests.test_web_config.TestWebConfig\:test_config_jira_web_server_setup}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup ( {\i self}, {\i mock_resource_filename}, {\i mock_server}, {\i mock_webbrowser})}}
+\par
+{\bkmkstart AAAAAAAAOU}
+{\bkmkend AAAAAAAAOU}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Test the configuration and setup of a JIRA web server.\par
+\par
+This function tests the entire process of setting up a JIRA web server,\par
+including mocking necessary resources, configuring the server to shut\par
+down after handling one request, and verifying that the web browser is\par
+opened with the correct URL. The function uses several mocks to simulate\par
+external dependencies such as resource files, servers, and web browsers.\par
+\par
+Args:\par
+ mock_resource_filename (MagicMock): A MagicMock object for simulating the `resource_filename` function.\par
+ mock_server (MagicMock): A MagicMock object for simulating the server setup.\par
+ mock_webbrowser (MagicMock): A MagicMock object for simulating the web browser opening.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\xe \v test_config_llm_web_server_setup\:tests.test_web_config.TestWebConfig}
+{\xe \v tests.test_web_config.TestWebConfig\:test_config_llm_web_server_setup}
+\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
+{\b
+def tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup ( {\i self}, {\i mock_resource_filename}, {\i mock_server}, {\i mock_webbrowser})}}
+\par
+{\bkmkstart AAAAAAAAOV}
+{\bkmkend AAAAAAAAOV}
+{
+\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid
+{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid
+{
+\par
+\pard\plain \s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid Set up and test the web server configuration for an LLM (Large Language\par
+Model) web interface.\par
+\par
+This function configures a mock web server for testing purposes,\par
+including setting up resource filenames, mocking server behavior, and\par
+verifying that the web browser is opened and the server starts\par
+correctly. The function uses various mocks to simulate external\par
+dependencies such as `resource_filename` and `server`.\par
+\par
+Args:\par
+ mock_resource_filename (MagicMock): A MagicMock object simulating the `resource_filename` function.\par
+ mock_server (MagicMock): A MagicMock object simulating the context manager for the web server.\par
+ mock_webbrowser (MagicMock): A MagicMock object simulating the `webbrowser` module.\par
+}
+ \par
+}Here is the call graph for this function:{
+\pard\plain
+\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
+}
+}
+{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
+The documentation for this class was generated from the following file:{\par
+\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/{\b test_web_config.py}\par
+}
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+File Documentation{\tc \v File Documentation}
+\par \pard\plain
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md}
+{\bkmkstart AAAAAAAAAA}
+{\bkmkend AAAAAAAAAA}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md}
+{\bkmkstart AAAAAAAAAB}
+{\bkmkend AAAAAAAAAB}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md}
+{\bkmkstart AAAAAAAAAC}
+{\bkmkend AAAAAAAAAC}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md}
+{\bkmkstart AAAAAAAAAD}
+{\bkmkend AAAAAAAAAD}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md}
+{\bkmkstart AAAAAAAAAE}
+{\bkmkend AAAAAAAAAE}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md}
+{\bkmkstart AAAAAAAAAF}
+{\bkmkend AAAAAAAAAF}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py}
+{\bkmkstart AAAAAAAAAG}
+{\bkmkend AAAAAAAAAG}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.api_client.APIClient}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.api_client}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py}
+{\bkmkstart AAAAAAAAAH}
+{\bkmkend AAAAAAAAAH}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.base_analyzer.BaseAnalyzer}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.base_analyzer}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/__init__.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/__init__.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/__init__.py}
+{\bkmkstart AAAAAAAAAI}
+{\bkmkend AAAAAAAAAI}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/__init__.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/__init__.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/__init__.py}
+{\bkmkstart AAAAAAAAAJ}
+{\bkmkend AAAAAAAAAJ}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/__init__.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/__init__.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/__init__.py}
+{\bkmkstart AAAAAAAAAK}
+{\bkmkend AAAAAAAAAK}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/auth_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/auth_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/auth_commands.py}
+{\bkmkstart AAAAAAAAAL}
+{\bkmkend AAAAAAAAAL}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands.auth_commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.auth_commands.save_credentials} (api_key)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.auth_commands.login} (api_url, dashboard_url)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/commit_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/commit_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/commit_commands.py}
+{\bkmkstart AAAAAAAAAM}
+{\bkmkend AAAAAAAAAM}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands.commit_commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.commit_commands.commit_code} (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.commit_commands.setup_commit_parser} (parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.commit_commands.handle_commit} (args)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/config_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/config_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/config_commands.py}
+{\bkmkstart AAAAAAAAAN}
+{\bkmkend AAAAAAAAAN}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands.config_commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+None {\b penify_hook.commands.config_commands.load_env_files} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Path {\b penify_hook.commands.config_commands.get_penify_config} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Any {\b penify_hook.commands.config_commands.get_env_var_or_default} (str env_var, Any default=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.config_commands.save_llm_config} (model, api_base, api_key)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.config_commands.save_jira_config} (url, username, api_token)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict[str, str] {\b penify_hook.commands.config_commands.get_llm_config} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Dict[str, str] {\b penify_hook.commands.config_commands.get_jira_config} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.config_commands.config_llm_web} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.config_commands.config_jira_web} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+Optional[str] {\b penify_hook.commands.config_commands.get_token} ()\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b penify_hook.commands.config_commands.DOTENV_AVAILABLE} = True\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.commands.config_commands.path}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/doc_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/doc_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/doc_commands.py}
+{\bkmkstart AAAAAAAAAO}
+{\bkmkend AAAAAAAAAO}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands.doc_commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.doc_commands.generate_doc} (api_url, token, location=None)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.doc_commands.setup_docgen_parser} (parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.doc_commands.handle_docgen} (args)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.commands.doc_commands.docgen_description}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/hook_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/hook_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/hook_commands.py}
+{\bkmkstart AAAAAAAAAP}
+{\bkmkend AAAAAAAAAP}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commands.hook_commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.hook_commands.install_git_hook} (location, token)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.commands.hook_commands.uninstall_git_hook} (location)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.commands.hook_commands.HOOK_FILENAME} = "post-commit"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.commands.hook_commands.HOOK_TEMPLATE}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py}
+{\bkmkstart AAAAAAAAAQ}
+{\bkmkend AAAAAAAAAQ}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.commit_analyzer.CommitDocGenHook}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.commit_analyzer}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/config_command.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/config_command.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/config_command.py}
+{\bkmkstart AAAAAAAAAR}
+{\bkmkend AAAAAAAAAR}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.config_command}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.config_command.setup_config_parser} (parent_parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.config_command.handle_config} (args)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/constants.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/constants.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/constants.py}
+{\bkmkstart AAAAAAAAAS}
+{\bkmkend AAAAAAAAAS}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.constants}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.constants.API_URL} = 'http://localhost:8000/api'\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.constants.DASHBOARD_URL} = "https://dashboard.penify.dev/auth/localhost/login"\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py}
+{\bkmkstart AAAAAAAAAT}
+{\bkmkend AAAAAAAAAT}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.file_analyzer.FileAnalyzerGenHook}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.file_analyzer}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.file_analyzer.logger} = logging.getLogger(__name__)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py}
+{\bkmkstart AAAAAAAAAU}
+{\bkmkend AAAAAAAAAU}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.folder_analyzer.FolderAnalyzerGenHook}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.folder_analyzer}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py}
+{\bkmkstart AAAAAAAAAV}
+{\bkmkend AAAAAAAAAV}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.git_analyzer.GitDocGenHook}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.git_analyzer}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.git_analyzer.logger} = logging.getLogger(__name__)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py}
+{\bkmkstart AAAAAAAAAW}
+{\bkmkend AAAAAAAAAW}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.jira_client.JiraClient}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.jira_client}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+bool {\b penify_hook.jira_client.JIRA_AVAILABLE} = True\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py}
+{\bkmkstart AAAAAAAAAX}
+{\bkmkend AAAAAAAAAX}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.llm_client.LLMClient}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.llm_client}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/login_command.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/login_command.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/login_command.py}
+{\bkmkstart AAAAAAAAAY}
+{\bkmkend AAAAAAAAAY}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.login_command}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.login_command.setup_login_parser} (parser)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.login_command.handle_login} (args)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/main.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/main.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/main.py}
+{\bkmkstart AAAAAAAAAZ}
+{\bkmkend AAAAAAAAAZ}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.main}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.main.main} ()\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/ui_utils.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/ui_utils.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/ui_utils.py}
+{\bkmkstart AAAAAAAABA}
+{\bkmkend AAAAAAAABA}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.ui_utils}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.format_info} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.format_success} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.format_warning} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.format_error} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.format_highlight} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.format_file_path} (file_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.print_info} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.print_success} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.print_warning} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.print_error} (message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.print_processing} (file_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.print_status} (status, message)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.create_progress_bar} (total, desc="Processing", unit="item")\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.create_stage_progress_bar} (stages, desc="Processing")\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.ui_utils.update_stage} (pbar, stage_name)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.autoreset}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.INFO_COLOR} = Fore.CYAN\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.SUCCESS_COLOR} = Fore.GREEN\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.WARNING_COLOR} = Fore.YELLOW\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.ERROR_COLOR} = Fore.RED\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.HIGHLIGHT_COLOR} = Fore.BLUE\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.ui_utils.NEUTRAL_COLOR} = Fore.WHITE\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.ui_utils.SUCCESS_SYMBOL} = "\'E2\'9C\'93"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.ui_utils.WARNING_SYMBOL} = "\'E2\'97\'8B"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.ui_utils.ERROR_SYMBOL} = "\'E2\'9C\'97"\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+string {\b penify_hook.ui_utils.PROCESSING_SYMBOL} = "\'E2\'9F\'B3"\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py}
+{\bkmkstart AAAAAAAABB}
+{\bkmkend AAAAAAAABB}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b penify_hook.utils.GitRepoNotFoundError}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b penify_hook.utils}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.utils.get_repo_details} (Repo repo)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.utils.recursive_search_git_folder} (folder_path)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b penify_hook.utils.find_git_parent} (path)\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b penify_hook.utils.logger} = logging.getLogger(__name__)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md}
+{\bkmkstart AAAAAAAABC}
+{\bkmkend AAAAAAAABC}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/setup.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/setup.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/setup.py}
+{\bkmkstart AAAAAAAABD}
+{\bkmkend AAAAAAAABD}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b setup}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Variables\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.name}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.version}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.packages}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.install_requires}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.entry_points}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.author}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.author_email}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.description}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.long_description}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.long_description_content_type}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.url}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.classifiers}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+{\b setup.python_requires}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/conftest.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/conftest.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/conftest.py}
+{\bkmkstart AAAAAAAABE}
+{\bkmkend AAAAAAAABE}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests.conftest}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py}
+{\bkmkstart AAAAAAAABF}
+{\bkmkend AAAAAAAABF}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b tests.test_commit_commands.TestCommitCommands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests.test_commit_commands}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py}
+{\bkmkstart AAAAAAAABG}
+{\bkmkend AAAAAAAABG}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b tests.test_config_commands.TestConfigCommands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests.test_config_commands}\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_doc_commands.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_doc_commands.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_doc_commands.py}
+{\bkmkstart AAAAAAAABH}
+{\bkmkend AAAAAAAABH}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests.test_doc_commands}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Functions\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_generate_doc_no_location} (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_generate_doc_file_location} (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_generate_doc_folder_location} (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_generate_doc_error_handling} (mock_api_client, mock_git_analyzer, mock_exit)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_setup_docgen_parser} ()\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_handle_docgen_install_hook} (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_handle_docgen_uninstall_hook} (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_handle_docgen_generate} (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_handle_docgen_no_token} (mock_exit, mock_get_token)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_generate_doc_with_file_exception} (mock_api_client, mock_getcwd)\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+def {\b tests.test_doc_commands.test_generate_doc_with_folder_exception} (mock_api_client, mock_getcwd)\par
+}
+\par \pard\plain
+
+\pard\plain \sect\sbkpage
+\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py File Reference\par \pard\plain
+{\tc\tcl2 \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py}
+{\xe \v /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py}
+{\bkmkstart AAAAAAAABI}
+{\bkmkend AAAAAAAABI}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Classes\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+class {\b tests.test_web_config.TestWebConfig}\par
+}
+\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid
+Namespaces\par
+\pard\plain
+
+{
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests}\par
+\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid
+namespace {\b tests.test_web_config}\par
+}
+
+\pard\plain \sect\sbkpage
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid
+\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Index\par
+\pard\plain
+{\tc \v Index}
+{\field\fldedit {\*\fldinst INDEX \\c2 \\*MERGEFORMAT}{\fldrslt INDEX}}
+}