From b8905c4934c76b0314a3cab42b9540788a072eff Mon Sep 17 00:00:00 2001 From: "penify-dev[bot]" <146478655+penify-dev[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 09:44:37 +0000 Subject: [PATCH] Add architecture documentation --- docs/html/README_8md.html | 144 + docs/html/annotated.html | 174 ++ docs/html/annotated_dup.js | 44 + docs/html/api__client_8py.html | 160 + docs/html/api__client_8py.js | 4 + docs/html/auth__commands_8py.html | 164 + docs/html/auth__commands_8py.js | 5 + docs/html/base__analyzer_8py.html | 160 + docs/html/base__analyzer_8py.js | 4 + docs/html/bc_s.png | Bin 0 -> 676 bytes docs/html/bc_sd.png | Bin 0 -> 635 bytes docs/html/classException.html | 157 + docs/html/classException__coll__graph.map | 3 + docs/html/classException__coll__graph.md5 | 1 + docs/html/classException__coll__graph.svg | 52 + docs/html/classException__coll__graph_org.svg | 26 + docs/html/classException__inherit__graph.map | 5 + docs/html/classException__inherit__graph.md5 | 1 + docs/html/classException__inherit__graph.svg | 76 + .../classException__inherit__graph_org.svg | 50 + docs/html/classes.html | 173 ++ ...k_1_1api__client_1_1APIClient-members.html | 155 + ...ify__hook_1_1api__client_1_1APIClient.html | 436 +++ ...enify__hook_1_1api__client_1_1APIClient.js | 12 + ...1api__client_1_1APIClient__coll__graph.map | 3 + ...1api__client_1_1APIClient__coll__graph.md5 | 1 + ...1api__client_1_1APIClient__coll__graph.svg | 72 + ...__client_1_1APIClient__coll__graph_org.svg | 46 + ...7bc97b2af31662029a24169f285c286_cgraph.map | 5 + ...7bc97b2af31662029a24169f285c286_cgraph.md5 | 1 + ...7bc97b2af31662029a24169f285c286_cgraph.svg | 67 + ...7b2af31662029a24169f285c286_cgraph_org.svg | 41 + ...c2fac38629fed60e8440203a1197dd_icgraph.map | 5 + ...c2fac38629fed60e8440203a1197dd_icgraph.md5 | 1 + ...c2fac38629fed60e8440203a1197dd_icgraph.svg | 67 + ...c38629fed60e8440203a1197dd_icgraph_org.svg | 41 + ...ase__analyzer_1_1BaseAnalyzer-members.html | 154 + ...ook_1_1base__analyzer_1_1BaseAnalyzer.html | 310 ++ ..._hook_1_1base__analyzer_1_1BaseAnalyzer.js | 11 + ..._analyzer_1_1BaseAnalyzer__coll__graph.map | 3 + ..._analyzer_1_1BaseAnalyzer__coll__graph.md5 | 1 + ..._analyzer_1_1BaseAnalyzer__coll__graph.svg | 68 + ...lyzer_1_1BaseAnalyzer__coll__graph_org.svg | 42 + ...alyzer_1_1BaseAnalyzer__inherit__graph.map | 11 + ...alyzer_1_1BaseAnalyzer__inherit__graph.md5 | 1 + ...alyzer_1_1BaseAnalyzer__inherit__graph.svg | 260 ++ ...er_1_1BaseAnalyzer__inherit__graph_org.svg | 177 ++ ..._analyzer_1_1CommitDocGenHook-members.html | 160 + ...1commit__analyzer_1_1CommitDocGenHook.html | 458 +++ ...1_1commit__analyzer_1_1CommitDocGenHook.js | 10 + ...lyzer_1_1CommitDocGenHook__coll__graph.map | 7 + ...lyzer_1_1CommitDocGenHook__coll__graph.md5 | 1 + ...lyzer_1_1CommitDocGenHook__coll__graph.svg | 218 ++ ...r_1_1CommitDocGenHook__coll__graph_org.svg | 135 + ...er_1_1CommitDocGenHook__inherit__graph.map | 5 + ...er_1_1CommitDocGenHook__inherit__graph.md5 | 1 + ...er_1_1CommitDocGenHook__inherit__graph.svg | 105 + ..._1CommitDocGenHook__inherit__graph_org.svg | 79 + ...1812b68bf904e3beb051e585eff111_icgraph.map | 5 + ...1812b68bf904e3beb051e585eff111_icgraph.md5 | 1 + ...1812b68bf904e3beb051e585eff111_icgraph.svg | 68 + ...b68bf904e3beb051e585eff111_icgraph_org.svg | 42 + ...fa29d890af3f3770743197e15776778_cgraph.map | 4 + ...fa29d890af3f3770743197e15776778_cgraph.md5 | 1 + ...fa29d890af3f3770743197e15776778_cgraph.svg | 58 + ...d890af3f3770743197e15776778_cgraph_org.svg | 32 + ...a29d890af3f3770743197e15776778_icgraph.map | 4 + ...a29d890af3f3770743197e15776778_icgraph.md5 | 1 + ...a29d890af3f3770743197e15776778_icgraph.svg | 58 + ...890af3f3770743197e15776778_icgraph_org.svg | 32 + ...d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map | 9 + ...d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 | 1 + ...d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg | 108 + ...9eba04614915fa33a1d7b0b8f03_cgraph_org.svg | 82 + ...96194276441fa2eb2fa014eaab9a37_icgraph.map | 5 + ...96194276441fa2eb2fa014eaab9a37_icgraph.md5 | 1 + ...96194276441fa2eb2fa014eaab9a37_icgraph.svg | 68 + ...4276441fa2eb2fa014eaab9a37_icgraph_org.svg | 42 + ...a13cc121d96342476ccf72b63a007f_icgraph.map | 5 + ...a13cc121d96342476ccf72b63a007f_icgraph.md5 | 1 + ...a13cc121d96342476ccf72b63a007f_icgraph.svg | 68 + ...c121d96342476ccf72b63a007f_icgraph_org.svg | 42 + ...alyzer_1_1FileAnalyzerGenHook-members.html | 158 + ...file__analyzer_1_1FileAnalyzerGenHook.html | 334 ++ ..._1file__analyzer_1_1FileAnalyzerGenHook.js | 8 + ...er_1_1FileAnalyzerGenHook__coll__graph.map | 5 + ...er_1_1FileAnalyzerGenHook__coll__graph.md5 | 1 + ...er_1_1FileAnalyzerGenHook__coll__graph.svg | 101 + ..._1FileAnalyzerGenHook__coll__graph_org.svg | 75 + ...1_1FileAnalyzerGenHook__inherit__graph.map | 5 + ...1_1FileAnalyzerGenHook__inherit__graph.md5 | 1 + ...1_1FileAnalyzerGenHook__inherit__graph.svg | 101 + ...ileAnalyzerGenHook__inherit__graph_org.svg | 75 + ...03c97b07cb2db1df0d881094dd6bb49_cgraph.map | 5 + ...03c97b07cb2db1df0d881094dd6bb49_cgraph.md5 | 1 + ...03c97b07cb2db1df0d881094dd6bb49_cgraph.svg | 67 + ...7b07cb2db1df0d881094dd6bb49_cgraph_org.svg | 41 + ...3be324ba517855d6e5cdb684a6efda_icgraph.map | 7 + ...3be324ba517855d6e5cdb684a6efda_icgraph.md5 | 1 + ...3be324ba517855d6e5cdb684a6efda_icgraph.svg | 86 + ...24ba517855d6e5cdb684a6efda_icgraph_org.svg | 60 + ...yzer_1_1FolderAnalyzerGenHook-members.html | 157 + ...er__analyzer_1_1FolderAnalyzerGenHook.html | 294 ++ ...lder__analyzer_1_1FolderAnalyzerGenHook.js | 7 + ..._1_1FolderAnalyzerGenHook__coll__graph.map | 5 + ..._1_1FolderAnalyzerGenHook__coll__graph.md5 | 1 + ..._1_1FolderAnalyzerGenHook__coll__graph.svg | 99 + ...FolderAnalyzerGenHook__coll__graph_org.svg | 73 + ...1FolderAnalyzerGenHook__inherit__graph.map | 5 + ...1FolderAnalyzerGenHook__inherit__graph.md5 | 1 + ...1FolderAnalyzerGenHook__inherit__graph.svg | 99 + ...derAnalyzerGenHook__inherit__graph_org.svg | 73 + ...0554646cbc07aef1fbaa748ee4c0fc_icgraph.map | 5 + ...0554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 | 1 + ...0554646cbc07aef1fbaa748ee4c0fc_icgraph.svg | 69 + ...646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg | 43 + ...3c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map | 5 + ...3c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 | 1 + ...3c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg | 69 + ...ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg | 43 + ...it__analyzer_1_1GitDocGenHook-members.html | 158 + ...ook_1_1git__analyzer_1_1GitDocGenHook.html | 355 +++ ..._hook_1_1git__analyzer_1_1GitDocGenHook.js | 8 + ...analyzer_1_1GitDocGenHook__coll__graph.map | 5 + ...analyzer_1_1GitDocGenHook__coll__graph.md5 | 1 + ...analyzer_1_1GitDocGenHook__coll__graph.svg | 102 + ...yzer_1_1GitDocGenHook__coll__graph_org.svg | 76 + ...lyzer_1_1GitDocGenHook__inherit__graph.map | 5 + ...lyzer_1_1GitDocGenHook__inherit__graph.md5 | 1 + ...lyzer_1_1GitDocGenHook__inherit__graph.svg | 102 + ...r_1_1GitDocGenHook__inherit__graph_org.svg | 76 + ...cec06966a3a5ef1df21529a6a3db81_icgraph.map | 5 + ...cec06966a3a5ef1df21529a6a3db81_icgraph.md5 | 1 + ...cec06966a3a5ef1df21529a6a3db81_icgraph.svg | 67 + ...6966a3a5ef1df21529a6a3db81_icgraph_org.svg | 41 + ...8fe1e50fc9448d995851d933283b633_cgraph.map | 9 + ...8fe1e50fc9448d995851d933283b633_cgraph.md5 | 1 + ...8fe1e50fc9448d995851d933283b633_cgraph.svg | 106 + ...e50fc9448d995851d933283b633_cgraph_org.svg | 80 + ...f94663c0330ae7e6cbb7a8748177c24_cgraph.map | 4 + ...f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 | 1 + ...f94663c0330ae7e6cbb7a8748177c24_cgraph.svg | 57 + ...63c0330ae7e6cbb7a8748177c24_cgraph_org.svg | 31 + ...94663c0330ae7e6cbb7a8748177c24_icgraph.map | 4 + ...94663c0330ae7e6cbb7a8748177c24_icgraph.md5 | 1 + ...94663c0330ae7e6cbb7a8748177c24_icgraph.svg | 57 + ...3c0330ae7e6cbb7a8748177c24_icgraph_org.svg | 31 + ...70449b5dc058808eb13013db3d8eab_icgraph.map | 5 + ...70449b5dc058808eb13013db3d8eab_icgraph.md5 | 1 + ...70449b5dc058808eb13013db3d8eab_icgraph.svg | 68 + ...9b5dc058808eb13013db3d8eab_icgraph_org.svg | 42 + ...1_1jira__client_1_1JiraClient-members.html | 161 + ...y__hook_1_1jira__client_1_1JiraClient.html | 688 +++++ ...ify__hook_1_1jira__client_1_1JiraClient.js | 18 + ...ira__client_1_1JiraClient__coll__graph.map | 3 + ...ira__client_1_1JiraClient__coll__graph.md5 | 1 + ...ira__client_1_1JiraClient__coll__graph.svg | 86 + ..._client_1_1JiraClient__coll__graph_org.svg | 60 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.map | 23 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.md5 | 1 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.svg | 297 ++ ...ae006313a21576362d26ac5ec8_icgraph_org.svg | 214 ++ ...9ea1149758f7f5212149d357b13cc23_cgraph.map | 10 + ...9ea1149758f7f5212149d357b13cc23_cgraph.md5 | 1 + ...9ea1149758f7f5212149d357b13cc23_cgraph.svg | 172 ++ ...149758f7f5212149d357b13cc23_cgraph_org.svg | 89 + ...ea1149758f7f5212149d357b13cc23_icgraph.map | 5 + ...ea1149758f7f5212149d357b13cc23_icgraph.md5 | 1 + ...ea1149758f7f5212149d357b13cc23_icgraph.svg | 69 + ...49758f7f5212149d357b13cc23_icgraph_org.svg | 43 + ...5f6924819084b7c8d268956a784804a_cgraph.map | 5 + ...5f6924819084b7c8d268956a784804a_cgraph.md5 | 1 + ...5f6924819084b7c8d268956a784804a_cgraph.svg | 67 + ...24819084b7c8d268956a784804a_cgraph_org.svg | 41 + ...f6924819084b7c8d268956a784804a_icgraph.map | 10 + ...f6924819084b7c8d268956a784804a_icgraph.md5 | 1 + ...f6924819084b7c8d268956a784804a_icgraph.svg | 174 ++ ...4819084b7c8d268956a784804a_icgraph_org.svg | 91 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.map | 20 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 | 1 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.svg | 268 ++ ...5a6432aa6f238da0ff65d49a760_cgraph_org.svg | 185 ++ ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map | 6 + ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 | 1 + ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg | 76 + ...4116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg | 50 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.map | 4 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 | 1 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg | 57 + ...116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg | 31 + ...967169a4b7970c67c0947b9ac56f746_cgraph.map | 5 + ...967169a4b7970c67c0947b9ac56f746_cgraph.md5 | 1 + ...967169a4b7970c67c0947b9ac56f746_cgraph.svg | 68 + ...69a4b7970c67c0947b9ac56f746_cgraph_org.svg | 42 + ...67169a4b7970c67c0947b9ac56f746_icgraph.map | 7 + ...67169a4b7970c67c0947b9ac56f746_icgraph.md5 | 1 + ...67169a4b7970c67c0947b9ac56f746_icgraph.svg | 89 + ...9a4b7970c67c0947b9ac56f746_icgraph_org.svg | 63 + ...a8837552d37bfd611de23441a240826_cgraph.map | 5 + ...a8837552d37bfd611de23441a240826_cgraph.md5 | 1 + ...a8837552d37bfd611de23441a240826_cgraph.svg | 68 + ...7552d37bfd611de23441a240826_cgraph_org.svg | 42 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.map | 7 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.md5 | 1 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.svg | 145 + ...d1d3baaedd38039913c3a97fd7_icgraph_org.svg | 62 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.map | 11 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 | 1 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg | 125 + ...e6f13c30b1265d439ddf04bf2cd_cgraph_org.svg | 99 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.map | 5 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 | 1 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg | 69 + ...6f13c30b1265d439ddf04bf2cd_icgraph_org.svg | 43 + ...k_1_1llm__client_1_1LLMClient-members.html | 151 + ...ify__hook_1_1llm__client_1_1LLMClient.html | 344 +++ ...enify__hook_1_1llm__client_1_1LLMClient.js | 8 + ...1llm__client_1_1LLMClient__coll__graph.map | 3 + ...1llm__client_1_1LLMClient__coll__graph.md5 | 1 + ...1llm__client_1_1LLMClient__coll__graph.svg | 61 + ...__client_1_1LLMClient__coll__graph_org.svg | 35 + ...ad3014dac466ee1d8e00306d0cf2000_cgraph.map | 5 + ...ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 | 1 + ...ad3014dac466ee1d8e00306d0cf2000_cgraph.svg | 66 + ...14dac466ee1d8e00306d0cf2000_cgraph_org.svg | 40 + ...46fddc43ecd633d2c358d58dd4df24_icgraph.map | 5 + ...46fddc43ecd633d2c358d58dd4df24_icgraph.md5 | 1 + ...46fddc43ecd633d2c358d58dd4df24_icgraph.svg | 66 + ...dc43ecd633d2c358d58dd4df24_icgraph_org.svg | 40 + ...hook_1_1utils_1_1GitRepoNotFoundError.html | 157 + ...s_1_1GitRepoNotFoundError__coll__graph.map | 5 + ...s_1_1GitRepoNotFoundError__coll__graph.md5 | 1 + ...s_1_1GitRepoNotFoundError__coll__graph.svg | 76 + ...1GitRepoNotFoundError__coll__graph_org.svg | 50 + ..._1GitRepoNotFoundError__inherit__graph.map | 5 + ..._1GitRepoNotFoundError__inherit__graph.md5 | 1 + ..._1GitRepoNotFoundError__inherit__graph.svg | 76 + ...tRepoNotFoundError__inherit__graph_org.svg | 50 + ...ommands_1_1TestCommitCommands-members.html | 158 + ...ommit__commands_1_1TestCommitCommands.html | 699 +++++ ..._commit__commands_1_1TestCommitCommands.js | 15 + ...nds_1_1TestCommitCommands__coll__graph.map | 3 + ...nds_1_1TestCommitCommands__coll__graph.md5 | 1 + ...nds_1_1TestCommitCommands__coll__graph.svg | 80 + ...1_1TestCommitCommands__coll__graph_org.svg | 54 + ...ommands_1_1TestConfigCommands-members.html | 158 + ...onfig__commands_1_1TestConfigCommands.html | 718 +++++ ..._config__commands_1_1TestConfigCommands.js | 15 + ...nds_1_1TestConfigCommands__coll__graph.map | 3 + ...nds_1_1TestConfigCommands__coll__graph.md5 | 1 + ...nds_1_1TestConfigCommands__coll__graph.svg | 88 + ...1_1TestConfigCommands__coll__graph_org.svg | 62 + ..._web__config_1_1TestWebConfig-members.html | 148 + ...1_1test__web__config_1_1TestWebConfig.html | 251 ++ ...s_1_1test__web__config_1_1TestWebConfig.js | 5 + ...__config_1_1TestWebConfig__coll__graph.map | 3 + ...__config_1_1TestWebConfig__coll__graph.md5 | 1 + ...__config_1_1TestWebConfig__coll__graph.svg | 58 + ...nfig_1_1TestWebConfig__coll__graph_org.svg | 32 + docs/html/clipboard.js | 61 + docs/html/closed.png | Bin 0 -> 132 bytes docs/html/commit-commands_8md.html | 144 + docs/html/commit__analyzer_8py.html | 160 + docs/html/commit__analyzer_8py.js | 4 + docs/html/commit__commands_8py.html | 166 + docs/html/commit__commands_8py.js | 6 + docs/html/config-commands_8md.html | 144 + docs/html/config__command_8py.html | 162 + docs/html/config__command_8py.js | 5 + docs/html/config__commands_8py.html | 188 ++ docs/html/config__commands_8py.js | 15 + docs/html/conftest_8py.html | 154 + docs/html/constants_8py.html | 162 + docs/html/constants_8py.js | 5 + docs/html/cookie.js | 58 + docs/html/detailed-usage_8md.html | 144 + .../dir_063e2d5fe58a131099a7fe4200cca78c.html | 165 + .../dir_063e2d5fe58a131099a7fe4200cca78c.js | 9 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.map | 4 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.md5 | 1 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.svg | 55 + ...3e2d5fe58a131099a7fe4200cca78c_dep_org.svg | 29 + .../dir_1648a057408aae8db85b8e3797335623.html | 149 + ...r_1648a057408aae8db85b8e3797335623_dep.map | 4 + ...r_1648a057408aae8db85b8e3797335623_dep.md5 | 1 + ...r_1648a057408aae8db85b8e3797335623_dep.svg | 55 + ...48a057408aae8db85b8e3797335623_dep_org.svg | 29 + .../dir_624fa2a8bce97f0444ac5cca335d4e23.html | 165 + .../dir_624fa2a8bce97f0444ac5cca335d4e23.js | 9 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.map | 4 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 | 1 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.svg | 55 + ...4fa2a8bce97f0444ac5cca335d4e23_dep_org.svg | 29 + .../dir_b3b22d2ab7966b65f6b237e3231b41be.html | 274 ++ .../dir_b3b22d2ab7966b65f6b237e3231b41be.js | 7 + .../dir_f88c3381c1861b3f7ca1f3d63cf244b5.html | 188 ++ .../dir_f88c3381c1861b3f7ca1f3d63cf244b5.js | 19 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map | 5 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 | 1 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg | 67 + ...8c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg | 41 + docs/html/doc.svg | 12 + docs/html/doc__commands_8md.html | 144 + docs/html/doc__commands_8py.html | 172 ++ docs/html/doc__commands_8py.js | 7 + docs/html/docd.svg | 12 + docs/html/doxygen-awesome-darkmode-toggle.js | 157 + .../doxygen-awesome-fragment-copy-button.js | 85 + docs/html/doxygen-awesome-interactive-toc.js | 81 + docs/html/doxygen-awesome-paragraph-link.js | 51 + ...n-awesome-sidebar-only-darkmode-toggle.css | 40 + docs/html/doxygen-awesome-sidebar-only.css | 116 + docs/html/doxygen-awesome-tabs.js | 90 + docs/html/doxygen-awesome.css | 2675 +++++++++++++++++ docs/html/doxygen.css | 1849 ++++++++++++ docs/html/doxygen.svg | 28 + docs/html/doxygen_crawl.html | 447 +++ docs/html/dynsections.js | 198 ++ docs/html/example-workflows_8md.html | 144 + docs/html/file__analyzer_8py.html | 166 + docs/html/file__analyzer_8py.js | 5 + docs/html/files.html | 180 ++ docs/html/files_dup.js | 4 + docs/html/folder__analyzer_8py.html | 160 + docs/html/folder__analyzer_8py.js | 4 + docs/html/folderclosed.svg | 11 + docs/html/folderclosedd.svg | 11 + docs/html/folderopen.svg | 17 + docs/html/folderopend.svg | 12 + docs/html/functions.html | 275 ++ docs/html/functions_func.html | 244 ++ docs/html/functions_vars.html | 161 + docs/html/git__analyzer_8py.html | 166 + docs/html/git__analyzer_8py.js | 5 + docs/html/graph_legend.html | 203 ++ docs/html/graph_legend.md5 | 1 + docs/html/graph_legend.svg | 167 + docs/html/hierarchy.html | 162 + docs/html/hierarchy.js | 18 + docs/html/hook__commands_8py.html | 172 ++ docs/html/hook__commands_8py.js | 7 + docs/html/index.html | 144 + docs/html/inherit_graph_0.map | 5 + docs/html/inherit_graph_0.md5 | 1 + docs/html/inherit_graph_0.svg | 40 + docs/html/inherit_graph_1.map | 3 + docs/html/inherit_graph_1.md5 | 1 + docs/html/inherit_graph_1.svg | 21 + docs/html/inherit_graph_2.map | 11 + docs/html/inherit_graph_2.md5 | 1 + docs/html/inherit_graph_2.svg | 98 + docs/html/inherit_graph_3.map | 3 + docs/html/inherit_graph_3.md5 | 1 + docs/html/inherit_graph_3.svg | 22 + docs/html/inherit_graph_4.map | 3 + docs/html/inherit_graph_4.md5 | 1 + docs/html/inherit_graph_4.svg | 21 + docs/html/inherit_graph_5.map | 3 + docs/html/inherit_graph_5.md5 | 1 + docs/html/inherit_graph_5.svg | 22 + docs/html/inherit_graph_6.map | 3 + docs/html/inherit_graph_6.md5 | 1 + docs/html/inherit_graph_6.svg | 22 + docs/html/inherit_graph_7.map | 3 + docs/html/inherit_graph_7.md5 | 1 + docs/html/inherit_graph_7.svg | 22 + docs/html/inherits.html | 155 + docs/html/jira__client_8py.html | 166 + docs/html/jira__client_8py.js | 5 + docs/html/jquery.js | 204 ++ docs/html/llm__client_8py.html | 160 + docs/html/llm__client_8py.js | 4 + docs/html/login__command_8py.html | 162 + docs/html/login__command_8py.js | 5 + docs/html/main_8py.html | 160 + docs/html/main_8py.js | 4 + ...ai_2penify-cli_2docs_2commit-commands.html | 270 ++ ...ai_2penify-cli_2docs_2config-commands.html | 301 ++ ...-ai_2penify-cli_2docs_2detailed-usage.html | 295 ++ ...X-ai_2penify-cli_2docs_2doc__commands.html | 378 +++ ..._2penify-cli_2docs_2example-workflows.html | 254 ++ ...y-cli_2docs_2penify-cli-documentation.html | 291 ++ docs/html/menu.js | 134 + docs/html/menudata.js | 117 + docs/html/minus.svg | 8 + docs/html/minusd.svg | 8 + docs/html/namespacemembers.html | 303 ++ docs/html/namespacemembers_func.html | 242 ++ docs/html/namespacemembers_vars.html | 229 ++ docs/html/namespacepenify__hook.html | 180 ++ docs/html/namespacepenify__hook.js | 56 + .../namespacepenify__hook_1_1api__client.html | 152 + .../namespacepenify__hook_1_1api__client.js | 4 + ...mespacepenify__hook_1_1base__analyzer.html | 152 + ...namespacepenify__hook_1_1base__analyzer.js | 4 + .../namespacepenify__hook_1_1commands.html | 160 + .../html/namespacepenify__hook_1_1commands.js | 38 + ...y__hook_1_1commands_1_1auth__commands.html | 221 ++ ...eb69ebcc475060011476a65cbffd7f6_cgraph.map | 5 + ...eb69ebcc475060011476a65cbffd7f6_cgraph.md5 | 1 + ...eb69ebcc475060011476a65cbffd7f6_cgraph.svg | 67 + ...ebcc475060011476a65cbffd7f6_cgraph_org.svg | 41 + ...a2119363481a0001ad6190329c863b_icgraph.map | 5 + ...a2119363481a0001ad6190329c863b_icgraph.md5 | 1 + ...a2119363481a0001ad6190329c863b_icgraph.svg | 67 + ...9363481a0001ad6190329c863b_icgraph_org.svg | 41 + ..._hook_1_1commands_1_1commit__commands.html | 287 ++ ...60ebdd6821c714f9db99f8d447c1b6_icgraph.map | 5 + ...60ebdd6821c714f9db99f8d447c1b6_icgraph.md5 | 1 + ...60ebdd6821c714f9db99f8d447c1b6_icgraph.svg | 67 + ...dd6821c714f9db99f8d447c1b6_icgraph_org.svg | 41 + ...a856c3961f5f8914e58485644572076_cgraph.map | 5 + ...a856c3961f5f8914e58485644572076_cgraph.md5 | 1 + ...a856c3961f5f8914e58485644572076_cgraph.svg | 67 + ...c3961f5f8914e58485644572076_cgraph_org.svg | 41 + ..._hook_1_1commands_1_1config__commands.html | 500 +++ ...59710e44183890121dc3013cb6f374_icgraph.map | 5 + ...59710e44183890121dc3013cb6f374_icgraph.md5 | 1 + ...59710e44183890121dc3013cb6f374_icgraph.svg | 67 + ...0e44183890121dc3013cb6f374_icgraph_org.svg | 41 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map | 8 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 | 1 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg | 96 + ...685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg | 70 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map | 5 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 | 1 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg | 67 + ...85c4dcb5c15ba6a4055e484cf2_icgraph_org.svg | 41 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.map | 11 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 | 1 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg | 182 ++ ...062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg | 99 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.map | 10 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.md5 | 1 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.svg | 115 + ...51c905e2f1b299b12d2a73bd812_cgraph_org.svg | 89 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map | 8 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 | 1 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg | 96 + ...c8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg | 70 + ...59a82d0bf727703d550d1003d3ed20_icgraph.map | 5 + ...59a82d0bf727703d550d1003d3ed20_icgraph.md5 | 1 + ...59a82d0bf727703d550d1003d3ed20_icgraph.svg | 67 + ...2d0bf727703d550d1003d3ed20_icgraph_org.svg | 41 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.map | 4 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.md5 | 1 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.svg | 57 + ...7132ce0bc0aacef951cf1dee2ae_cgraph_org.svg | 31 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.map | 12 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.md5 | 1 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.svg | 190 ++ ...132ce0bc0aacef951cf1dee2ae_icgraph_org.svg | 107 + ...64a80de6cfdbed6d5d2fe582902bf13_cgraph.map | 12 + ...64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 | 1 + ...64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg | 191 ++ ...0de6cfdbed6d5d2fe582902bf13_cgraph_org.svg | 108 + ...fy__hook_1_1commands_1_1doc__commands.html | 269 ++ ...b2cb8c0446d85dc4e7d34b3929dad7_icgraph.map | 5 + ...b2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 | 1 + ...b2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg | 67 + ...8c0446d85dc4e7d34b3929dad7_icgraph_org.svg | 41 + ...1d631e51b0533b7d8dc780eea52e1cc_cgraph.map | 5 + ...1d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 | 1 + ...1d631e51b0533b7d8dc780eea52e1cc_cgraph.svg | 67 + ...1e51b0533b7d8dc780eea52e1cc_cgraph_org.svg | 41 + ...y__hook_1_1commands_1_1hook__commands.html | 236 ++ ...spacepenify__hook_1_1commit__analyzer.html | 152 + ...mespacepenify__hook_1_1commit__analyzer.js | 4 + ...espacepenify__hook_1_1config__command.html | 199 ++ .../namespacepenify__hook_1_1constants.html | 183 ++ ...mespacepenify__hook_1_1file__analyzer.html | 173 ++ ...namespacepenify__hook_1_1file__analyzer.js | 5 + ...spacepenify__hook_1_1folder__analyzer.html | 152 + ...mespacepenify__hook_1_1folder__analyzer.js | 4 + ...amespacepenify__hook_1_1git__analyzer.html | 173 ++ .../namespacepenify__hook_1_1git__analyzer.js | 5 + ...namespacepenify__hook_1_1jira__client.html | 173 ++ .../namespacepenify__hook_1_1jira__client.js | 5 + .../namespacepenify__hook_1_1llm__client.html | 152 + .../namespacepenify__hook_1_1llm__client.js | 4 + ...mespacepenify__hook_1_1login__command.html | 190 ++ docs/html/namespacepenify__hook_1_1main.html | 188 ++ ...45db84b8309d570226b2e147e18b5eb_cgraph.map | 4 + ...45db84b8309d570226b2e147e18b5eb_cgraph.md5 | 1 + ...45db84b8309d570226b2e147e18b5eb_cgraph.svg | 56 + ...84b8309d570226b2e147e18b5eb_cgraph_org.svg | 30 + ...5db84b8309d570226b2e147e18b5eb_icgraph.map | 4 + ...5db84b8309d570226b2e147e18b5eb_icgraph.md5 | 1 + ...5db84b8309d570226b2e147e18b5eb_icgraph.svg | 56 + ...4b8309d570226b2e147e18b5eb_icgraph_org.svg | 30 + .../namespacepenify__hook_1_1ui__utils.html | 703 +++++ ...5b79a7837fd654ad8f0cdb4e6e87598_cgraph.map | 5 + ...5b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 | 1 + ...5b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg | 67 + ...a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg | 41 + ...cee29e999fa3c812725cb98f24aae4c_cgraph.map | 5 + ...cee29e999fa3c812725cb98f24aae4c_cgraph.md5 | 1 + ...cee29e999fa3c812725cb98f24aae4c_cgraph.svg | 65 + ...9e999fa3c812725cb98f24aae4c_cgraph_org.svg | 39 + ...ca95113c53214d848659a52a099f5e_icgraph.map | 5 + ...ca95113c53214d848659a52a099f5e_icgraph.md5 | 1 + ...ca95113c53214d848659a52a099f5e_icgraph.svg | 67 + ...113c53214d848659a52a099f5e_icgraph_org.svg | 41 + ...83e3b1ec7b75f08653a9f6cfb897405_cgraph.map | 5 + ...83e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 | 1 + ...83e3b1ec7b75f08653a9f6cfb897405_cgraph.svg | 66 + ...b1ec7b75f08653a9f6cfb897405_cgraph_org.svg | 40 + ...3f112b02d36b74c88a3ce3ed1458b45_cgraph.map | 5 + ...3f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 | 1 + ...3f112b02d36b74c88a3ce3ed1458b45_cgraph.svg | 67 + ...2b02d36b74c88a3ce3ed1458b45_cgraph_org.svg | 41 + ...190fd240641e2c83f6a047490e7797_icgraph.map | 5 + ...190fd240641e2c83f6a047490e7797_icgraph.md5 | 1 + ...190fd240641e2c83f6a047490e7797_icgraph.svg | 67 + ...d240641e2c83f6a047490e7797_icgraph_org.svg | 41 + ...bff909b9e155a344597f69a0530754b_cgraph.map | 5 + ...bff909b9e155a344597f69a0530754b_cgraph.md5 | 1 + ...bff909b9e155a344597f69a0530754b_cgraph.svg | 67 + ...09b9e155a344597f69a0530754b_cgraph_org.svg | 41 + ...e53cca2e23a993884797e523337e41_icgraph.map | 5 + ...e53cca2e23a993884797e523337e41_icgraph.md5 | 1 + ...e53cca2e23a993884797e523337e41_icgraph.svg | 67 + ...ca2e23a993884797e523337e41_icgraph_org.svg | 41 + ...c6826668b45c778d864f5ae741e1b2_icgraph.map | 9 + ...c6826668b45c778d864f5ae741e1b2_icgraph.md5 | 1 + ...c6826668b45c778d864f5ae741e1b2_icgraph.svg | 103 + ...6668b45c778d864f5ae741e1b2_icgraph_org.svg | 77 + ...e4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map | 5 + ...e4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 | 1 + ...e4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg | 66 + ...3a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg | 40 + ...e226ee36d43076ed54dade970dc0ca_icgraph.map | 5 + ...e226ee36d43076ed54dade970dc0ca_icgraph.md5 | 1 + ...e226ee36d43076ed54dade970dc0ca_icgraph.svg | 67 + ...ee36d43076ed54dade970dc0ca_icgraph_org.svg | 41 + ...4f7cab36c3b1f09507654b119d45bfb_cgraph.map | 5 + ...4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 | 1 + ...4f7cab36c3b1f09507654b119d45bfb_cgraph.svg | 67 + ...ab36c3b1f09507654b119d45bfb_cgraph_org.svg | 41 + docs/html/namespacepenify__hook_1_1utils.html | 262 ++ docs/html/namespacepenify__hook_1_1utils.js | 8 + ...d723ca510c90ac0390819dcae3a800a_cgraph.map | 4 + ...d723ca510c90ac0390819dcae3a800a_cgraph.md5 | 1 + ...d723ca510c90ac0390819dcae3a800a_cgraph.svg | 57 + ...ca510c90ac0390819dcae3a800a_cgraph_org.svg | 31 + ...723ca510c90ac0390819dcae3a800a_icgraph.map | 4 + ...723ca510c90ac0390819dcae3a800a_icgraph.md5 | 1 + ...723ca510c90ac0390819dcae3a800a_icgraph.svg | 57 + ...a510c90ac0390819dcae3a800a_icgraph_org.svg | 31 + docs/html/namespaces.html | 175 ++ docs/html/namespaces_dup.js | 20 + docs/html/namespacesetup.html | 359 +++ docs/html/namespacetests.html | 160 + docs/html/namespacetests.js | 20 + docs/html/namespacetests_1_1conftest.html | 144 + ...espacetests_1_1test__commit__commands.html | 152 + ...amespacetests_1_1test__commit__commands.js | 4 + ...espacetests_1_1test__config__commands.html | 152 + ...amespacetests_1_1test__config__commands.js | 4 + ...namespacetests_1_1test__doc__commands.html | 608 ++++ .../namespacetests_1_1test__web__config.html | 152 + .../namespacetests_1_1test__web__config.js | 4 + docs/html/nav_f.png | Bin 0 -> 153 bytes docs/html/nav_fd.png | Bin 0 -> 169 bytes docs/html/nav_g.png | Bin 0 -> 95 bytes docs/html/nav_h.png | Bin 0 -> 98 bytes docs/html/nav_hd.png | Bin 0 -> 114 bytes docs/html/navtree.css | 149 + docs/html/navtree.js | 483 +++ docs/html/navtreedata.js | 254 ++ docs/html/navtreeindex0.js | 253 ++ docs/html/navtreeindex1.js | 253 ++ docs/html/navtreeindex2.js | 13 + docs/html/open.png | Bin 0 -> 123 bytes docs/html/pages.html | 153 + docs/html/penify-cli-documentation_8md.html | 144 + docs/html/penify__hook_2____init_____8py.html | 152 + ...ify__hook_2commands_2____init_____8py.html | 154 + docs/html/plus.svg | 9 + docs/html/plusd.svg | 9 + docs/html/resize.js | 147 + docs/html/search/all_0.js | 4 + docs/html/search/all_1.js | 4 + docs/html/search/all_10.js | 35 + docs/html/search/all_11.js | 21 + docs/html/search/all_12.js | 7 + docs/html/search/all_13.js | 12 + docs/html/search/all_14.js | 49 + docs/html/search/all_15.js | 23 + docs/html/search/all_16.js | 34 + docs/html/search/all_17.js | 66 + docs/html/search/all_18.js | 19 + docs/html/search/all_19.js | 7 + docs/html/search/all_1a.js | 20 + docs/html/search/all_2.js | 4 + docs/html/search/all_3.js | 4 + docs/html/search/all_4.js | 4 + docs/html/search/all_5.js | 7 + docs/html/search/all_6.js | 35 + docs/html/search/all_7.js | 12 + docs/html/search/all_8.js | 71 + docs/html/search/all_9.js | 31 + docs/html/search/all_a.js | 21 + docs/html/search/all_b.js | 31 + docs/html/search/all_c.js | 42 + docs/html/search/all_d.js | 33 + docs/html/search/all_e.js | 18 + docs/html/search/all_f.js | 14 + docs/html/search/classes_0.js | 4 + docs/html/search/classes_1.js | 4 + docs/html/search/classes_2.js | 4 + docs/html/search/classes_3.js | 4 + docs/html/search/classes_4.js | 5 + docs/html/search/classes_5.js | 5 + docs/html/search/classes_6.js | 4 + docs/html/search/classes_7.js | 4 + docs/html/search/classes_8.js | 6 + docs/html/search/close.svg | 18 + docs/html/search/files_0.js | 4 + docs/html/search/files_1.js | 5 + docs/html/search/files_10.js | 5 + docs/html/search/files_2.js | 4 + docs/html/search/files_3.js | 11 + docs/html/search/files_4.js | 6 + docs/html/search/files_5.js | 4 + docs/html/search/files_6.js | 5 + docs/html/search/files_7.js | 4 + docs/html/search/files_8.js | 4 + docs/html/search/files_9.js | 4 + docs/html/search/files_a.js | 5 + docs/html/search/files_b.js | 4 + docs/html/search/files_c.js | 4 + docs/html/search/files_d.js | 4 + docs/html/search/files_e.js | 4 + docs/html/search/files_f.js | 7 + docs/html/search/functions_0.js | 5 + docs/html/search/functions_1.js | 4 + docs/html/search/functions_2.js | 8 + docs/html/search/functions_3.js | 6 + docs/html/search/functions_4.js | 11 + docs/html/search/functions_5.js | 20 + docs/html/search/functions_6.js | 7 + docs/html/search/functions_7.js | 5 + docs/html/search/functions_8.js | 7 + docs/html/search/functions_9.js | 10 + docs/html/search/functions_a.js | 11 + docs/html/search/functions_b.js | 5 + docs/html/search/functions_c.js | 11 + docs/html/search/functions_d.js | 34 + docs/html/search/functions_e.js | 6 + docs/html/search/mag.svg | 24 + docs/html/search/mag_d.svg | 24 + docs/html/search/mag_sel.svg | 31 + docs/html/search/mag_seld.svg | 31 + docs/html/search/namespaces_0.js | 24 + docs/html/search/namespaces_1.js | 4 + docs/html/search/namespaces_2.js | 9 + docs/html/search/pages_0.js | 12 + docs/html/search/pages_1.js | 6 + docs/html/search/pages_2.js | 4 + docs/html/search/pages_3.js | 5 + docs/html/search/pages_4.js | 9 + docs/html/search/pages_5.js | 4 + docs/html/search/pages_6.js | 4 + docs/html/search/search.css | 291 ++ docs/html/search/search.js | 694 +++++ docs/html/search/searchdata.js | 33 + docs/html/search/variables_0.js | 4 + docs/html/search/variables_1.js | 10 + docs/html/search/variables_10.js | 4 + docs/html/search/variables_11.js | 4 + docs/html/search/variables_12.js | 5 + docs/html/search/variables_2.js | 4 + docs/html/search/variables_3.js | 4 + docs/html/search/variables_4.js | 8 + docs/html/search/variables_5.js | 6 + docs/html/search/variables_6.js | 5 + docs/html/search/variables_7.js | 6 + docs/html/search/variables_8.js | 5 + docs/html/search/variables_9.js | 8 + docs/html/search/variables_a.js | 7 + docs/html/search/variables_b.js | 4 + docs/html/search/variables_c.js | 5 + docs/html/search/variables_d.js | 7 + docs/html/search/variables_e.js | 7 + docs/html/search/variables_f.js | 6 + docs/html/setup_8py.html | 182 ++ docs/html/setup_8py.js | 16 + docs/html/splitbar.png | Bin 0 -> 314 bytes docs/html/splitbard.png | Bin 0 -> 282 bytes docs/html/svg.min.js | 46 + docs/html/sync_off.png | Bin 0 -> 853 bytes docs/html/sync_on.png | Bin 0 -> 845 bytes docs/html/tab_a.png | Bin 0 -> 142 bytes docs/html/tab_ad.png | Bin 0 -> 135 bytes docs/html/tab_b.png | Bin 0 -> 169 bytes docs/html/tab_bd.png | Bin 0 -> 173 bytes docs/html/tab_h.png | Bin 0 -> 177 bytes docs/html/tab_hd.png | Bin 0 -> 180 bytes docs/html/tab_s.png | Bin 0 -> 184 bytes docs/html/tab_sd.png | Bin 0 -> 188 bytes docs/html/tabs.css | 1 + docs/html/test__commit__commands_8py.html | 160 + docs/html/test__commit__commands_8py.js | 4 + docs/html/test__config__commands_8py.html | 160 + docs/html/test__config__commands_8py.js | 4 + docs/html/test__doc__commands_8py.html | 180 ++ docs/html/test__doc__commands_8py.js | 14 + docs/html/test__web__config_8py.html | 160 + docs/html/test__web__config_8py.js | 4 + docs/html/tests_2____init_____8py.html | 152 + docs/html/toggle-alternative-theme.js | 11 + docs/html/ui__utils_8py.html | 214 ++ docs/html/ui__utils_8py.js | 29 + docs/html/utils_8py.html | 176 ++ docs/html/utils_8py.js | 8 + docs/penify-cli-SingularityX-ai-g.tar.gz | Bin 0 -> 440857 bytes 717 files changed, 49783 insertions(+) create mode 100644 docs/html/README_8md.html create mode 100644 docs/html/annotated.html create mode 100644 docs/html/annotated_dup.js create mode 100644 docs/html/api__client_8py.html create mode 100644 docs/html/api__client_8py.js create mode 100644 docs/html/auth__commands_8py.html create mode 100644 docs/html/auth__commands_8py.js create mode 100644 docs/html/base__analyzer_8py.html create mode 100644 docs/html/base__analyzer_8py.js create mode 100644 docs/html/bc_s.png create mode 100644 docs/html/bc_sd.png create mode 100644 docs/html/classException.html create mode 100644 docs/html/classException__coll__graph.map create mode 100644 docs/html/classException__coll__graph.md5 create mode 100644 docs/html/classException__coll__graph.svg create mode 100644 docs/html/classException__coll__graph_org.svg create mode 100644 docs/html/classException__inherit__graph.map create mode 100644 docs/html/classException__inherit__graph.md5 create mode 100644 docs/html/classException__inherit__graph.svg create mode 100644 docs/html/classException__inherit__graph_org.svg create mode 100644 docs/html/classes.html create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient-members.html create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient.html create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient.js create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg create mode 100644 docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.html create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.js create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.html create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.js create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.map create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg create mode 100644 docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg create mode 100644 docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg create mode 100644 docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg create mode 100644 docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig.html create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig.js create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg create mode 100644 docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg create mode 100644 docs/html/clipboard.js create mode 100644 docs/html/closed.png create mode 100644 docs/html/commit-commands_8md.html create mode 100644 docs/html/commit__analyzer_8py.html create mode 100644 docs/html/commit__analyzer_8py.js create mode 100644 docs/html/commit__commands_8py.html create mode 100644 docs/html/commit__commands_8py.js create mode 100644 docs/html/config-commands_8md.html create mode 100644 docs/html/config__command_8py.html create mode 100644 docs/html/config__command_8py.js create mode 100644 docs/html/config__commands_8py.html create mode 100644 docs/html/config__commands_8py.js create mode 100644 docs/html/conftest_8py.html create mode 100644 docs/html/constants_8py.html create mode 100644 docs/html/constants_8py.js create mode 100644 docs/html/cookie.js create mode 100644 docs/html/detailed-usage_8md.html create mode 100644 docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.html create mode 100644 docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.js create mode 100644 docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map create mode 100644 docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 create mode 100644 docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg create mode 100644 docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg create mode 100644 docs/html/dir_1648a057408aae8db85b8e3797335623.html create mode 100644 docs/html/dir_1648a057408aae8db85b8e3797335623_dep.map create mode 100644 docs/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 create mode 100644 docs/html/dir_1648a057408aae8db85b8e3797335623_dep.svg create mode 100644 docs/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg create mode 100644 docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html create mode 100644 docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js create mode 100644 docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map create mode 100644 docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 create mode 100644 docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg create mode 100644 docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg create mode 100644 docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html create mode 100644 docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js create mode 100644 docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html create mode 100644 docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js create mode 100644 docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map create mode 100644 docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 create mode 100644 docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg create mode 100644 docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg create mode 100644 docs/html/doc.svg create mode 100644 docs/html/doc__commands_8md.html create mode 100644 docs/html/doc__commands_8py.html create mode 100644 docs/html/doc__commands_8py.js create mode 100644 docs/html/docd.svg create mode 100644 docs/html/doxygen-awesome-darkmode-toggle.js create mode 100644 docs/html/doxygen-awesome-fragment-copy-button.js create mode 100644 docs/html/doxygen-awesome-interactive-toc.js create mode 100644 docs/html/doxygen-awesome-paragraph-link.js create mode 100644 docs/html/doxygen-awesome-sidebar-only-darkmode-toggle.css create mode 100644 docs/html/doxygen-awesome-sidebar-only.css create mode 100644 docs/html/doxygen-awesome-tabs.js create mode 100644 docs/html/doxygen-awesome.css create mode 100644 docs/html/doxygen.css create mode 100644 docs/html/doxygen.svg create mode 100644 docs/html/doxygen_crawl.html create mode 100644 docs/html/dynsections.js create mode 100644 docs/html/example-workflows_8md.html create mode 100644 docs/html/file__analyzer_8py.html create mode 100644 docs/html/file__analyzer_8py.js create mode 100644 docs/html/files.html create mode 100644 docs/html/files_dup.js create mode 100644 docs/html/folder__analyzer_8py.html create mode 100644 docs/html/folder__analyzer_8py.js create mode 100644 docs/html/folderclosed.svg create mode 100644 docs/html/folderclosedd.svg create mode 100644 docs/html/folderopen.svg create mode 100644 docs/html/folderopend.svg create mode 100644 docs/html/functions.html create mode 100644 docs/html/functions_func.html create mode 100644 docs/html/functions_vars.html create mode 100644 docs/html/git__analyzer_8py.html create mode 100644 docs/html/git__analyzer_8py.js create mode 100644 docs/html/graph_legend.html create mode 100644 docs/html/graph_legend.md5 create mode 100644 docs/html/graph_legend.svg create mode 100644 docs/html/hierarchy.html create mode 100644 docs/html/hierarchy.js create mode 100644 docs/html/hook__commands_8py.html create mode 100644 docs/html/hook__commands_8py.js create mode 100644 docs/html/index.html create mode 100644 docs/html/inherit_graph_0.map create mode 100644 docs/html/inherit_graph_0.md5 create mode 100644 docs/html/inherit_graph_0.svg create mode 100644 docs/html/inherit_graph_1.map create mode 100644 docs/html/inherit_graph_1.md5 create mode 100644 docs/html/inherit_graph_1.svg create mode 100644 docs/html/inherit_graph_2.map create mode 100644 docs/html/inherit_graph_2.md5 create mode 100644 docs/html/inherit_graph_2.svg create mode 100644 docs/html/inherit_graph_3.map create mode 100644 docs/html/inherit_graph_3.md5 create mode 100644 docs/html/inherit_graph_3.svg create mode 100644 docs/html/inherit_graph_4.map create mode 100644 docs/html/inherit_graph_4.md5 create mode 100644 docs/html/inherit_graph_4.svg create mode 100644 docs/html/inherit_graph_5.map create mode 100644 docs/html/inherit_graph_5.md5 create mode 100644 docs/html/inherit_graph_5.svg create mode 100644 docs/html/inherit_graph_6.map create mode 100644 docs/html/inherit_graph_6.md5 create mode 100644 docs/html/inherit_graph_6.svg create mode 100644 docs/html/inherit_graph_7.map create mode 100644 docs/html/inherit_graph_7.md5 create mode 100644 docs/html/inherit_graph_7.svg create mode 100644 docs/html/inherits.html create mode 100644 docs/html/jira__client_8py.html create mode 100644 docs/html/jira__client_8py.js create mode 100644 docs/html/jquery.js create mode 100644 docs/html/llm__client_8py.html create mode 100644 docs/html/llm__client_8py.js create mode 100644 docs/html/login__command_8py.html create mode 100644 docs/html/login__command_8py.js create mode 100644 docs/html/main_8py.html create mode 100644 docs/html/main_8py.js create mode 100644 docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html create mode 100644 docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html create mode 100644 docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html create mode 100644 docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html create mode 100644 docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html create mode 100644 docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html create mode 100644 docs/html/menu.js create mode 100644 docs/html/menudata.js create mode 100644 docs/html/minus.svg create mode 100644 docs/html/minusd.svg create mode 100644 docs/html/namespacemembers.html create mode 100644 docs/html/namespacemembers_func.html create mode 100644 docs/html/namespacemembers_vars.html create mode 100644 docs/html/namespacepenify__hook.html create mode 100644 docs/html/namespacepenify__hook.js create mode 100644 docs/html/namespacepenify__hook_1_1api__client.html create mode 100644 docs/html/namespacepenify__hook_1_1api__client.js create mode 100644 docs/html/namespacepenify__hook_1_1base__analyzer.html create mode 100644 docs/html/namespacepenify__hook_1_1base__analyzer.js create mode 100644 docs/html/namespacepenify__hook_1_1commands.html create mode 100644 docs/html/namespacepenify__hook_1_1commands.js create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands.html create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands.html create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands.html create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands.html create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1commands_1_1hook__commands.html create mode 100644 docs/html/namespacepenify__hook_1_1commit__analyzer.html create mode 100644 docs/html/namespacepenify__hook_1_1commit__analyzer.js create mode 100644 docs/html/namespacepenify__hook_1_1config__command.html create mode 100644 docs/html/namespacepenify__hook_1_1constants.html create mode 100644 docs/html/namespacepenify__hook_1_1file__analyzer.html create mode 100644 docs/html/namespacepenify__hook_1_1file__analyzer.js create mode 100644 docs/html/namespacepenify__hook_1_1folder__analyzer.html create mode 100644 docs/html/namespacepenify__hook_1_1folder__analyzer.js create mode 100644 docs/html/namespacepenify__hook_1_1git__analyzer.html create mode 100644 docs/html/namespacepenify__hook_1_1git__analyzer.js create mode 100644 docs/html/namespacepenify__hook_1_1jira__client.html create mode 100644 docs/html/namespacepenify__hook_1_1jira__client.js create mode 100644 docs/html/namespacepenify__hook_1_1llm__client.html create mode 100644 docs/html/namespacepenify__hook_1_1llm__client.js create mode 100644 docs/html/namespacepenify__hook_1_1login__command.html create mode 100644 docs/html/namespacepenify__hook_1_1main.html create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils.html create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1utils.html create mode 100644 docs/html/namespacepenify__hook_1_1utils.js create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg create mode 100644 docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg create mode 100644 docs/html/namespaces.html create mode 100644 docs/html/namespaces_dup.js create mode 100644 docs/html/namespacesetup.html create mode 100644 docs/html/namespacetests.html create mode 100644 docs/html/namespacetests.js create mode 100644 docs/html/namespacetests_1_1conftest.html create mode 100644 docs/html/namespacetests_1_1test__commit__commands.html create mode 100644 docs/html/namespacetests_1_1test__commit__commands.js create mode 100644 docs/html/namespacetests_1_1test__config__commands.html create mode 100644 docs/html/namespacetests_1_1test__config__commands.js create mode 100644 docs/html/namespacetests_1_1test__doc__commands.html create mode 100644 docs/html/namespacetests_1_1test__web__config.html create mode 100644 docs/html/namespacetests_1_1test__web__config.js create mode 100644 docs/html/nav_f.png create mode 100644 docs/html/nav_fd.png create mode 100644 docs/html/nav_g.png create mode 100644 docs/html/nav_h.png create mode 100644 docs/html/nav_hd.png create mode 100644 docs/html/navtree.css create mode 100644 docs/html/navtree.js create mode 100644 docs/html/navtreedata.js create mode 100644 docs/html/navtreeindex0.js create mode 100644 docs/html/navtreeindex1.js create mode 100644 docs/html/navtreeindex2.js create mode 100644 docs/html/open.png create mode 100644 docs/html/pages.html create mode 100644 docs/html/penify-cli-documentation_8md.html create mode 100644 docs/html/penify__hook_2____init_____8py.html create mode 100644 docs/html/penify__hook_2commands_2____init_____8py.html create mode 100644 docs/html/plus.svg create mode 100644 docs/html/plusd.svg create mode 100644 docs/html/resize.js create mode 100644 docs/html/search/all_0.js create mode 100644 docs/html/search/all_1.js create mode 100644 docs/html/search/all_10.js create mode 100644 docs/html/search/all_11.js create mode 100644 docs/html/search/all_12.js create mode 100644 docs/html/search/all_13.js create mode 100644 docs/html/search/all_14.js create mode 100644 docs/html/search/all_15.js create mode 100644 docs/html/search/all_16.js create mode 100644 docs/html/search/all_17.js create mode 100644 docs/html/search/all_18.js create mode 100644 docs/html/search/all_19.js create mode 100644 docs/html/search/all_1a.js create mode 100644 docs/html/search/all_2.js create mode 100644 docs/html/search/all_3.js create mode 100644 docs/html/search/all_4.js create mode 100644 docs/html/search/all_5.js create mode 100644 docs/html/search/all_6.js create mode 100644 docs/html/search/all_7.js create mode 100644 docs/html/search/all_8.js create mode 100644 docs/html/search/all_9.js create mode 100644 docs/html/search/all_a.js create mode 100644 docs/html/search/all_b.js create mode 100644 docs/html/search/all_c.js create mode 100644 docs/html/search/all_d.js create mode 100644 docs/html/search/all_e.js create mode 100644 docs/html/search/all_f.js create mode 100644 docs/html/search/classes_0.js create mode 100644 docs/html/search/classes_1.js create mode 100644 docs/html/search/classes_2.js create mode 100644 docs/html/search/classes_3.js create mode 100644 docs/html/search/classes_4.js create mode 100644 docs/html/search/classes_5.js create mode 100644 docs/html/search/classes_6.js create mode 100644 docs/html/search/classes_7.js create mode 100644 docs/html/search/classes_8.js create mode 100644 docs/html/search/close.svg create mode 100644 docs/html/search/files_0.js create mode 100644 docs/html/search/files_1.js create mode 100644 docs/html/search/files_10.js create mode 100644 docs/html/search/files_2.js create mode 100644 docs/html/search/files_3.js create mode 100644 docs/html/search/files_4.js create mode 100644 docs/html/search/files_5.js create mode 100644 docs/html/search/files_6.js create mode 100644 docs/html/search/files_7.js create mode 100644 docs/html/search/files_8.js create mode 100644 docs/html/search/files_9.js create mode 100644 docs/html/search/files_a.js create mode 100644 docs/html/search/files_b.js create mode 100644 docs/html/search/files_c.js create mode 100644 docs/html/search/files_d.js create mode 100644 docs/html/search/files_e.js create mode 100644 docs/html/search/files_f.js create mode 100644 docs/html/search/functions_0.js create mode 100644 docs/html/search/functions_1.js create mode 100644 docs/html/search/functions_2.js create mode 100644 docs/html/search/functions_3.js create mode 100644 docs/html/search/functions_4.js create mode 100644 docs/html/search/functions_5.js create mode 100644 docs/html/search/functions_6.js create mode 100644 docs/html/search/functions_7.js create mode 100644 docs/html/search/functions_8.js create mode 100644 docs/html/search/functions_9.js create mode 100644 docs/html/search/functions_a.js create mode 100644 docs/html/search/functions_b.js create mode 100644 docs/html/search/functions_c.js create mode 100644 docs/html/search/functions_d.js create mode 100644 docs/html/search/functions_e.js create mode 100644 docs/html/search/mag.svg create mode 100644 docs/html/search/mag_d.svg create mode 100644 docs/html/search/mag_sel.svg create mode 100644 docs/html/search/mag_seld.svg create mode 100644 docs/html/search/namespaces_0.js create mode 100644 docs/html/search/namespaces_1.js create mode 100644 docs/html/search/namespaces_2.js create mode 100644 docs/html/search/pages_0.js create mode 100644 docs/html/search/pages_1.js create mode 100644 docs/html/search/pages_2.js create mode 100644 docs/html/search/pages_3.js create mode 100644 docs/html/search/pages_4.js create mode 100644 docs/html/search/pages_5.js create mode 100644 docs/html/search/pages_6.js create mode 100644 docs/html/search/search.css create mode 100644 docs/html/search/search.js create mode 100644 docs/html/search/searchdata.js create mode 100644 docs/html/search/variables_0.js create mode 100644 docs/html/search/variables_1.js create mode 100644 docs/html/search/variables_10.js create mode 100644 docs/html/search/variables_11.js create mode 100644 docs/html/search/variables_12.js create mode 100644 docs/html/search/variables_2.js create mode 100644 docs/html/search/variables_3.js create mode 100644 docs/html/search/variables_4.js create mode 100644 docs/html/search/variables_5.js create mode 100644 docs/html/search/variables_6.js create mode 100644 docs/html/search/variables_7.js create mode 100644 docs/html/search/variables_8.js create mode 100644 docs/html/search/variables_9.js create mode 100644 docs/html/search/variables_a.js create mode 100644 docs/html/search/variables_b.js create mode 100644 docs/html/search/variables_c.js create mode 100644 docs/html/search/variables_d.js create mode 100644 docs/html/search/variables_e.js create mode 100644 docs/html/search/variables_f.js create mode 100644 docs/html/setup_8py.html create mode 100644 docs/html/setup_8py.js create mode 100644 docs/html/splitbar.png create mode 100644 docs/html/splitbard.png create mode 100644 docs/html/svg.min.js create mode 100644 docs/html/sync_off.png create mode 100644 docs/html/sync_on.png create mode 100644 docs/html/tab_a.png create mode 100644 docs/html/tab_ad.png create mode 100644 docs/html/tab_b.png create mode 100644 docs/html/tab_bd.png create mode 100644 docs/html/tab_h.png create mode 100644 docs/html/tab_hd.png create mode 100644 docs/html/tab_s.png create mode 100644 docs/html/tab_sd.png create mode 100644 docs/html/tabs.css create mode 100644 docs/html/test__commit__commands_8py.html create mode 100644 docs/html/test__commit__commands_8py.js create mode 100644 docs/html/test__config__commands_8py.html create mode 100644 docs/html/test__config__commands_8py.js create mode 100644 docs/html/test__doc__commands_8py.html create mode 100644 docs/html/test__doc__commands_8py.js create mode 100644 docs/html/test__web__config_8py.html create mode 100644 docs/html/test__web__config_8py.js create mode 100644 docs/html/tests_2____init_____8py.html create mode 100644 docs/html/toggle-alternative-theme.js create mode 100644 docs/html/ui__utils_8py.html create mode 100644 docs/html/ui__utils_8py.js create mode 100644 docs/html/utils_8py.html create mode 100644 docs/html/utils_8py.js create mode 100644 docs/penify-cli-SingularityX-ai-g.tar.gz diff --git a/docs/html/README_8md.html b/docs/html/README_8md.html new file mode 100644 index 0000000..5ecc33f --- /dev/null +++ b/docs/html/README_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md File Reference
+
+
+
+
+ + + + + diff --git a/docs/html/annotated.html b/docs/html/annotated.html new file mode 100644 index 0000000..8c708d2 --- /dev/null +++ b/docs/html/annotated.html @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+
+ + + + + diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js new file mode 100644 index 0000000..e374ec6 --- /dev/null +++ b/docs/html/annotated_dup.js @@ -0,0 +1,44 @@ +var annotated_dup = +[ + [ "penify_hook", "namespacepenify__hook.html", [ + [ "api_client", "namespacepenify__hook_1_1api__client.html", [ + [ "APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", "classpenify__hook_1_1api__client_1_1APIClient" ] + ] ], + [ "base_analyzer", "namespacepenify__hook_1_1base__analyzer.html", [ + [ "BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer" ] + ] ], + [ "commit_analyzer", "namespacepenify__hook_1_1commit__analyzer.html", [ + [ "CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook" ] + ] ], + [ "file_analyzer", "namespacepenify__hook_1_1file__analyzer.html", [ + [ "FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook" ] + ] ], + [ "folder_analyzer", "namespacepenify__hook_1_1folder__analyzer.html", [ + [ "FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook" ] + ] ], + [ "git_analyzer", "namespacepenify__hook_1_1git__analyzer.html", [ + [ "GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook" ] + ] ], + [ "jira_client", "namespacepenify__hook_1_1jira__client.html", [ + [ "JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", "classpenify__hook_1_1jira__client_1_1JiraClient" ] + ] ], + [ "llm_client", "namespacepenify__hook_1_1llm__client.html", [ + [ "LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", "classpenify__hook_1_1llm__client_1_1LLMClient" ] + ] ], + [ "utils", "namespacepenify__hook_1_1utils.html", [ + [ "GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ] + ] ] + ] ], + [ "tests", "namespacetests.html", [ + [ "test_commit_commands", "namespacetests_1_1test__commit__commands.html", [ + [ "TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", "classtests_1_1test__commit__commands_1_1TestCommitCommands" ] + ] ], + [ "test_config_commands", "namespacetests_1_1test__config__commands.html", [ + [ "TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", "classtests_1_1test__config__commands_1_1TestConfigCommands" ] + ] ], + [ "test_web_config", "namespacetests_1_1test__web__config.html", [ + [ "TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", "classtests_1_1test__web__config_1_1TestWebConfig" ] + ] ] + ] ], + [ "Exception", "classException.html", null ] +]; \ No newline at end of file diff --git a/docs/html/api__client_8py.html b/docs/html/api__client_8py.html new file mode 100644 index 0000000..333cb14 --- /dev/null +++ b/docs/html/api__client_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/api_client.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
api_client.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.api_client.APIClient
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.api_client
 
+
+
+ + + + + diff --git a/docs/html/api__client_8py.js b/docs/html/api__client_8py.js new file mode 100644 index 0000000..a3575a0 --- /dev/null +++ b/docs/html/api__client_8py.js @@ -0,0 +1,4 @@ +var api__client_8py = +[ + [ "penify_hook.api_client.APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", "classpenify__hook_1_1api__client_1_1APIClient" ] +]; \ No newline at end of file diff --git a/docs/html/auth__commands_8py.html b/docs/html/auth__commands_8py.html new file mode 100644 index 0000000..d6e9f92 --- /dev/null +++ b/docs/html/auth__commands_8py.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands/auth_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
auth_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.auth_commands
 
+ + + + + +

+Functions

 penify_hook.commands.auth_commands.save_credentials (api_key)
 
 penify_hook.commands.auth_commands.login (api_url, dashboard_url)
 
+
+
+ + + + + diff --git a/docs/html/auth__commands_8py.js b/docs/html/auth__commands_8py.js new file mode 100644 index 0000000..c76c883 --- /dev/null +++ b/docs/html/auth__commands_8py.js @@ -0,0 +1,5 @@ +var auth__commands_8py = +[ + [ "penify_hook.commands.auth_commands.login", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6", null ], + [ "penify_hook.commands.auth_commands.save_credentials", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b", null ] +]; \ No newline at end of file diff --git a/docs/html/base__analyzer_8py.html b/docs/html/base__analyzer_8py.html new file mode 100644 index 0000000..c66a0a3 --- /dev/null +++ b/docs/html/base__analyzer_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/base_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
base_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.base_analyzer.BaseAnalyzer
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.base_analyzer
 
+
+
+ + + + + diff --git a/docs/html/base__analyzer_8py.js b/docs/html/base__analyzer_8py.js new file mode 100644 index 0000000..0d5c745 --- /dev/null +++ b/docs/html/base__analyzer_8py.js @@ -0,0 +1,4 @@ +var base__analyzer_8py = +[ + [ "penify_hook.base_analyzer.BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer" ] +]; \ No newline at end of file diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/docs/html/bc_sd.png b/docs/html/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/docs/html/classException.html b/docs/html/classException.html new file mode 100644 index 0000000..00c879a --- /dev/null +++ b/docs/html/classException.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Exception Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Exception Class Reference
+
+
+
+Inheritance diagram for Exception:
+
+
+
+
+Collaboration diagram for Exception:
+
+
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/utils.py
  • +
+
+
+ + + + + diff --git a/docs/html/classException__coll__graph.map b/docs/html/classException__coll__graph.map new file mode 100644 index 0000000..1264386 --- /dev/null +++ b/docs/html/classException__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classException__coll__graph.md5 b/docs/html/classException__coll__graph.md5 new file mode 100644 index 0000000..3ac9d9b --- /dev/null +++ b/docs/html/classException__coll__graph.md5 @@ -0,0 +1 @@ +75cb8f3b3754e18418ff81689ad8fc7e \ No newline at end of file diff --git a/docs/html/classException__coll__graph.svg b/docs/html/classException__coll__graph.svg new file mode 100644 index 0000000..5524c00 --- /dev/null +++ b/docs/html/classException__coll__graph.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + + + + + + diff --git a/docs/html/classException__coll__graph_org.svg b/docs/html/classException__coll__graph_org.svg new file mode 100644 index 0000000..845d630 --- /dev/null +++ b/docs/html/classException__coll__graph_org.svg @@ -0,0 +1,26 @@ + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + diff --git a/docs/html/classException__inherit__graph.map b/docs/html/classException__inherit__graph.map new file mode 100644 index 0000000..bb7ba7e --- /dev/null +++ b/docs/html/classException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classException__inherit__graph.md5 b/docs/html/classException__inherit__graph.md5 new file mode 100644 index 0000000..6b5e5ff --- /dev/null +++ b/docs/html/classException__inherit__graph.md5 @@ -0,0 +1 @@ +21613c0308db4d8aa644a414d85c2b24 \ No newline at end of file diff --git a/docs/html/classException__inherit__graph.svg b/docs/html/classException__inherit__graph.svg new file mode 100644 index 0000000..a52151e --- /dev/null +++ b/docs/html/classException__inherit__graph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + +Node2 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classException__inherit__graph_org.svg b/docs/html/classException__inherit__graph_org.svg new file mode 100644 index 0000000..7425a0c --- /dev/null +++ b/docs/html/classException__inherit__graph_org.svg @@ -0,0 +1,50 @@ + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + +Node2 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classes.html b/docs/html/classes.html new file mode 100644 index 0000000..5725e6e --- /dev/null +++ b/docs/html/classes.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Index + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient-members.html b/docs/html/classpenify__hook_1_1api__client_1_1APIClient-members.html new file mode 100644 index 0000000..633bdcf --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient-members.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.api_client.APIClient Member List
+
+
+ +

This is the complete list of members for penify_hook.api_client.APIClient, including all inherited members.

+ + + + + + + + + + +
__init__(self, api_url, str api_token=None, str bearer_token=None)penify_hook.api_client.APIClient
api_urlpenify_hook.api_client.APIClient
AUTH_TOKENpenify_hook.api_client.APIClient
BEARER_TOKENpenify_hook.api_client.APIClient
generate_commit_summary(self, git_diff, str instruction="", repo_details=None, dict jira_context=None)penify_hook.api_client.APIClient
generate_commit_summary_with_llm(self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context=None)penify_hook.api_client.APIClient
get_api_key(self)penify_hook.api_client.APIClient
get_supported_file_types(self)penify_hook.api_client.APIClient
send_file_for_docstring_generation(self, file_name, content, line_numbers, repo_details=None)penify_hook.api_client.APIClient
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient.html b/docs/html/classpenify__hook_1_1api__client_1_1APIClient.html new file mode 100644 index 0000000..70af391 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.api_client.APIClient Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.api_client.APIClient Class Reference
+
+
+
+Collaboration diagram for penify_hook.api_client.APIClient:
+
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, api_url, str api_token=None, str bearer_token=None)
 
 send_file_for_docstring_generation (self, file_name, content, line_numbers, repo_details=None)
 
 generate_commit_summary (self, git_diff, str instruction="", repo_details=None, dict jira_context=None)
 
list[str] get_supported_file_types (self)
 
 generate_commit_summary_with_llm (self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context=None)
 
 get_api_key (self)
 
+ + + + + + + +

+Public Attributes

 api_url = api_url
 
 AUTH_TOKEN = api_token
 
 BEARER_TOKEN = bearer_token
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.__init__ ( self,
api_url,
str api_token = None,
str bearer_token = None )
+
+ +
+
+

Member Function Documentation

+ +

◆ generate_commit_summary()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.generate_commit_summary ( self,
git_diff,
str instruction = "",
repo_details = None,
dict jira_context = None )
+
+
Generates a commit summary by sending a POST request to the API endpoint.
+
+This function constructs a payload containing the git diff and any additional
+instructions provided. It then sends this payload to a specified API endpoint
+to generate a summary of the commit. If the request is successful, it returns
+the response from the API; otherwise, it returns None. The function also
+handles optional repository details and JIRA context if they are provided.
+
+Args:
+    git_diff (str): The git diff of the commit.
+    instruction (str): Additional instruction for the commit. Defaults to "".
+    repo_details (dict): Details of the git repository. Defaults to None.
+    jira_context (dict): JIRA issue details to enhance the commit summary. Defaults to None.
+
+Returns:
+    dict: The response from the API if the request is successful, None otherwise.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ generate_commit_summary_with_llm()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.generate_commit_summary_with_llm ( self,
diff,
message,
bool generate_description,
repo_details,
LLMClient llm_client,
jira_context = None )
+
+
Generates a commit summary using a local LLM client; falls back to API on
+error.
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ get_api_key()

+ +
+
+ + + + + + + +
penify_hook.api_client.APIClient.get_api_key ( self)
+
+
Fetch an API key from a specified URL using a Bearer token.
+
+
+ +

◆ get_supported_file_types()

+ +
+
+ + + + + + + +
list[str] penify_hook.api_client.APIClient.get_supported_file_types ( self)
+
+
Retrieve supported file types from the API or return a default list.
+
+
+ +

◆ send_file_for_docstring_generation()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.send_file_for_docstring_generation ( self,
file_name,
content,
line_numbers,
repo_details = None )
+
+
Send file content and modified lines to the API and return modified content.
+
+
+

Member Data Documentation

+ +

◆ api_url

+ +
+
+ + + + +
penify_hook.api_client.APIClient.api_url = api_url
+
+ +
+
+ +

◆ AUTH_TOKEN

+ +
+
+ + + + +
penify_hook.api_client.APIClient.AUTH_TOKEN = api_token
+
+ +
+
+ +

◆ BEARER_TOKEN

+ +
+
+ + + + +
penify_hook.api_client.APIClient.BEARER_TOKEN = bearer_token
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/api_client.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient.js b/docs/html/classpenify__hook_1_1api__client_1_1APIClient.js new file mode 100644 index 0000000..e58299a --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient.js @@ -0,0 +1,12 @@ +var classpenify__hook_1_1api__client_1_1APIClient = +[ + [ "__init__", "classpenify__hook_1_1api__client_1_1APIClient.html#a8edae83711be6de381c6ec71c7aa2e37", null ], + [ "generate_commit_summary", "classpenify__hook_1_1api__client_1_1APIClient.html#af0c2fac38629fed60e8440203a1197dd", null ], + [ "generate_commit_summary_with_llm", "classpenify__hook_1_1api__client_1_1APIClient.html#a07bc97b2af31662029a24169f285c286", null ], + [ "get_api_key", "classpenify__hook_1_1api__client_1_1APIClient.html#a57a96d5c14128dd8021347f7e72fe12b", null ], + [ "get_supported_file_types", "classpenify__hook_1_1api__client_1_1APIClient.html#a5d2b4a26b24352d951ea79ecc4ff3402", null ], + [ "send_file_for_docstring_generation", "classpenify__hook_1_1api__client_1_1APIClient.html#ad6392c5f8e8b5e3394a74979278835bd", null ], + [ "api_url", "classpenify__hook_1_1api__client_1_1APIClient.html#a130cf688ed35dc0e8cbd8320b6b2d872", null ], + [ "AUTH_TOKEN", "classpenify__hook_1_1api__client_1_1APIClient.html#a5bb502603717946ad710b49ad9d95237", null ], + [ "BEARER_TOKEN", "classpenify__hook_1_1api__client_1_1APIClient.html#a7d7e2cf42c54eb4f25adee96a09ee7b0", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map new file mode 100644 index 0000000..a326652 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 new file mode 100644 index 0000000..47f16ab --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 @@ -0,0 +1 @@ +6e4d7aebf1e7e05a36b84363da6d2f68 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg new file mode 100644 index 0000000..864fb26 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + +penify_hook.api_client.APIClient + + +Node1 + + +penify_hook.api_client.APIClient ++ +api_url ++ +AUTH_TOKEN ++ +BEARER_TOKEN ++ +__init__() ++ +send_file_for_docstring +_generation() ++ +generate_commit_summary() ++ +get_supported_file +_types() ++ +generate_commit_summary +_with_llm() ++ +get_api_key() + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg new file mode 100644 index 0000000..042bf1e --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg @@ -0,0 +1,46 @@ + + + + + + +penify_hook.api_client.APIClient + + +Node1 + + +penify_hook.api_client.APIClient ++ +api_url ++ +AUTH_TOKEN ++ +BEARER_TOKEN ++ +__init__() ++ +send_file_for_docstring +_generation() ++ +generate_commit_summary() ++ +get_supported_file +_types() ++ +generate_commit_summary +_with_llm() ++ +get_api_key() + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map new file mode 100644 index 0000000..a3bcfd3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 new file mode 100644 index 0000000..6db7d54 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 @@ -0,0 +1 @@ +67bfcba9a90e6a255eb775ced957c533 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg new file mode 100644 index 0000000..27e3d26 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg new file mode 100644 index 0000000..9fd9bf5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map new file mode 100644 index 0000000..428efcd --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 new file mode 100644 index 0000000..20adf83 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 @@ -0,0 +1 @@ +2a2e523f3c074b78685cd2eee47ac3a4 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg new file mode 100644 index 0000000..d1cdfc6 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg new file mode 100644 index 0000000..2afc2d1 --- /dev/null +++ b/docs/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html new file mode 100644 index 0000000..dda5a3e --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html new file mode 100644 index 0000000..357be6a --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.base_analyzer.BaseAnalyzer Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.base_analyzer.BaseAnalyzer Class Reference
+
+
+
+Inheritance diagram for penify_hook.base_analyzer.BaseAnalyzer:
+
+
+
+
+Collaboration diagram for penify_hook.base_analyzer.BaseAnalyzer:
+
+
+
+ + + + +

+Public Member Functions

 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.base_analyzer.BaseAnalyzer.__init__ ( self,
str folder_path,
APIClient api_client )
+
+ +
+
+

Member Data Documentation

+ +

◆ api_client

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.api_client = api_client
+
+ +
+
+ +

◆ folder_path

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.folder_path = folder_path
+
+ +
+
+ +

◆ relative_file_path

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.relative_file_path = os.path.relpath(folder_path)
+
+ +
+
+ +

◆ repo

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.repo = None
+
+ +
+
+ +

◆ repo_details

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.repo_details = None
+
+ +
+
+ +

◆ repo_path

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.repo_path = recursive_search_git_folder(folder_path)
+
+ +
+
+ +

◆ supported_file_types

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.supported_file_types = set(api_client.get_supported_file_types())
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/base_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js new file mode 100644 index 0000000..91681ae --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js @@ -0,0 +1,11 @@ +var classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer = +[ + [ "__init__", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa5d7b59e2118c6b229ab59f3ef3b95b5", null ], + [ "api_client", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a81e9c55709205aaf4ebbe2b41683baf2", null ], + [ "folder_path", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa67c06dd12b1bafaeaee81c41dcb7e25", null ], + [ "relative_file_path", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#ab702c0c3ba81d159d7c3bcd7ea2abba4", null ], + [ "repo", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a3a9ddfa1dfba81fe21214fe486389369", null ], + [ "repo_details", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a9cca3465b0cc00d78324b0a9eac1d7f5", null ], + [ "repo_path", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a957e81a1ab561f6cecfbe999e7b85499", null ], + [ "supported_file_types", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a0cac0310ec635aa64a34857cf30ce1eb", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map new file mode 100644 index 0000000..66d222b --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 new file mode 100644 index 0000000..ad1c845 --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 @@ -0,0 +1 @@ +456222cf8efc85e65f25381ed3b9a88d \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg new file mode 100644 index 0000000..1e464dc --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg new file mode 100644 index 0000000..b22e7ae --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map new file mode 100644 index 0000000..f8c9861 --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 new file mode 100644 index 0000000..74c5684 --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 @@ -0,0 +1 @@ +a4825e68bed8ab45d295e689402c854c \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg new file mode 100644 index 0000000..bed641c --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node1->Node5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg new file mode 100644 index 0000000..99281ed --- /dev/null +++ b/docs/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg @@ -0,0 +1,177 @@ + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node1->Node5 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html new file mode 100644 index 0000000..d15ab9b --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html new file mode 100644 index 0000000..c8af673 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html @@ -0,0 +1,458 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commit_analyzer.CommitDocGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.commit_analyzer.CommitDocGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.commit_analyzer.CommitDocGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.commit_analyzer.CommitDocGenHook:
+
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str repo_path, APIClient api_client, llm_client=None, jira_client=None)
 
dict get_summary (self, str instruction, bool generate_description)
 
 run (self, Optional[str] msg, bool edit_commit_message, bool generate_description)
 
tuple process_jira_integration (self, str title, str description, str msg)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

 llm_client = llm_client
 
JiraClient jira_client = jira_client
 
- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+ + + +

+Protected Member Functions

 _amend_commit (self)
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.commit_analyzer.CommitDocGenHook.__init__ ( self,
str repo_path,
APIClient api_client,
llm_client = None,
jira_client = None )
+
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Function Documentation

+ +

◆ _amend_commit()

+ +
+
+ + + + + +
+ + + + + + + +
penify_hook.commit_analyzer.CommitDocGenHook._amend_commit ( self)
+
+protected
+
+
Amends the last commit message in the repository.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_summary()

+ +
+
+ + + + + + + + + + + + + + + + +
dict penify_hook.commit_analyzer.CommitDocGenHook.get_summary ( self,
str instruction,
bool generate_description )
+
+
Generate a summary for the commit based on the staged changes.
+
+This function retrieves the differences of the staged changes in the repository
+and generates a commit summary using the provided instruction. If there are no
+changes staged for commit, an exception is raised. If a JIRA client is
+connected, it will attempt to extract issue keys from the current branch and
+use them to fetch context. The summary can be generated either with a Language
+Model (LLM) client or through the API client.
+
+Args:
+    instruction (str): A string containing instructions for generating the commit summary.
+    generate_description (bool): Whether to include detailed descriptions in the summary.
+
+Raises:
+    ValueError: If there are no changes staged for commit.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ process_jira_integration()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tuple penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration ( self,
str title,
str description,
str msg )
+
+
Process JIRA integration by extracting issue keys from commit message
+components and branch name.
+
+This function looks for JIRA issue keys in the provided commit title,
+description, original user message, and the active branch name. It uses these
+keys to update the commit message with JIRA information and adds comments to
+the corresponding JIRA issues. If no keys are found, it logs a warning.
+
+Args:
+    title (str): The generated commit title.
+    description (str): The generated commit description.
+    msg (str): The original user message that might contain JIRA references.
+
+Returns:
+    tuple: A tuple containing the updated commit title and description with included JIRA
+        information.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.commit_analyzer.CommitDocGenHook.run ( self,
Optional[str] msg,
bool edit_commit_message,
bool generate_description )
+
+
Run the post-commit hook.
+
+This method processes the modified files from the last commit, stages them, and
+creates an auto-commit with an optional message. It also handles JIRA
+integration if available. If there is an error generating the commit summary,
+an exception is raised.
+
+Args:
+    msg (Optional[str]): An optional message to include in the commit.
+    edit_commit_message (bool): A flag indicating whether to open the git commit
+        edit terminal after committing.
+    generate_description (bool): A flag indicating whether to include a description
+        in the commit message.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ jira_client

+ +
+
+ + + + +
JiraClient penify_hook.commit_analyzer.CommitDocGenHook.jira_client = jira_client
+
+ +
+
+ +

◆ llm_client

+ +
+
+ + + + +
penify_hook.commit_analyzer.CommitDocGenHook.llm_client = llm_client
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commit_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js new file mode 100644 index 0000000..0372b7c --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js @@ -0,0 +1,10 @@ +var classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook = +[ + [ "__init__", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a1fa29d890af3f3770743197e15776778", null ], + [ "_amend_commit", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a011812b68bf904e3beb051e585eff111", null ], + [ "get_summary", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a8496194276441fa2eb2fa014eaab9a37", null ], + [ "process_jira_integration", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#adda13cc121d96342476ccf72b63a007f", null ], + [ "run", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a2d0bb9eba04614915fa33a1d7b0b8f03", null ], + [ "jira_client", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ab03214b60248a10bca32597098b0a107", null ], + [ "llm_client", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ad93360e31f2ec58a0d7c9f08b219028a", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map new file mode 100644 index 0000000..1a8dd63 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 new file mode 100644 index 0000000..ad502df --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 @@ -0,0 +1 @@ +7f0a217e67e95d0bfca7760ee77eff80 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg new file mode 100644 index 0000000..1e51d3b --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + +Node3->Node1 + + + + + + +jira_client + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg new file mode 100644 index 0000000..b83dd01 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg @@ -0,0 +1,135 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + +Node3->Node1 + + + + + + +jira_client + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map new file mode 100644 index 0000000..422189a --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 new file mode 100644 index 0000000..ea27469 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +71b8c27971969c2195140ff298793113 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg new file mode 100644 index 0000000..7571cdc --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..9458122 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg @@ -0,0 +1,79 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map new file mode 100644 index 0000000..e536254 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 new file mode 100644 index 0000000..141c6ce --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 @@ -0,0 +1 @@ +1d956904b17e984d4fe08b63712af5b8 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg new file mode 100644 index 0000000..e460d9d --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg new file mode 100644 index 0000000..7928547 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map new file mode 100644 index 0000000..9ad9414 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 new file mode 100644 index 0000000..d763e05 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 @@ -0,0 +1 @@ +8f6d99cd255e9f96c88a98a310f284a7 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg new file mode 100644 index 0000000..d841efa --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg new file mode 100644 index 0000000..f08c875 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg @@ -0,0 +1,32 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map new file mode 100644 index 0000000..40d52aa --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 new file mode 100644 index 0000000..a09afc3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 @@ -0,0 +1 @@ +76ae1a4aa74d7b206a88fc8fc036a978 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg new file mode 100644 index 0000000..8e58a78 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg new file mode 100644 index 0000000..ca5fc87 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg @@ -0,0 +1,32 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map new file mode 100644 index 0000000..2997f60 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 new file mode 100644 index 0000000..c271bba --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 @@ -0,0 +1 @@ +909ae9a0a7b70478c834c118f6207927 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg new file mode 100644 index 0000000..27f566c --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.run + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node4 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg new file mode 100644 index 0000000..2f3e9c5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg @@ -0,0 +1,82 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.run + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node4 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map new file mode 100644 index 0000000..220c14b --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 new file mode 100644 index 0000000..2ac860e --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 @@ -0,0 +1 @@ +a9c27f3d7950cafa2b938f10dddc4952 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg new file mode 100644 index 0000000..99a9929 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg new file mode 100644 index 0000000..d406ad4 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map new file mode 100644 index 0000000..e426636 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 new file mode 100644 index 0000000..453f89f --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 @@ -0,0 +1 @@ +9eb9d60621b71ccf464ab6bdcfa2b30e \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg new file mode 100644 index 0000000..1670f7b --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg new file mode 100644 index 0000000..d2a7a66 --- /dev/null +++ b/docs/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html new file mode 100644 index 0000000..69bcd3d --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html new file mode 100644 index 0000000..cc4d423 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.file_analyzer.FileAnalyzerGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.file_analyzer.FileAnalyzerGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.file_analyzer.FileAnalyzerGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.file_analyzer.FileAnalyzerGenHook:
+
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str file_path, APIClient api_client)
 
 process_file (self, file_path, pbar, str new_param="")
 
 print_processing (self, file_path)
 
 run (self)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

 file_path = file_path
 
- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.__init__ ( self,
str file_path,
APIClient api_client )
+
+ +
+
+

Member Function Documentation

+ +

◆ print_processing()

+ +
+
+ + + + + + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing ( self,
file_path )
+
+
Prints a message indicating that a file is being processed.
+
+
+ +

◆ process_file()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.process_file ( self,
file_path,
pbar,
str new_param = "" )
+
+
Processes a file by validating its extension, reading content,
+generating documentation, and writing changes back to the file.  The function
+performs several stages of processing: 1. Validates the file's extension to
+ensure it is supported. 2. Reads the content of the file. 3. Sends the file
+content for documentation generation. 4. Writes the generated documentation
+back to the file if there are changes.
+
+Args:
+    file_path (str): The path of the file to be processed.
+    pbar (tqdm.tqdm): A progress bar object to update the status of processing stages.
+    new_param (str?): An additional parameter for future use. Defaults to an empty string.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.run ( self)
+
+
Runs the documentation process with a progress bar.
+
+This method orchestrates the documentation process by creating a progress bar,
+processing the file, and handling exceptions to ensure the progress bar
+completes properly. It updates the progress bar through various stages and
+provides feedback based on the result of the file processing.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ file_path

+ +
+
+ + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.file_path = file_path
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/file_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js new file mode 100644 index 0000000..9cda633 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js @@ -0,0 +1,8 @@ +var classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook = +[ + [ "__init__", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#ad0e39446078e1aeeb5325f3af02de2fb", null ], + [ "print_processing", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a1b371f1ba909b4fd351c542815f18747", null ], + [ "process_file", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#aeb3be324ba517855d6e5cdb684a6efda", null ], + [ "run", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a503c97b07cb2db1df0d881094dd6bb49", null ], + [ "file_path", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a9b03b88a9ce1b9af945279375048dc32", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map new file mode 100644 index 0000000..aa7bf1a --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 new file mode 100644 index 0000000..3f45827 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 @@ -0,0 +1 @@ +117a1a4e2d4f201e19a6d591f508ba7f \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg new file mode 100644 index 0000000..e571ebd --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg new file mode 100644 index 0000000..676c7de --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg @@ -0,0 +1,75 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map new file mode 100644 index 0000000..aa7bf1a --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 new file mode 100644 index 0000000..3f45827 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +117a1a4e2d4f201e19a6d591f508ba7f \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg new file mode 100644 index 0000000..e571ebd --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..676c7de --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg @@ -0,0 +1,75 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map new file mode 100644 index 0000000..7237ad5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 new file mode 100644 index 0000000..9698276 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 @@ -0,0 +1 @@ +93117f42801fa341b01b414b2442652c \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg new file mode 100644 index 0000000..5b041ca --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.run + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg new file mode 100644 index 0000000..d3029dc --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.run + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map new file mode 100644 index 0000000..dd9eac5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 new file mode 100644 index 0000000..f5cf73b --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 @@ -0,0 +1 @@ +74ae83cb32a84b3eaab417d6615b579f \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg new file mode 100644 index 0000000..ed619c5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg new file mode 100644 index 0000000..640c4a9 --- /dev/null +++ b/docs/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html new file mode 100644 index 0000000..42bdf7c --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html new file mode 100644 index 0000000..90d13e8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.folder_analyzer.FolderAnalyzerGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.folder_analyzer.FolderAnalyzerGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook:
+
+
+
+ + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str dir_path, APIClient api_client)
 
 list_all_files_in_dir (self, str dir_path)
 
 run (self)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

 dir_path = dir_path
 
- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__ ( self,
str dir_path,
APIClient api_client )
+
+ +
+
+

Member Function Documentation

+ +

◆ list_all_files_in_dir()

+ +
+
+ + + + + + + + + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir ( self,
str dir_path )
+
+
List all non-hidden files in a directory and its subdirectories.
+
+This function recursively traverses the specified directory and its
+subdirectories, collecting paths of all non-hidden files. It filters out hidden
+directories and files (those starting with a dot) to ensure only visible files
+are returned.
+
+Args:
+    dir_path (str): The path to the directory whose files and subdirectory files need to be listed.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.run ( self)
+
+
Run the post-commit hook and process files with a progress bar.
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ dir_path

+ +
+
+ + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.dir_path = dir_path
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/folder_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js new file mode 100644 index 0000000..c313328 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js @@ -0,0 +1,7 @@ +var classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook = +[ + [ "__init__", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a8f7a55b16cab4711eb3a3c3d9eb99344", null ], + [ "list_all_files_in_dir", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a050554646cbc07aef1fbaa748ee4c0fc", null ], + [ "run", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53c61ef41d39dd9bb1c8020a94f1dd8d", null ], + [ "dir_path", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53f73d69cc0f00763ee4830e4f0f7393", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map new file mode 100644 index 0000000..62eddcb --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 new file mode 100644 index 0000000..3acd4b8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 @@ -0,0 +1 @@ +5834d046c4f445c6ef3e2e9cc5f3f1ba \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg new file mode 100644 index 0000000..fc03766 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg new file mode 100644 index 0000000..fd06869 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg @@ -0,0 +1,73 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map new file mode 100644 index 0000000..62eddcb --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 new file mode 100644 index 0000000..3acd4b8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +5834d046c4f445c6ef3e2e9cc5f3f1ba \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg new file mode 100644 index 0000000..fc03766 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..fd06869 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg @@ -0,0 +1,73 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map new file mode 100644 index 0000000..e9ab4a7 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 new file mode 100644 index 0000000..3b9ea89 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 @@ -0,0 +1 @@ +dfee0c4d5deafcae96bcf260e4a5a040 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg new file mode 100644 index 0000000..4be5ee0 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg new file mode 100644 index 0000000..72bc9ea --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map new file mode 100644 index 0000000..0c31fc2 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 new file mode 100644 index 0000000..e9d17b5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 @@ -0,0 +1 @@ +31d341234bd6ac902e31eb06782bcf7d \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg new file mode 100644 index 0000000..797801c --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg new file mode 100644 index 0000000..c7b7746 --- /dev/null +++ b/docs/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html new file mode 100644 index 0000000..8087650 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html new file mode 100644 index 0000000..2b69bda --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.git_analyzer.GitDocGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.git_analyzer.GitDocGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.git_analyzer.GitDocGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.git_analyzer.GitDocGenHook:
+
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str repo_path, APIClient api_client)
 
 get_modified_files_in_last_commit (self)
 
 get_modified_lines (self, diff_text)
 
 process_file (self, file_path)
 
 run (self)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.__init__ ( self,
str repo_path,
APIClient api_client )
+
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Function Documentation

+ +

◆ get_modified_files_in_last_commit()

+ +
+
+ + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit ( self)
+
+
Get the list of files modified in the last commit.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_modified_lines()

+ +
+
+ + + + + + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.get_modified_lines ( self,
diff_text )
+
+
Extract modified line numbers from a diff text.
+
+This function processes a diff text to identify and extract the line numbers
+that have been modified. It distinguishes between added and deleted lines and
+keeps track of the current line number as it parses through the diff. The
+function handles hunk headers and ensures that any deletions at the end of the
+file are also captured.
+
+Args:
+    diff_text (str): A string containing the diff text to be processed.
+
+
+
+ +

◆ process_file()

+ +
+
+ + + + + + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.process_file ( self,
file_path )
+
+
Processes a file by checking its type, reading its content, and sending it to
+an API.
+
+This method constructs the absolute path of the specified file and verifies if
+the file has a valid extension. If the file type is supported, it reads the
+content of the file and retrieves the differences from the last commit in the
+repository. If changes are detected, it sends the file content along with the
+modified lines to an API for further processing. If the API response indicates
+no changes, the original file will not be overwritten.
+
+Args:
+    file_path (str): The relative path to the file to be processed.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.run ( self)
+
+
Run the post-commit hook.
+
+This method retrieves the list of modified files from the last commit and
+processes each file. It stages any files that have been modified during
+processing and creates an auto-commit if changes were made. A progress bar is
+displayed to indicate the processing status of each file. The method handles
+any exceptions that occur during file processing, printing an error message for
+each file that fails to process. If any modifications are made to the files, an
+auto-commit is created to save those changes.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/git_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js new file mode 100644 index 0000000..b1f26f7 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js @@ -0,0 +1,8 @@ +var classpenify__hook_1_1git__analyzer_1_1GitDocGenHook = +[ + [ "__init__", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a6f94663c0330ae7e6cbb7a8748177c24", null ], + [ "get_modified_files_in_last_commit", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a7070449b5dc058808eb13013db3d8eab", null ], + [ "get_modified_lines", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a74e36507adc1b1955cc6cc303f3f5328", null ], + [ "process_file", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a0fcec06966a3a5ef1df21529a6a3db81", null ], + [ "run", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a38fe1e50fc9448d995851d933283b633", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map new file mode 100644 index 0000000..c071a87 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 new file mode 100644 index 0000000..2e9a048 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 @@ -0,0 +1 @@ +24a454e47d3ff0abc2bfff962dc00afe \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg new file mode 100644 index 0000000..61a7636 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg new file mode 100644 index 0000000..aff5080 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg @@ -0,0 +1,76 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map new file mode 100644 index 0000000..c071a87 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 new file mode 100644 index 0000000..2e9a048 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +24a454e47d3ff0abc2bfff962dc00afe \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg new file mode 100644 index 0000000..61a7636 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..aff5080 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg @@ -0,0 +1,76 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map new file mode 100644 index 0000000..01b25cb --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 new file mode 100644 index 0000000..cdebba3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 @@ -0,0 +1 @@ +d9f160cfdfa1d36f70d512752eac7200 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg new file mode 100644 index 0000000..8c63bf8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.process_file + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg new file mode 100644 index 0000000..7e1f901 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.process_file + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map new file mode 100644 index 0000000..5304b28 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 new file mode 100644 index 0000000..7796201 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 @@ -0,0 +1 @@ +c6c9fa3833b2627344e74616fe46c91a \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg new file mode 100644 index 0000000..0fab064 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.run + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node4 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg new file mode 100644 index 0000000..9c6fa2d --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg @@ -0,0 +1,80 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.run + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node4 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map new file mode 100644 index 0000000..1e11953 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 new file mode 100644 index 0000000..79d04d4 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 @@ -0,0 +1 @@ +42b036f12e21b8fd11794b04f4ebbb21 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg new file mode 100644 index 0000000..f79241c --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg new file mode 100644 index 0000000..e88430c --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map new file mode 100644 index 0000000..08a0cc6 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 new file mode 100644 index 0000000..34759eb --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 @@ -0,0 +1 @@ +291583ab7d335081162c5b975d80c9b4 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg new file mode 100644 index 0000000..ba71345 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg new file mode 100644 index 0000000..53e7c2e --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map new file mode 100644 index 0000000..ea242d9 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 new file mode 100644 index 0000000..1b24801 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 @@ -0,0 +1 @@ +78d3bb13be1da63a63998b6dea414c76 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg new file mode 100644 index 0000000..9321125 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg new file mode 100644 index 0000000..20b3424 --- /dev/null +++ b/docs/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html new file mode 100644 index 0000000..493baa3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.jira_client.JiraClient Member List
+
+ +
+ + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.html b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.html new file mode 100644 index 0000000..e7f532e --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.html @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.jira_client.JiraClient Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.jira_client.JiraClient Class Reference
+
+
+
+Collaboration diagram for penify_hook.jira_client.JiraClient:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str jira_url=None, str jira_user=None, str jira_api_token=None)
 
bool is_connected (self)
 
List[str] extract_issue_keys_from_branch (self, str branch_name)
 
List[str] extract_issue_keys (self, str text)
 
Optional[Dict[str, Any]] get_issue_details (self, str issue_key)
 
bool add_comment (self, str issue_key, str comment)
 
bool update_issue_status (self, str issue_key, str transition_name)
 
tuple format_commit_message_with_jira_info (self, str commit_title, str commit_description, List[str] issue_keys=None)
 
Dict[str, Any] get_detailed_issue_context (self, str issue_key)
 
Dict[str, Any] get_commit_context_from_issues (self, List[str] issue_keys)
 
tuple enhance_commit_message (self, str title, str description, List[str] issue_keys)
 
+ + + + + + + + + +

+Public Attributes

 jira_url = jira_url
 
 jira_user = jira_user
 
 jira_api_token = jira_api_token
 
 jira_client = None
 
+

Detailed Description

+
Client for interacting with JIRA API
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.jira_client.JiraClient.__init__ ( self,
str jira_url = None,
str jira_user = None,
str jira_api_token = None )
+
+
Initialize the JIRA client.
+
+Args:
+    jira_url: Base URL for JIRA instance (e.g., "https://your-domain.atlassian.net")
+    jira_user: JIRA username or email
+    jira_api_token: JIRA API token
+
+
+
+

Member Function Documentation

+ +

◆ add_comment()

+ +
+
+ + + + + + + + + + + + + + + + +
bool penify_hook.jira_client.JiraClient.add_comment ( self,
str issue_key,
str comment )
+
+
Adds a comment to a JIRA issue.
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ enhance_commit_message()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tuple penify_hook.jira_client.JiraClient.enhance_commit_message ( self,
str title,
str description,
List[str] issue_keys )
+
+
Enhance a commit message with business and technical context from JIRA issues.
+
+This function first checks if the list of issue keys is empty or if there is no
+connection. If so, it returns the original title and description without
+modification. It then retrieves context information from the specified JIRA
+issues. If the primary issue is missing, it formats the commit message with
+basic JIRA info.  The function enhances the commit title by prefixing it with
+the primary issue key if not already included. It appends a business context
+section to the description, including details like issue type, status,
+priority, sprint, acceptance criteria, and a condensed issue description. If
+comments are available, they are added as technical notes. Finally, related
+issues are listed.
+
+Args:
+    title (str): Original commit title.
+    description (str): Original commit description.
+    issue_keys (List[str]): List of JIRA issue keys to include in the enhanced commit message.
+
+Returns:
+    tuple: A tuple containing the enhanced commit title and description with added
+        context from JIRA issues.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ extract_issue_keys()

+ +
+
+ + + + + + + + + + + +
List[str] penify_hook.jira_client.JiraClient.extract_issue_keys ( self,
str text )
+
+
Extract unique JIRA issue keys from the given text.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ extract_issue_keys_from_branch()

+ +
+
+ + + + + + + + + + + +
List[str] penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch ( self,
str branch_name )
+
+
Extracts unique JIRA issue keys from a branch name.
+
+
+ +

◆ format_commit_message_with_jira_info()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tuple penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info ( self,
str commit_title,
str commit_description,
List[str] issue_keys = None )
+
+
Format commit message with JIRA issue information.
+
+This function updates the provided commit title and description by
+incorporating JIRA issue keys. If no issue keys are supplied, it extracts them
+from the commit title and description. It then formats the commit title to
+include the first issue key if not already present and appends detailed
+information about each issue to the commit description.
+
+Args:
+    commit_title (str): The original commit title.
+    commit_description (str): The original commit description.
+    issue_keys (List[str]?): A list of JIRA issue keys to include in the commit message. If not
+        provided, issue keys will be extracted from both the title and the description.
+
+Returns:
+    tuple: A tuple containing the updated commit title and description with JIRA
+        information included.
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_commit_context_from_issues()

+ +
+
+ + + + + + + + + + + +
Dict[str, Any] penify_hook.jira_client.JiraClient.get_commit_context_from_issues ( self,
List[str] issue_keys )
+
+
Gather contextual information from JIRA issues to improve commit messages.
+
+This function processes a list of JIRA issue keys, retrieves detailed context
+for each issue, and aggregates it into a dictionary that can be used to enhance
+commit messages. It first retrieves the primary issue (the first key in the
+list) and then gathers basic details for any related issues. The resulting
+context includes information from both the primary and related issues, along
+with all issue keys.
+
+Args:
+    issue_keys: List of JIRA issue keys to gather information from
+
+Returns:
+    Dict containing business and technical context from the issues
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_detailed_issue_context()

+ +
+
+ + + + + + + + + + + +
Dict[str, Any] penify_hook.jira_client.JiraClient.get_detailed_issue_context ( self,
str issue_key )
+
+
Retrieve comprehensive details about a JIRA issue including context for better
+commit messages.
+
+This function fetches detailed information from a specified JIRA issue and
+constructs a dictionary containing various context fields such as the issue
+summary, description, type, status, priority, comments, URL, and additional
+custom fields like acceptance criteria and sprint information. It handles
+errors by logging appropriate warnings or errors.
+
+Args:
+    issue_key (str): The JIRA issue key (e.g., "PROJECT-123").
+
+Returns:
+    Dict[str, Any]: A dictionary containing business and technical context from the issue.
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_issue_details()

+ +
+
+ + + + + + + + + + + +
Optional[Dict[str, Any]] penify_hook.jira_client.JiraClient.get_issue_details ( self,
str issue_key )
+
+
Retrieve details of a JIRA issue based on its key.
+
+This function fetches detailed information about a specified JIRA issue using
+the provided issue key. It first checks if the JIRA client is connected; if
+not, it logs a warning and returns `None`. If connected, it attempts to
+retrieve the issue from the JIRA server. On success, it constructs and returns
+a dictionary containing various details such as the issue's key, summary,
+status, description, assignee, reporter, type, priority, and URL. Errors during
+this process are logged, and `None` is returned.
+
+Args:
+    issue_key (str): The JIRA issue key (e.g., "PROJECT-123").
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ is_connected()

+ +
+
+ + + + + + + +
bool penify_hook.jira_client.JiraClient.is_connected ( self)
+
+
Check if the JIRA client is connected.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ update_issue_status()

+ +
+
+ + + + + + + + + + + + + + + + +
bool penify_hook.jira_client.JiraClient.update_issue_status ( self,
str issue_key,
str transition_name )
+
+
Update the status of a JIRA issue.
+
+This method checks if the JIRA client is connected, retrieves available
+transitions for the given issue, finds the transition ID by name, and updates
+the issue's status accordingly. If any step fails or the specified transition
+is not found, appropriate logs are generated, and False is returned.
+
+Args:
+    issue_key (str): The key of the JIRA issue to be updated.
+    transition_name (str): The name of the desired transition.
+
+Returns:
+    bool: True if the status was successfully updated, False otherwise.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ jira_api_token

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_api_token = jira_api_token
+
+ +
+
+ +

◆ jira_client

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_client = None
+
+ +
+
+ +

◆ jira_url

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_url = jira_url
+
+ +
+
+ +

◆ jira_user

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_user = jira_user
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/jira_client.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.js b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.js new file mode 100644 index 0000000..d376d88 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient.js @@ -0,0 +1,18 @@ +var classpenify__hook_1_1jira__client_1_1JiraClient = +[ + [ "__init__", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a3a6914654fd59e0cef96159143a52355", null ], + [ "add_comment", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aa1f374116c64cd5f1492ec7f7e40f9c1", null ], + [ "enhance_commit_message", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a70d2c5a6432aa6f238da0ff65d49a760", null ], + [ "extract_issue_keys", "classpenify__hook_1_1jira__client_1_1JiraClient.html#ad2823ad1d3baaedd38039913c3a97fd7", null ], + [ "extract_issue_keys_from_branch", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a093d6456fe053ef7a7862d5d6851910c", null ], + [ "format_commit_message_with_jira_info", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a49ea1149758f7f5212149d357b13cc23", null ], + [ "get_commit_context_from_issues", "classpenify__hook_1_1jira__client_1_1JiraClient.html#afb41ce6f13c30b1265d439ddf04bf2cd", null ], + [ "get_detailed_issue_context", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aa967169a4b7970c67c0947b9ac56f746", null ], + [ "get_issue_details", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a65f6924819084b7c8d268956a784804a", null ], + [ "is_connected", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a00d0f9ae006313a21576362d26ac5ec8", null ], + [ "update_issue_status", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aca8837552d37bfd611de23441a240826", null ], + [ "jira_api_token", "classpenify__hook_1_1jira__client_1_1JiraClient.html#afc5c90e53b702f9fc27e2ee7d3f991b9", null ], + [ "jira_client", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aefb3f96c79358cf3a95d96d3747235b6", null ], + [ "jira_url", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a3c0cfecff02a75cb7001509a595b8197", null ], + [ "jira_user", "classpenify__hook_1_1jira__client_1_1JiraClient.html#ae56104d5aa7bda7bb26d169c4b46038c", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map new file mode 100644 index 0000000..cdaefc2 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 new file mode 100644 index 0000000..0c1111c --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 @@ -0,0 +1 @@ +cb6abffe2776ef8b917dcf9ccbfe13d9 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg new file mode 100644 index 0000000..362789b --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient + + +Node1 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg new file mode 100644 index 0000000..f2e6d7e --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.jira_client.JiraClient + + +Node1 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map new file mode 100644 index 0000000..af0a43a --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 new file mode 100644 index 0000000..87c42b9 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 @@ -0,0 +1 @@ +717d5801960370f08b353ff800782e04 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg new file mode 100644 index 0000000..076cc77 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.is_connected + + +Node1 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node1->Node8 + + + + + + + + +Node2->Node2 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node4 + + + + + + + + +Node7->Node5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg new file mode 100644 index 0000000..81bda1a --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg @@ -0,0 +1,214 @@ + + + + + + +penify_hook.jira_client.JiraClient.is_connected + + +Node1 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node1->Node8 + + + + + + + + +Node2->Node2 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node4 + + + + + + + + +Node7->Node5 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map new file mode 100644 index 0000000..333928f --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 new file mode 100644 index 0000000..da6010d --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 @@ -0,0 +1 @@ +418490b7d72a19f4b66a9d571f00a405 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg new file mode 100644 index 0000000..574eb14 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg new file mode 100644 index 0000000..2d1925e --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg @@ -0,0 +1,89 @@ + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map new file mode 100644 index 0000000..fc7a580 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 new file mode 100644 index 0000000..31affd1 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 @@ -0,0 +1 @@ +64b10c681d95ce3a7d9a088dee97f2fa \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg new file mode 100644 index 0000000..83e0ee7 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg new file mode 100644 index 0000000..230fdc6 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map new file mode 100644 index 0000000..3ea65f8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 new file mode 100644 index 0000000..4243138 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 @@ -0,0 +1 @@ +dde2ac2af40342b31ee669cca048b1d5 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg new file mode 100644 index 0000000..3985971 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg new file mode 100644 index 0000000..4e8bb0b --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map new file mode 100644 index 0000000..1bd6647 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 new file mode 100644 index 0000000..031a22f --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 @@ -0,0 +1 @@ +6c661a2fda40fd56a413ec2fa08a59b0 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg new file mode 100644 index 0000000..1b00d64 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg new file mode 100644 index 0000000..4d81f52 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg @@ -0,0 +1,91 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map new file mode 100644 index 0000000..42dd982 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 new file mode 100644 index 0000000..8120387 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 @@ -0,0 +1 @@ +5ddc66300fa5b7ead562ae1458f5a2d1 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg new file mode 100644 index 0000000..eb63ff5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.enhance_commit_message + + +Node1 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node4 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node6->Node7 + + + + + + + + +Node7->Node5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg new file mode 100644 index 0000000..74ddb79 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg @@ -0,0 +1,185 @@ + + + + + + +penify_hook.jira_client.JiraClient.enhance_commit_message + + +Node1 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node4 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node6->Node7 + + + + + + + + +Node7->Node5 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map new file mode 100644 index 0000000..68f5855 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 new file mode 100644 index 0000000..4872206 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 @@ -0,0 +1 @@ +2516741eaa318777630ef1a3c4503bec \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg new file mode 100644 index 0000000..2230ab2 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg new file mode 100644 index 0000000..31d4e73 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg @@ -0,0 +1,50 @@ + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map new file mode 100644 index 0000000..c3693f6 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 new file mode 100644 index 0000000..5a0d146 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 @@ -0,0 +1 @@ +383e070712c31e89209aa7b1e1122f61 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg new file mode 100644 index 0000000..bc05031 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg new file mode 100644 index 0000000..93a2839 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map new file mode 100644 index 0000000..3c585f2 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 new file mode 100644 index 0000000..e170f1a --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 @@ -0,0 +1 @@ +63a3882ce41ba6db173cea3a6a69cc12 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg new file mode 100644 index 0000000..16e6732 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg new file mode 100644 index 0000000..b662d76 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map new file mode 100644 index 0000000..4f6db46 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 new file mode 100644 index 0000000..76f9aba --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 @@ -0,0 +1 @@ +7b753bb07d4e9d56f0a95d651e44ff1d \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg new file mode 100644 index 0000000..a2078d9 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg new file mode 100644 index 0000000..4521658 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg @@ -0,0 +1,63 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map new file mode 100644 index 0000000..894ec8a --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 new file mode 100644 index 0000000..9d11f10 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 @@ -0,0 +1 @@ +efdd957df986904623f97d9b11661563 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg new file mode 100644 index 0000000..df89180 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.update_issue_status + + +Node1 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg new file mode 100644 index 0000000..424d967 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.jira_client.JiraClient.update_issue_status + + +Node1 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map new file mode 100644 index 0000000..7520eef --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 new file mode 100644 index 0000000..6901a15 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 @@ -0,0 +1 @@ +1e99adb62e67060686dd8813dd04b0a1 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg new file mode 100644 index 0000000..67bc403 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg new file mode 100644 index 0000000..08aba67 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg @@ -0,0 +1,62 @@ + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map new file mode 100644 index 0000000..8ed21fe --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 new file mode 100644 index 0000000..b7398a5 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 @@ -0,0 +1 @@ +1ffa67f807985b455093a76176bbf0a2 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg new file mode 100644 index 0000000..1f184f1 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node4 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg new file mode 100644 index 0000000..0757634 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg @@ -0,0 +1,99 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node4 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map new file mode 100644 index 0000000..85570b3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 new file mode 100644 index 0000000..d4c3c7e --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 @@ -0,0 +1 @@ +689439215ff383b255572760a7c9eb3c \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg new file mode 100644 index 0000000..69ca8a8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg new file mode 100644 index 0000000..4bba78f --- /dev/null +++ b/docs/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html new file mode 100644 index 0000000..808d9d7 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.llm_client.LLMClient Member List
+
+
+ +

This is the complete list of members for penify_hook.llm_client.LLMClient, including all inherited members.

+ + + + + + +
__init__(self, str model=None, str api_base=None, str api_key=None)penify_hook.llm_client.LLMClient
_litellmpenify_hook.llm_client.LLMClientprotected
generate_commit_summary(self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None)penify_hook.llm_client.LLMClient
litellm(self)penify_hook.llm_client.LLMClient
modelpenify_hook.llm_client.LLMClient
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.html b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.html new file mode 100644 index 0000000..fe629ec --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.html @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.llm_client.LLMClient Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.llm_client.LLMClient Class Reference
+
+
+
+Collaboration diagram for penify_hook.llm_client.LLMClient:
+
+
+
+ + + + + + + + +

+Public Member Functions

 __init__ (self, str model=None, str api_base=None, str api_key=None)
 
 litellm (self)
 
Dict generate_commit_summary (self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None)
 
+ + + +

+Public Attributes

 model = model
 
+ + + +

+Protected Attributes

 _litellm = None
 
+

Detailed Description

+
Client for interacting with LLM models using LiteLLM.
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.llm_client.LLMClient.__init__ ( self,
str model = None,
str api_base = None,
str api_key = None )
+
+
Initialize the LLM client.
+
+Args:
+    model: LLM model to use (e.g., "gpt-4", "ollama/llama2", etc.)
+    api_base: Base URL for API requests (e.g., "http://localhost:11434" for Ollama)
+    api_key: API key for the LLM service
+
+
+
+

Member Function Documentation

+ +

◆ generate_commit_summary()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Dict penify_hook.llm_client.LLMClient.generate_commit_summary ( self,
str diff,
str message,
bool generate_description,
Dict repo_details,
Dict jira_context = None )
+
+
Generate a concise and descriptive commit summary based on Git diff, user
+instructions, repository details, and optional JIRA context.
+
+This function constructs a prompt for an LLM to produce a commit title and, if
+requested, a detailed description. The summary adheres to Semantic Commit
+Messages guidelines. If JIRA context is provided, it enriches the prompt with
+relevant issue information.
+
+Args:
+    diff (str): Git diff of changes.
+    message (str): User-provided commit message or instructions.
+    generate_description (bool): Flag indicating whether to include a detailed description in the summary.
+    repo_details (Dict): Details about the repository.
+    jira_context (Dict?): Optional JIRA issue context to enhance the summary.
+
+Returns:
+    Dict: A dictionary containing the title and description for the commit. If
+        `generate_description` is False, the 'description' key may be absent.
+
+Raises:
+    ValueError: If the LLM model is not configured.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ litellm()

+ +
+
+ + + + + + + +
penify_hook.llm_client.LLMClient.litellm ( self)
+
+
Returns the litellm module, loading it if necessary.
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ _litellm

+ +
+
+ + + + + +
+ + + + +
penify_hook.llm_client.LLMClient._litellm = None
+
+protected
+
+ +
+
+ +

◆ model

+ +
+
+ + + + +
penify_hook.llm_client.LLMClient.model = model
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/llm_client.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.js b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.js new file mode 100644 index 0000000..46b5f69 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient.js @@ -0,0 +1,8 @@ +var classpenify__hook_1_1llm__client_1_1LLMClient = +[ + [ "__init__", "classpenify__hook_1_1llm__client_1_1LLMClient.html#a699a5be4411f5847fcb0a170281ab14b", null ], + [ "generate_commit_summary", "classpenify__hook_1_1llm__client_1_1LLMClient.html#a2ad3014dac466ee1d8e00306d0cf2000", null ], + [ "litellm", "classpenify__hook_1_1llm__client_1_1LLMClient.html#aa646fddc43ecd633d2c358d58dd4df24", null ], + [ "_litellm", "classpenify__hook_1_1llm__client_1_1LLMClient.html#a76c2e9805f805624ab9c55a9f1f8d362", null ], + [ "model", "classpenify__hook_1_1llm__client_1_1LLMClient.html#abc2cb6b1d6d9b5dc16401ca078ec8c10", null ] +]; \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map new file mode 100644 index 0000000..0799e07 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 new file mode 100644 index 0000000..32e431a --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 @@ -0,0 +1 @@ +f5a85cb1914200227761fbafb29a028d \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg new file mode 100644 index 0000000..c17cfa7 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + +penify_hook.llm_client.LLMClient + + +Node1 + + +penify_hook.llm_client.LLMClient ++ +model +# +_litellm ++ +__init__() ++ +litellm() ++ +generate_commit_summary() + + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg new file mode 100644 index 0000000..e539abe --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg @@ -0,0 +1,35 @@ + + + + + + +penify_hook.llm_client.LLMClient + + +Node1 + + +penify_hook.llm_client.LLMClient ++ +model +# +_litellm ++ +__init__() ++ +litellm() ++ +generate_commit_summary() + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.map b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.map new file mode 100644 index 0000000..4ef0528 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 new file mode 100644 index 0000000..01de6eb --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 @@ -0,0 +1 @@ +34b0fee7d75710e4a00c53f6fd9aa8be \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg new file mode 100644 index 0000000..8396724 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.llm_client.LLMClient.generate_commit_summary + + +Node1 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph_org.svg b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph_org.svg new file mode 100644 index 0000000..a18f3b8 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.llm_client.LLMClient.generate_commit_summary + + +Node1 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map new file mode 100644 index 0000000..8619272 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 new file mode 100644 index 0000000..ab0c9e0 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 @@ -0,0 +1 @@ +5b5c51cbf1bd107a0995dd55219fc8f0 \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg new file mode 100644 index 0000000..9ee6551 --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.llm_client.LLMClient.litellm + + +Node1 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg new file mode 100644 index 0000000..4d765df --- /dev/null +++ b/docs/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.llm_client.LLMClient.litellm + + +Node1 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html new file mode 100644 index 0000000..8fc2701 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.utils.GitRepoNotFoundError Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.utils.GitRepoNotFoundError Class Reference
+
+
+
+Inheritance diagram for penify_hook.utils.GitRepoNotFoundError:
+
+
+
+
+Collaboration diagram for penify_hook.utils.GitRepoNotFoundError:
+
+
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/utils.py
  • +
+
+
+ + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map new file mode 100644 index 0000000..22a6cb3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 new file mode 100644 index 0000000..671ea14 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 @@ -0,0 +1 @@ +a12e925b7b00d944f3725fa4235987da \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg new file mode 100644 index 0000000..d92e280 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg new file mode 100644 index 0000000..4b075ca --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg @@ -0,0 +1,50 @@ + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map new file mode 100644 index 0000000..22a6cb3 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 new file mode 100644 index 0000000..671ea14 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 @@ -0,0 +1 @@ +a12e925b7b00d944f3725fa4235987da \ No newline at end of file diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg new file mode 100644 index 0000000..d92e280 --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg new file mode 100644 index 0000000..4b075ca --- /dev/null +++ b/docs/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg @@ -0,0 +1,50 @@ + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html new file mode 100644 index 0000000..6eb08d0 --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests.test_commit_commands.TestCommitCommands Member List
+
+
+ +

This is the complete list of members for tests.test_commit_commands.TestCommitCommands, including all inherited members.

+ + + + + + + + + + + + + +
mock_api_client(self)tests.test_commit_commands.TestCommitCommands
mock_commit_doc_gen(self)tests.test_commit_commands.TestCommitCommands
mock_git_folder_search(self)tests.test_commit_commands.TestCommitCommands
mock_jira_client(self)tests.test_commit_commands.TestCommitCommands
mock_llm_client(self)tests.test_commit_commands.TestCommitCommands
mock_print_functions(self)tests.test_commit_commands.TestCommitCommands
test_commit_code_error_handling(self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_commit_code_with_jira_client(self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_commit_code_with_jira_connection_failure(self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_commit_code_with_llm_client(self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_handle_commit(self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config)tests.test_commit_commands.TestCommitCommands
test_setup_commit_parser(self)tests.test_commit_commands.TestCommitCommands
+
+ + + + + diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html new file mode 100644 index 0000000..c26258b --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html @@ -0,0 +1,699 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_commit_commands.TestCommitCommands Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
tests.test_commit_commands.TestCommitCommands Class Reference
+
+
+
+Collaboration diagram for tests.test_commit_commands.TestCommitCommands:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 mock_api_client (self)
 
 mock_llm_client (self)
 
 mock_jira_client (self)
 
 mock_commit_doc_gen (self)
 
 mock_git_folder_search (self)
 
 mock_print_functions (self)
 
 test_commit_code_with_llm_client (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client)
 
 test_commit_code_with_jira_client (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client)
 
 test_commit_code_with_jira_connection_failure (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client)
 
 test_commit_code_error_handling (self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client)
 
 test_setup_commit_parser (self)
 
 test_handle_commit (self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config)
 
+

Member Function Documentation

+ +

◆ mock_api_client()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_api_client ( self)
+
+
Mocks an instance of APIClient using unittest.mock.
+
+This function creates a mock object for APIClient and yields it along
+with the mocked instance. It is useful for testing purposes where real
+API calls should be avoided.
+
+Yields:
+    tuple: A tuple containing the mock of APIClient and the mocked instance of
+        APIClient.
+
+
+
+ +

◆ mock_commit_doc_gen()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_commit_doc_gen ( self)
+
+
Mocks the CommitDocGenHook class and returns a MagicMock instance.
+
+This function uses the `patch` decorator from the `unittest.mock` module
+to create a mock of the `CommitDocGenHook` class. It then sets up this
+mock to return a new `MagicMock` instance when invoked. The function
+yields both the mock object and the mocked instance, allowing for easy
+testing of functions that rely on `CommitDocGenHook`.
+
+Returns:
+    tuple: A tuple containing two elements:
+        - mock (patch): The patch object used to mock the `CommitDocGenHook`
+        class.
+        - doc_gen_instance (MagicMock): The mocked instance of
+        `CommitDocGenHook`.
+
+
+
+ +

◆ mock_git_folder_search()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_git_folder_search ( self)
+
+
Mock the `recursive_search_git_folder` function to return a predefined
+git folder path.
+
+This function uses the `patch` decorator from the `unittest.mock` module
+to intercept calls to `penify_hook.utils.recursive_search_git_folder`.
+When called, it will return '/mock/git/folder' instead of performing an
+actual search. This is useful for testing purposes where you need a
+consistent response without interacting with the file system.
+
+Yields:
+    MagicMock: A mock object that simulates the `recursive_search_git_folder` function.
+
+
+
+ +

◆ mock_jira_client()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_jira_client ( self)
+
+
Create a mock JIRA client for testing purposes.
+
+This function yields a tuple containing a mock JIRA client instance and
+its `is_connected` method. The mock client is configured to simulate an
+active connection. This is useful for unit tests that require
+interaction with a JIRA client without making actual network calls.
+
+Yields:
+    tuple: A tuple containing the mocked JIRA client instance and its
+        `is_connected` method.
+
+
+
+ +

◆ mock_llm_client()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_llm_client ( self)
+
+
Mock an instance of LLMClient for testing purposes.
+
+This function yields a mock object representing an instance of
+LLMClient, which can be used to simulate interactions with a language
+model during testing. The mock is patched to replace the actual
+LLMClient class from the penify_hook module.
+
+Yields:
+    tuple: A tuple containing two elements:
+        - mock (MagicMock): The mock object for LLMClient.
+        - llm_client_instance (MagicMock): An instance of the mocked LLMClient.
+
+
+
+ +

◆ mock_print_functions()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_print_functions ( self)
+
+
Mocks the print functions from `penify_hook.ui_utils` for testing
+purposes.
+
+This function uses Python's `unittest.mock.patch` to replace the actual
+print functions (`print`, `print_warning`, and `print_error`) with mock
+objects. These mock objects can be used in tests to capture calls made
+to these print functions without actually printing anything.
+
+Yields:
+    tuple: A tuple containing three mock objects corresponding to `print_info`,
+        `print_warning`,
+        and `print_error`.
+
+
+
+ +

◆ test_commit_code_error_handling()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling ( self,
mock_print,
mock_exit,
mock_git_folder_search,
mock_doc_gen,
mock_api_client )
+
+
Test the error handling in the test_commit_code function.
+
+This function sets up mocks to simulate exceptions and test the error
+handling of the commit_code function. It verifies that the function
+correctly prints an error message and exits with a status code of 1 when
+an exception occurs during documentation generation.
+
+Args:
+    mock_print (MagicMock): Mock for the print function, used to verify error message output.
+    mock_exit (MagicMock): Mock for the sys.exit function, used to verify exit behavior.
+    mock_git_folder_search (MagicMock): Mock for the git_folder_search function, returning a mock Git folder
+        path.
+    mock_doc_gen (MagicMock): Mock for the doc_gen function, simulating an exception during
+        documentation generation.
+    mock_api_client (MagicMock): Mock for the API client class, not directly used but referenced in the
+        function signature.
+
+
+
+ +

◆ test_commit_code_with_jira_client()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client ( self,
mock_error,
mock_warning,
mock_info,
mock_git_folder_search,
mock_doc_gen,
mock_jira_client,
mock_llm_client,
mock_api_client )
+
+
Test committing code using a JIRA client.
+
+This function tests the commit_code function with various parameters,
+including API and JIRA credentials. It sets up mock objects for
+dependencies such as the JIRA client, LLM client, and doc generator to
+simulate the behavior of the real classes. The function then calls
+commit_code and verifies that the JIRA client and doc generator are
+called with the correct parameters.
+
+Args:
+    mock_error (MagicMock): A MagicMock object for simulating error logging.
+    mock_warning (MagicMock): A MagicMock object for simulating warning logging.
+    mock_info (MagicMock): A MagicMock object for simulating info logging.
+    mock_git_folder_search (MagicMock): A MagicMock object for simulating the git folder search function.
+    mock_doc_gen (MagicMock): A MagicMock object for simulating the doc generator function.
+    mock_jira_client (MagicMock): A MagicMock object for simulating the JIRA client class.
+    mock_llm_client (MagicMock): A MagicMock object for simulating the LLM client class.
+    mock_api_client (MagicMock): A MagicMock object for simulating the API client class.
+
+
+
+ +

◆ test_commit_code_with_jira_connection_failure()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure ( self,
mock_error,
mock_warning,
mock_info,
mock_git_folder_search,
mock_doc_gen,
mock_jira_client,
mock_api_client )
+
+
Test the commit_code function when JIRA connection fails.
+
+This function tests the scenario where the JIRA connection fails during
+a code commit. It sets up various mocks to simulate different components
+of the system and then calls the `commit_code` function with specific
+parameters. The function is expected to handle the JIRA connection
+failure gracefully by logging an appropriate warning.
+
+Args:
+    mock_error (MagicMock): Mock for error logging.
+    mock_warning (MagicMock): Mock for warning logging.
+    mock_info (MagicMock): Mock for info logging.
+    mock_git_folder_search (MagicMock): Mock for searching the Git folder.
+    mock_doc_gen (MagicMock): Mock for generating documentation.
+    mock_jira_client (MagicMock): Mock for creating a JIRA client.
+    mock_api_client (MagicMock): Mock for creating an API client.
+
+
+
+ +

◆ test_commit_code_with_llm_client()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client ( self,
mock_error,
mock_warning,
mock_info,
mock_git_folder_search,
mock_doc_gen,
mock_llm_client,
mock_api_client )
+
+
Test committing code using an LLM client.
+
+This function sets up mock objects for various components and then calls
+the `commit_code` function with specified parameters. It verifies that
+the correct mocks are created and called with the appropriate arguments.
+
+Args:
+    mock_error (MagicMock): Mock object for error handling.
+    mock_warning (MagicMock): Mock object for warning logging.
+    mock_info (MagicMock): Mock object for info logging.
+    mock_git_folder_search (MagicMock): Mock object to simulate git folder search.
+    mock_doc_gen (MagicMock): Mock object for document generation.
+    mock_llm_client (MagicMock): Mock object for LLM client interaction.
+    mock_api_client (MagicMock): Mock object for API client interaction.
+
+
+
+ +

◆ test_handle_commit()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_handle_commit ( self,
mock_print_info,
mock_commit_code,
mock_get_token,
mock_get_llm_config,
mock_get_jira_config )
+
+
Test the handle_commit function with various mock objects.
+
+This function sets up mocks for retrieving LLM configuration, JIRA
+configuration, and commit code. It then creates an argument object and
+calls the handle_commit function. Finally, it verifies that the mock
+functions were called with the expected arguments.
+
+Args:
+    mock_print_info (MagicMock): Mock object for printing information.
+    mock_commit_code (MagicMock): Mock object for committing code.
+    mock_get_token (MagicMock): Mock object for retrieving API token.
+    mock_get_llm_config (MagicMock): Mock object for retrieving LLM configuration.
+    mock_get_jira_config (MagicMock): Mock object for retrieving JIRA configuration.
+
+
+
+ +

◆ test_setup_commit_parser()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser ( self)
+
+
Set up the argument parser for the commit command.
+
+This function configures an argument parser to handle various options
+for committing changes. It adds three arguments: - '-m' or '--message':
+An optional argument to specify a contextual commit message with a
+default value of "N/A". - '-e' or '--terminal': A boolean flag to open
+an edit terminal before committing. - '-d' or '--description': A boolean
+flag that, when set to False, indicates the generation of a commit
+message with title and description.
+
+Args:
+    parser (MagicMock): The argument parser to be configured.
+
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + + diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js new file mode 100644 index 0000000..1d00e21 --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js @@ -0,0 +1,15 @@ +var classtests_1_1test__commit__commands_1_1TestCommitCommands = +[ + [ "mock_api_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a7f9beb5fdd122ed9a39dd0751934d661", null ], + [ "mock_commit_doc_gen", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a4e7b42caad38d0f9162c7b490720a3b7", null ], + [ "mock_git_folder_search", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a71bfa48c9a521febb5c279cff113fbf5", null ], + [ "mock_jira_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a43b8dd6adb507ef30604cd790940b881", null ], + [ "mock_llm_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#af8f0277ac27f0e9d0a0e4bc6fcd77107", null ], + [ "mock_print_functions", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a65132bfab05d287af9eb380b73d332ab", null ], + [ "test_commit_code_error_handling", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a8288fd5a830273e48732231df0421658", null ], + [ "test_commit_code_with_jira_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a02319d7a366df3950c8c151dd7821a93", null ], + [ "test_commit_code_with_jira_connection_failure", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#ae8066d6f07122a6be89b05ddbb5bb07b", null ], + [ "test_commit_code_with_llm_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a70225e655e0ca64868d71e3c9389a218", null ], + [ "test_handle_commit", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#adc5d95c15793c4bc698a62147aab2f7a", null ], + [ "test_setup_commit_parser", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a820f1f6ac060eb4b33903e1e8a3318fe", null ] +]; \ No newline at end of file diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map new file mode 100644 index 0000000..3516f53 --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 new file mode 100644 index 0000000..18b99dc --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 @@ -0,0 +1 @@ +71c96ed0780aa2849585edbd23265cd5 \ No newline at end of file diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg new file mode 100644 index 0000000..979fc86 --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + +tests.test_commit_commands.TestCommitCommands + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands +  ++ +mock_api_client() ++ +mock_llm_client() ++ +mock_jira_client() ++ +mock_commit_doc_gen() ++ +mock_git_folder_search() ++ +mock_print_functions() ++ +test_commit_code_with +_llm_client() ++ +test_commit_code_with +_jira_client() ++ +test_commit_code_with +_jira_connection_failure() ++ +test_commit_code_error +_handling() ++ +test_setup_commit_parser() ++ +test_handle_commit() + + + + + + + + + + + + + diff --git a/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg new file mode 100644 index 0000000..34b111b --- /dev/null +++ b/docs/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg @@ -0,0 +1,54 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands +  ++ +mock_api_client() ++ +mock_llm_client() ++ +mock_jira_client() ++ +mock_commit_doc_gen() ++ +mock_git_folder_search() ++ +mock_print_functions() ++ +test_commit_code_with +_llm_client() ++ +test_commit_code_with +_jira_client() ++ +test_commit_code_with +_jira_connection_failure() ++ +test_commit_code_error +_handling() ++ +test_setup_commit_parser() ++ +test_handle_commit() + + + + + + + + diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html new file mode 100644 index 0000000..7b7ef75 --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests.test_config_commands.TestConfigCommands Member List
+
+
+ +

This is the complete list of members for tests.test_config_commands.TestConfigCommands, including all inherited members.

+ + + + + + + + + + + + + +
test_get_jira_config_exists(self, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_llm_config_empty(self, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_llm_config_exists(self, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_llm_config_invalid_json(self, mock_print, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_penify_config_existing_dir(self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)tests.test_config_commands.TestConfigCommands
test_get_penify_config_new_dir(self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)tests.test_config_commands.TestConfigCommands
test_get_token_from_config(self, mock_file_open, mock_path, mock_getenv)tests.test_config_commands.TestConfigCommands
test_get_token_from_env(self, mock_file_open, mock_path, mock_getenv)tests.test_config_commands.TestConfigCommands
test_get_token_not_found(self, mock_file_open, mock_path, mock_getenv)tests.test_config_commands.TestConfigCommands
test_save_jira_config_success(self, mock_print, mock_json_dump, mock_file_open, mock_path)tests.test_config_commands.TestConfigCommands
test_save_llm_config_failure(self, mock_print, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_save_llm_config_success(self, mock_print, mock_json_dump, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
+
+ + + + + diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html new file mode 100644 index 0000000..e2676cf --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html @@ -0,0 +1,718 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_config_commands.TestConfigCommands Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
tests.test_config_commands.TestConfigCommands Class Reference
+
+
+
+Collaboration diagram for tests.test_config_commands.TestConfigCommands:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 test_get_penify_config_existing_dir (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)
 
 test_get_penify_config_new_dir (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)
 
 test_get_llm_config_exists (self, mock_file_open, mock_get_config)
 
 test_get_llm_config_empty (self, mock_file_open, mock_get_config)
 
 test_get_llm_config_invalid_json (self, mock_print, mock_file_open, mock_get_config)
 
 test_get_jira_config_exists (self, mock_file_open, mock_get_config)
 
 test_save_llm_config_success (self, mock_print, mock_json_dump, mock_file_open, mock_get_config)
 
 test_save_llm_config_failure (self, mock_print, mock_file_open, mock_get_config)
 
 test_save_jira_config_success (self, mock_print, mock_json_dump, mock_file_open, mock_path)
 
 test_get_token_from_env (self, mock_file_open, mock_path, mock_getenv)
 
 test_get_token_from_config (self, mock_file_open, mock_path, mock_getenv)
 
 test_get_token_not_found (self, mock_file_open, mock_path, mock_getenv)
 
+

Member Function Documentation

+ +

◆ test_get_jira_config_exists()

+ +
+
+ + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists ( self,
mock_file_open,
mock_get_config )
+
+
Test that get_jira_config returns the correct JIRA configuration when
+the configuration file exists.
+
+It sets up a mock for the configuration file to simulate its existence
+and verifies that the function reads from the correct file and returns
+the expected JIRA configuration dictionary. Additionally, it checks that
+the mock file open is called with the appropriate arguments.
+
+Args:
+    mock_file_open (MagicMock): A mock for the `open` function.
+    mock_get_config (MagicMock): A mock for the `get_config` function, which is expected to return a mock
+        configuration file object.
+
+Returns:
+    None: This test function does not explicitly return anything. Its assertions
+        serve as the verification of its correctness.
+
+
+
+ +

◆ test_get_llm_config_empty()

+ +
+
+ + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty ( self,
mock_file_open,
mock_get_config )
+
+
Test the behavior of get_llm_config when called with an empty
+configuration file.
+
+This function sets up a mock configuration file that exists but returns
+no content. It then calls the `get_llm_config` function and asserts that
+it returns an empty dictionary and that the file open method was called
+exactly once with the correct arguments.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object simulating the built-in open function.
+    mock_get_config (MagicMock): A MagicMock object simulating the get_config function.
+
+
+
+ +

◆ test_get_llm_config_exists()

+ +
+
+ + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists ( self,
mock_file_open,
mock_get_config )
+
+
Test the get_llm_config function when the configuration file exists.
+
+This function sets up a mock configuration file that exists and returns
+it when called. It then calls the get_llm_config function and asserts
+that it returns the correct configuration dictionary. Additionally, it
+checks that the mock_file_open function was called with the correct
+arguments.
+
+Args:
+    mock_file_open (MagicMock): A mock for the open() function.
+    mock_get_config (MagicMock): A mock for the get_config() function.
+
+
+
+ +

◆ test_get_llm_config_invalid_json()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json ( self,
mock_print,
mock_file_open,
mock_get_config )
+
+
Test function to verify the behavior of get_llm_config when reading an
+invalid JSON file.
+
+It sets up a mock configuration file that exists but contains invalid
+JSON. The function is expected to handle this gracefully by printing an
+error message and returning an empty dictionary.
+
+Args:
+    mock_print (MagicMock): Mock for the print function.
+    mock_file_open (MagicMock): Mock for the open function.
+    mock_get_config (MagicMock): Mock for the get_config function, which returns the mock configuration
+        file.
+
+
+
+ +

◆ test_get_penify_config_existing_dir()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir ( self,
mock_file_open,
mock_makedirs,
mock_path,
mock_git_folder )
+
+
Test the get_penify_config function when the .penify config directory
+exists.
+
+It should not create a new directory and assert that all mocked
+functions were called correctly.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object simulating the open() function.
+    mock_makedirs (MagicMock): A MagicMock object simulating the os.makedirs() function.
+    mock_path (MagicMock): A MagicMock object simulating the Path class from pathlib module.
+    mock_git_folder (MagicMock): A MagicMock object simulating the git_folder_search() function.
+
+
+
+ +

◆ test_get_penify_config_new_dir()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir ( self,
mock_file_open,
mock_makedirs,
mock_path,
mock_git_folder )
+
+
Test the behavior of get_penify_config when the .penify directory does
+not exist.
+
+This function mocks various system calls to simulate a scenario where
+the .penify directory is not present. It then asserts that the
+appropriate actions are taken to create the directory and write an empty
+JSON file.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object simulating the `open` function.
+    mock_makedirs (MagicMock): A MagicMock object simulating the `os.makedirs` function.
+    mock_path (MagicMock): A MagicMock object simulating the `Path` class from `pathlib`.
+    mock_git_folder (MagicMock): A MagicMock object simulating a git folder search function.
+
+
+
+ +

◆ test_get_token_from_config()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_token_from_config ( self,
mock_file_open,
mock_path,
mock_getenv )
+
+
Test retrieving a token from the configuration.
+
+This function sets up mocks for environment variables and configuration
+files, calls the `get_token` function, and asserts its behavior. It
+verifies that when the environment variable is not found, the function
+reads a token from a configuration file located in the user's home
+directory.
+
+Args:
+    mock_file_open (MagicMock): A mock for the `open` function.
+    mock_path (MagicMock): A mock for the `pathlib.Path` class.
+    mock_getenv (MagicMock): A mock for the `os.getenv` function.
+
+
+
+ +

◆ test_get_token_from_env()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_token_from_env ( self,
mock_file_open,
mock_path,
mock_getenv )
+
+
Test retrieving a token from the environment variable.
+
+This function tests the behavior of `get_token` when an environment
+variable is set. It verifies that if the 'PENIFY_API_TOKEN' environment
+variable exists, the function returns its value without attempting to
+read a file.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object for simulating file operations.
+    mock_path (MagicMock): A MagicMock object for simulating path operations.
+    mock_getenv (MagicMock): A MagicMock object for simulating environment variable retrieval.
+
+
+
+ +

◆ test_get_token_not_found()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_token_not_found ( self,
mock_file_open,
mock_path,
mock_getenv )
+
+
Test the get_token function when the API token environment variable is
+not found.
+
+This function tests the scenario where the `PENIFY_API_TOKEN`
+environment variable is not set. It mocks the environment variable to
+return `None`, and verifies that the function returns `None`. The test
+also checks that the environment variable is accessed once and that a
+file open operation is attempted on a configuration file located in the
+user's home directory.
+
+Args:
+    mock_file_open (MagicMock): Mock for the built-in `open` function.
+    mock_path (MagicMock): Mock for the `pathlib.Path` module.
+    mock_getenv (MagicMock): Mock for the `os.getenv` function.
+
+Returns:
+    None: The function does not return anything; it asserts conditions to verify
+        correctness.
+
+
+
+ +

◆ test_save_jira_config_success()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_save_jira_config_success ( self,
mock_print,
mock_json_dump,
mock_file_open,
mock_path )
+
+
Test the save_jira_config function to ensure it saves JIRA configuration
+successfully.
+
+This function sets up mocks for various dependencies and tests the
+functionality of saving a JIRA configuration. It asserts that the
+function returns `True`, the JSON dump is called with the correct
+configuration, and the print statement contains the expected message.
+
+Args:
+    mock_print (MagicMock): Mock for the print function.
+    mock_json_dump (MagicMock): Mock for the json.dump function.
+    mock_file_open (MagicMock): Mock for the open function.
+    mock_path (MagicMock): Mock for the path module.
+
+
+
+ +

◆ test_save_llm_config_failure()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure ( self,
mock_print,
mock_file_open,
mock_get_config )
+
+
Test function to verify that the save_llm_config function returns False
+and prints an error message when it fails to save the LLM configuration
+due to a permission error.
+
+It sets up a mock configuration file that exists and calls the
+save_llm_config function with valid parameters. The function is expected
+to return False and print "Error saving LLM configuration: Permission
+denied" in case of a failure.
+
+Args:
+    self (TestLLMConfig): An instance of the test class.
+    mock_print (MagicMock): A MagicMock object representing the print function, which will be used
+        to assert that it was called with the expected error message.
+    mock_file_open (MagicMock): A MagicMock object representing the open function, which is not used in
+        this test but is included as a parameter for completeness.
+    mock_get_config (MagicMock): A MagicMock object representing the get_config function, which will be
+        used to return the mock configuration file.
+
+
+
+ +

◆ test_save_llm_config_success()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_save_llm_config_success ( self,
mock_print,
mock_json_dump,
mock_file_open,
mock_get_config )
+
+
Test the save_llm_config function successfully.
+
+This function tests that the save_llm_config function correctly saves an
+LLM configuration and handles various mock objects and side effects. It
+ensures that the function returns True upon successful execution, writes
+the expected configuration to a file, and prints a confirmation message.
+
+Args:
+    mock_print (MagicMock): A mock object for the print function.
+    mock_json_dump (MagicMock): A mock object for json.dump.
+    mock_file_open (MagicMock): A mock object for file opening.
+    mock_get_config (MagicMock): A mock object to return a configuration file mock.
+
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + + diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js new file mode 100644 index 0000000..1f30423 --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js @@ -0,0 +1,15 @@ +var classtests_1_1test__config__commands_1_1TestConfigCommands = +[ + [ "test_get_jira_config_exists", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a153e6f218be2f42581be6895a14a4e85", null ], + [ "test_get_llm_config_empty", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a29cdcf995761e77c9ff8c93e49eff541", null ], + [ "test_get_llm_config_exists", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#acd6ebd022b24b111df7cabdab4e1b6db", null ], + [ "test_get_llm_config_invalid_json", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a06d58f1b9188f2486f7e424aea40d0bd", null ], + [ "test_get_penify_config_existing_dir", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#ae9c0ef56734f17892b7ac115e488bac4", null ], + [ "test_get_penify_config_new_dir", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a335a57c003a8d797a5457c4d1c60420e", null ], + [ "test_get_token_from_config", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#ac2890b010d859d53629d9bea6a72b9c0", null ], + [ "test_get_token_from_env", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#af30db6b96dcf9e6143d6a8f5241f5be1", null ], + [ "test_get_token_not_found", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a1548cea068b4305d5a1d3ad5fb1bc25a", null ], + [ "test_save_jira_config_success", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a060996b8323f4cfd629c77b4e2605f50", null ], + [ "test_save_llm_config_failure", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2ccb8ee5c161fcf49a04404a1658100b", null ], + [ "test_save_llm_config_success", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2411d025a057beb8a2f2a6431559e64f", null ] +]; \ No newline at end of file diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map new file mode 100644 index 0000000..147384e --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 new file mode 100644 index 0000000..6d969f9 --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 @@ -0,0 +1 @@ +43afd25a19ba833341fc30c910e840f8 \ No newline at end of file diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg new file mode 100644 index 0000000..57cb02f --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + +tests.test_config_commands.TestConfigCommands + + +Node1 + + +tests.test_config_commands. +TestConfigCommands +  ++ +test_get_penify_config +_existing_dir() ++ +test_get_penify_config +_new_dir() ++ +test_get_llm_config +_exists() ++ +test_get_llm_config +_empty() ++ +test_get_llm_config +_invalid_json() ++ +test_get_jira_config +_exists() ++ +test_save_llm_config +_success() ++ +test_save_llm_config +_failure() ++ +test_save_jira_config +_success() ++ +test_get_token_from +_env() ++ +test_get_token_from +_config() ++ +test_get_token_not +_found() + + + + + + + + + + + + + diff --git a/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg new file mode 100644 index 0000000..db1925c --- /dev/null +++ b/docs/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands + + +Node1 + + +tests.test_config_commands. +TestConfigCommands +  ++ +test_get_penify_config +_existing_dir() ++ +test_get_penify_config +_new_dir() ++ +test_get_llm_config +_exists() ++ +test_get_llm_config +_empty() ++ +test_get_llm_config +_invalid_json() ++ +test_get_jira_config +_exists() ++ +test_save_llm_config +_success() ++ +test_save_llm_config +_failure() ++ +test_save_jira_config +_success() ++ +test_get_token_from +_env() ++ +test_get_token_from +_config() ++ +test_get_token_not +_found() + + + + + + + + diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html new file mode 100644 index 0000000..9403d6c --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests.test_web_config.TestWebConfig Member List
+
+
+ +

This is the complete list of members for tests.test_web_config.TestWebConfig, including all inherited members.

+ + + +
test_config_jira_web_server_setup(self, mock_resource_filename, mock_server, mock_webbrowser)tests.test_web_config.TestWebConfig
test_config_llm_web_server_setup(self, mock_resource_filename, mock_server, mock_webbrowser)tests.test_web_config.TestWebConfig
+
+ + + + + diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig.html b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig.html new file mode 100644 index 0000000..a1d6a25 --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig.html @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_web_config.TestWebConfig Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
tests.test_web_config.TestWebConfig Class Reference
+
+
+
+Collaboration diagram for tests.test_web_config.TestWebConfig:
+
+
+
+ + + + + + +

+Public Member Functions

 test_config_llm_web_server_setup (self, mock_resource_filename, mock_server, mock_webbrowser)
 
 test_config_jira_web_server_setup (self, mock_resource_filename, mock_server, mock_webbrowser)
 
+

Member Function Documentation

+ +

◆ test_config_jira_web_server_setup()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup ( self,
mock_resource_filename,
mock_server,
mock_webbrowser )
+
+
Test the configuration and setup of a JIRA web server.
+
+This function tests the entire process of setting up a JIRA web server,
+including mocking necessary resources, configuring the server to shut
+down after handling one request, and verifying that the web browser is
+opened with the correct URL. The function uses several mocks to simulate
+external dependencies such as resource files, servers, and web browsers.
+
+Args:
+    mock_resource_filename (MagicMock): A MagicMock object for simulating the `resource_filename` function.
+    mock_server (MagicMock): A MagicMock object for simulating the server setup.
+    mock_webbrowser (MagicMock): A MagicMock object for simulating the web browser opening.
+
+
+
+ +

◆ test_config_llm_web_server_setup()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup ( self,
mock_resource_filename,
mock_server,
mock_webbrowser )
+
+
Set up and test the web server configuration for an LLM (Large Language
+Model) web interface.
+
+This function configures a mock web server for testing purposes,
+including setting up resource filenames, mocking server behavior, and
+verifying that the web browser is opened and the server starts
+correctly. The function uses various mocks to simulate external
+dependencies such as `resource_filename` and `server`.
+
+Args:
+    mock_resource_filename (MagicMock): A MagicMock object simulating the `resource_filename` function.
+    mock_server (MagicMock): A MagicMock object simulating the context manager for the web server.
+    mock_webbrowser (MagicMock): A MagicMock object simulating the `webbrowser` module.
+
+
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/test_web_config.py
  • +
+
+
+ + + + + diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig.js b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig.js new file mode 100644 index 0000000..10f3ae1 --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig.js @@ -0,0 +1,5 @@ +var classtests_1_1test__web__config_1_1TestWebConfig = +[ + [ "test_config_jira_web_server_setup", "classtests_1_1test__web__config_1_1TestWebConfig.html#a63789aa9bfafe1a16b1f462174c53f6b", null ], + [ "test_config_llm_web_server_setup", "classtests_1_1test__web__config_1_1TestWebConfig.html#a881cb29c7d44f302fb961f496a20776d", null ] +]; \ No newline at end of file diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map new file mode 100644 index 0000000..5debbc3 --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 new file mode 100644 index 0000000..f63151a --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 @@ -0,0 +1 @@ +99b279c5b453f20fef555416a5139c9b \ No newline at end of file diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg new file mode 100644 index 0000000..b623549 --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + +tests.test_web_config.TestWebConfig + + +Node1 + + +tests.test_web_config.Test +WebConfig +  ++ +test_config_llm_web +_server_setup() ++ +test_config_jira_web +_server_setup() + + + + + + + + + + + + + diff --git a/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg new file mode 100644 index 0000000..dab4d66 --- /dev/null +++ b/docs/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg @@ -0,0 +1,32 @@ + + + + + + +tests.test_web_config.TestWebConfig + + +Node1 + + +tests.test_web_config.Test +WebConfig +  ++ +test_config_llm_web +_server_setup() ++ +test_config_jira_web +_server_setup() + + + + + + + + diff --git a/docs/html/clipboard.js b/docs/html/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/docs/html/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/html/closed.png b/docs/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/docs/html/commit-commands_8md.html b/docs/html/commit-commands_8md.html new file mode 100644 index 0000000..c8e2871 --- /dev/null +++ b/docs/html/commit-commands_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/commit-commands.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/commit-commands.md File Reference
+
+
+
+
+ + + + + diff --git a/docs/html/commit__analyzer_8py.html b/docs/html/commit__analyzer_8py.html new file mode 100644 index 0000000..d351ad6 --- /dev/null +++ b/docs/html/commit__analyzer_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commit_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
commit_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.commit_analyzer.CommitDocGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commit_analyzer
 
+
+
+ + + + + diff --git a/docs/html/commit__analyzer_8py.js b/docs/html/commit__analyzer_8py.js new file mode 100644 index 0000000..d7c51ca --- /dev/null +++ b/docs/html/commit__analyzer_8py.js @@ -0,0 +1,4 @@ +var commit__analyzer_8py = +[ + [ "penify_hook.commit_analyzer.CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook" ] +]; \ No newline at end of file diff --git a/docs/html/commit__commands_8py.html b/docs/html/commit__commands_8py.html new file mode 100644 index 0000000..9287fc4 --- /dev/null +++ b/docs/html/commit__commands_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands/commit_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
commit_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.commit_commands
 
+ + + + + + + +

+Functions

 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)
 
 penify_hook.commands.commit_commands.setup_commit_parser (parser)
 
 penify_hook.commands.commit_commands.handle_commit (args)
 
+
+
+ + + + + diff --git a/docs/html/commit__commands_8py.js b/docs/html/commit__commands_8py.js new file mode 100644 index 0000000..e63b07e --- /dev/null +++ b/docs/html/commit__commands_8py.js @@ -0,0 +1,6 @@ +var commit__commands_8py = +[ + [ "penify_hook.commands.commit_commands.commit_code", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6", null ], + [ "penify_hook.commands.commit_commands.handle_commit", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076", null ], + [ "penify_hook.commands.commit_commands.setup_commit_parser", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1", null ] +]; \ No newline at end of file diff --git a/docs/html/config-commands_8md.html b/docs/html/config-commands_8md.html new file mode 100644 index 0000000..b5a5aa7 --- /dev/null +++ b/docs/html/config-commands_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/config-commands.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/config-commands.md File Reference
+
+
+
+
+ + + + + diff --git a/docs/html/config__command_8py.html b/docs/html/config__command_8py.html new file mode 100644 index 0000000..8086f81 --- /dev/null +++ b/docs/html/config__command_8py.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/config_command.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
config_command.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.config_command
 
+ + + + + +

+Functions

 penify_hook.config_command.setup_config_parser (parent_parser)
 
 penify_hook.config_command.handle_config (args)
 
+
+
+ + + + + diff --git a/docs/html/config__command_8py.js b/docs/html/config__command_8py.js new file mode 100644 index 0000000..41554a2 --- /dev/null +++ b/docs/html/config__command_8py.js @@ -0,0 +1,5 @@ +var config__command_8py = +[ + [ "penify_hook.config_command.handle_config", "namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5", null ], + [ "penify_hook.config_command.setup_config_parser", "namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba", null ] +]; \ No newline at end of file diff --git a/docs/html/config__commands_8py.html b/docs/html/config__commands_8py.html new file mode 100644 index 0000000..0d2a715 --- /dev/null +++ b/docs/html/config__commands_8py.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands/config_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
config_commands.py File Reference
+
+ +
+ + + + + diff --git a/docs/html/config__commands_8py.js b/docs/html/config__commands_8py.js new file mode 100644 index 0000000..24e7120 --- /dev/null +++ b/docs/html/config__commands_8py.js @@ -0,0 +1,15 @@ +var config__commands_8py = +[ + [ "penify_hook.commands.config_commands.config_jira_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13", null ], + [ "penify_hook.commands.config_commands.config_llm_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62", null ], + [ "penify_hook.commands.config_commands.get_env_var_or_default", "namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87", null ], + [ "penify_hook.commands.config_commands.get_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2", null ], + [ "penify_hook.commands.config_commands.get_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0", null ], + [ "penify_hook.commands.config_commands.get_penify_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20", null ], + [ "penify_hook.commands.config_commands.get_token", "namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812", null ], + [ "penify_hook.commands.config_commands.load_env_files", "namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae", null ], + [ "penify_hook.commands.config_commands.save_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374", null ], + [ "penify_hook.commands.config_commands.save_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4", null ], + [ "penify_hook.commands.config_commands.DOTENV_AVAILABLE", "namespacepenify__hook_1_1commands_1_1config__commands.html#a152642ab83cf6219b604bda6122aba67", null ], + [ "penify_hook.commands.config_commands.path", "namespacepenify__hook_1_1commands_1_1config__commands.html#a79fceaf7882b9bcf1075a24262c5d7e2", null ] +]; \ No newline at end of file diff --git a/docs/html/conftest_8py.html b/docs/html/conftest_8py.html new file mode 100644 index 0000000..e149847 --- /dev/null +++ b/docs/html/conftest_8py.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/conftest.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
conftest.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  tests
 
namespace  tests.conftest
 
+
+
+ + + + + diff --git a/docs/html/constants_8py.html b/docs/html/constants_8py.html new file mode 100644 index 0000000..866bb11 --- /dev/null +++ b/docs/html/constants_8py.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/constants.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
constants.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.constants
 
+ + + + + +

+Variables

str penify_hook.constants.API_URL = 'http://localhost:8000/api'
 
str penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
 
+
+
+ + + + + diff --git a/docs/html/constants_8py.js b/docs/html/constants_8py.js new file mode 100644 index 0000000..f38739d --- /dev/null +++ b/docs/html/constants_8py.js @@ -0,0 +1,5 @@ +var constants_8py = +[ + [ "penify_hook.constants.API_URL", "namespacepenify__hook_1_1constants.html#a846767f047a1319005bc95395330ab34", null ], + [ "penify_hook.constants.DASHBOARD_URL", "namespacepenify__hook_1_1constants.html#ae4a03ab3b19d60436c72484b313079c8", null ] +]; \ No newline at end of file diff --git a/docs/html/cookie.js b/docs/html/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/html/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/html/detailed-usage_8md.html b/docs/html/detailed-usage_8md.html new file mode 100644 index 0000000..5a60cf9 --- /dev/null +++ b/docs/html/detailed-usage_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/detailed-usage.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/detailed-usage.md File Reference
+
+
+
+
+ + + + + diff --git a/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.html b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.html new file mode 100644 index 0000000..b55bf9c --- /dev/null +++ b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.html @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests Directory Reference
+
+
+
+Directory dependency graph for tests:
+
+
+
+ + + + + + + + + + + + + + +

+Files

 __init__.py
 
 conftest.py
 
 test_commit_commands.py
 
 test_config_commands.py
 
 test_doc_commands.py
 
 test_web_config.py
 
+
+
+ + + + + diff --git a/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.js b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.js new file mode 100644 index 0000000..176f804 --- /dev/null +++ b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c.js @@ -0,0 +1,9 @@ +var dir_063e2d5fe58a131099a7fe4200cca78c = +[ + [ "__init__.py", "tests_2____init_____8py.html", null ], + [ "conftest.py", "conftest_8py.html", null ], + [ "test_commit_commands.py", "test__commit__commands_8py.html", "test__commit__commands_8py" ], + [ "test_config_commands.py", "test__config__commands_8py.html", "test__config__commands_8py" ], + [ "test_doc_commands.py", "test__doc__commands_8py.html", "test__doc__commands_8py" ], + [ "test_web_config.py", "test__web__config_8py.html", "test__web__config_8py" ] +]; \ No newline at end of file diff --git a/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map new file mode 100644 index 0000000..166f772 --- /dev/null +++ b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 new file mode 100644 index 0000000..7f5e588 --- /dev/null +++ b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 @@ -0,0 +1 @@ +3fb24d19583edf6a05bd511233ba1a61 \ No newline at end of file diff --git a/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg new file mode 100644 index 0000000..002099e --- /dev/null +++ b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_063e2d5fe58a131099a7fe4200cca78c + + +tests + + + + + + + + + + diff --git a/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg new file mode 100644 index 0000000..cf04bae --- /dev/null +++ b/docs/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg @@ -0,0 +1,29 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_063e2d5fe58a131099a7fe4200cca78c + + +tests + + + + + diff --git a/docs/html/dir_1648a057408aae8db85b8e3797335623.html b/docs/html/dir_1648a057408aae8db85b8e3797335623.html new file mode 100644 index 0000000..cd434fe --- /dev/null +++ b/docs/html/dir_1648a057408aae8db85b8e3797335623.html @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
docs Directory Reference
+
+
+
+Directory dependency graph for docs:
+
+
+
+
+
+ + + + + diff --git a/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.map b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.map new file mode 100644 index 0000000..4578f4b --- /dev/null +++ b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 new file mode 100644 index 0000000..cb71a35 --- /dev/null +++ b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 @@ -0,0 +1 @@ +61882bb30c8438a03cf0f2a62ae26682 \ No newline at end of file diff --git a/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.svg b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.svg new file mode 100644 index 0000000..db00c5c --- /dev/null +++ b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_1648a057408aae8db85b8e3797335623 + + +docs + + + + + + + + + + diff --git a/docs/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg new file mode 100644 index 0000000..ed47a20 --- /dev/null +++ b/docs/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg @@ -0,0 +1,29 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_1648a057408aae8db85b8e3797335623 + + +docs + + + + + diff --git a/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html new file mode 100644 index 0000000..f36d40d --- /dev/null +++ b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
commands Directory Reference
+
+
+
+Directory dependency graph for commands:
+
+
+
+ + + + + + + + + + + + + + +

+Files

 __init__.py
 
 auth_commands.py
 
 commit_commands.py
 
 config_commands.py
 
 doc_commands.py
 
 hook_commands.py
 
+
+
+ + + + + diff --git a/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js new file mode 100644 index 0000000..94925e7 --- /dev/null +++ b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js @@ -0,0 +1,9 @@ +var dir_624fa2a8bce97f0444ac5cca335d4e23 = +[ + [ "__init__.py", "penify__hook_2commands_2____init_____8py.html", null ], + [ "auth_commands.py", "auth__commands_8py.html", "auth__commands_8py" ], + [ "commit_commands.py", "commit__commands_8py.html", "commit__commands_8py" ], + [ "config_commands.py", "config__commands_8py.html", "config__commands_8py" ], + [ "doc_commands.py", "doc__commands_8py.html", "doc__commands_8py" ], + [ "hook_commands.py", "hook__commands_8py.html", "hook__commands_8py" ] +]; \ No newline at end of file diff --git a/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map new file mode 100644 index 0000000..9ad4b43 --- /dev/null +++ b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 new file mode 100644 index 0000000..2cebf96 --- /dev/null +++ b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 @@ -0,0 +1 @@ +41a294ab55fcdda342b177a7d632b623 \ No newline at end of file diff --git a/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg new file mode 100644 index 0000000..c5bc6ee --- /dev/null +++ b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + +penify_hook + + + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + + + + + + diff --git a/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg new file mode 100644 index 0000000..2cacf57 --- /dev/null +++ b/docs/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg @@ -0,0 +1,29 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + +penify_hook + + + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + diff --git a/docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html b/docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html new file mode 100644 index 0000000..4474a6b --- /dev/null +++ b/docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify-cli Directory Reference
+
+
+ + + + + + + + +

+Directories

 docs
 
 penify_hook
 
 tests
 
+ + + +

+Files

 setup.py
 
+

Detailed Description

+

Tests Coverage

+

A CLI tool to generate smart commit messages, code documentation, and more.

+

+Features

+
    +
  • Automatically generate documentation for your code
  • +
  • Support for multiple programming languages
  • +
  • Git hook integration for automatic documentation on commits
  • +
  • Folder and file analysis
  • +
+

+Installation

+

Install from PyPI:

+
pip install penify
+

+Usage

+

Penify CLI provides several subcommands for different functionalities, organized into basic commands (no login required) and advanced commands (login required).

+

+Basic Commands (No login required)

+

+Commit

+

Generate smart commit messages using local LLM:

+
penify commit [-m "Optional message"] [-e] [-d]
+

Options:

    +
  • -m, --message: Optional custom commit message
  • +
  • -e, --terminal: Open editor to modify commit message before committing
  • +
  • -d, --description: Generate commit message with both title and description (without this flag, only title is generated)
  • +
+

+Config

+

Configure local LLM and JIRA settings:

+
# Configure LLM settings
+
penify config llm --model MODEL_NAME [--api-base API_URL] [--api-key API_KEY]
+
+
# Configure LLM settings through web interface
+
penify config llm-web
+
+
# Configure JIRA settings
+
penify config jira --url JIRA_URL --username USERNAME --api-token TOKEN [--verify]
+
+
# Configure JIRA settings through web interface
+
penify config jira-web
+

+Advanced Commands (Login required)

+

+Login

+

To log in and obtain an API token:

+
penify login
+

This command will open a browser window for authentication. After successful login, the API key will be saved locally for future use.

+

+Documentation Generation

+

Generate documentation for Git diff, files or folders:

+
# Generate documentation for latest Git commit diff
+
penify docgen
+
+
# Generate documentation for specific file or folder
+
penify docgen -l /path/to/file/or/folder
+

Options:

    +
  • -l, --location: Path to specific file or folder for documentation generation (defaults to current directory)
  • +
+

+Git Hook Management

+

Install or uninstall Git post-commit hooks:

+
# Install Git hook
+
penify docgen install-hook [-l /path/to/repo]
+
+
# Uninstall Git hook
+
penify docgen uninstall-hook [-l /path/to/repo]
+

Options:

    +
  • -l, --location: Path to the Git repository (defaults to current directory)
  • +
+

+Authentication

+

Penify CLI uses an API token for authentication with advanced features.

+

If no token is available and you try to access an advanced feature, you'll be prompted to log in.

+

+Local LLM Configuration

+

For commit message generation, Penify can use a local LLM. Configure it using:

+
penify config llm --model MODEL_NAME --api-base API_URL --api-key API_KEY
+

Common configurations:

+

+JIRA Integration

+

Configure JIRA integration to enhance commit messages with issue details:

+
penify config jira --url https://your-domain.atlassian.net --username your-email@example.com --api-token YOUR_API_TOKEN
+

+Development

+

To set up the development environment:

+
    +
  1. Clone the repository:
    git clone https://github.com/SingularityX-ai/penify-cli.git
    +
  2. +
  3. Install the package in editable mode:
    pip install -e .
    +
  4. +
+

+Running Tests

+
pytest
+

+License

+

This project is licensed under the MIT License.

+

+Author

+

Suman Saurabh (ss.su.nosp@m.mans.nosp@m.aurab.nosp@m.h92@.nosp@m.gmail.nosp@m..com)

+

+Contributing

+

Contributions are welcome! Please feel free to submit a Pull Request.

+

+Issues

+

If you encounter any problems or have suggestions, please file an issue on the GitHub repository.

+

+Support

+

For automated API Documentation, Architecture Documentation, Code Documentation, Pull Request Documentation, or if you need a demo, please join our Discord support channel.

+
+
+ + + + + diff --git a/docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js b/docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js new file mode 100644 index 0000000..f7aa196 --- /dev/null +++ b/docs/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js @@ -0,0 +1,7 @@ +var dir_b3b22d2ab7966b65f6b237e3231b41be = +[ + [ "docs", "dir_1648a057408aae8db85b8e3797335623.html", null ], + [ "penify_hook", "dir_f88c3381c1861b3f7ca1f3d63cf244b5.html", "dir_f88c3381c1861b3f7ca1f3d63cf244b5" ], + [ "tests", "dir_063e2d5fe58a131099a7fe4200cca78c.html", "dir_063e2d5fe58a131099a7fe4200cca78c" ], + [ "setup.py", "setup_8py.html", "setup_8py" ] +]; \ No newline at end of file diff --git a/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html new file mode 100644 index 0000000..29539a2 --- /dev/null +++ b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook Directory Reference
+
+
+
+Directory dependency graph for penify_hook:
+
+
+
+ + + + +

+Directories

 commands
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 __init__.py
 
 api_client.py
 
 base_analyzer.py
 
 commit_analyzer.py
 
 config_command.py
 
 constants.py
 
 file_analyzer.py
 
 folder_analyzer.py
 
 git_analyzer.py
 
 jira_client.py
 
 llm_client.py
 
 login_command.py
 
 main.py
 
 ui_utils.py
 
 utils.py
 
+
+
+ + + + + diff --git a/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js new file mode 100644 index 0000000..1be563a --- /dev/null +++ b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js @@ -0,0 +1,19 @@ +var dir_f88c3381c1861b3f7ca1f3d63cf244b5 = +[ + [ "commands", "dir_624fa2a8bce97f0444ac5cca335d4e23.html", "dir_624fa2a8bce97f0444ac5cca335d4e23" ], + [ "__init__.py", "penify__hook_2____init_____8py.html", null ], + [ "api_client.py", "api__client_8py.html", "api__client_8py" ], + [ "base_analyzer.py", "base__analyzer_8py.html", "base__analyzer_8py" ], + [ "commit_analyzer.py", "commit__analyzer_8py.html", "commit__analyzer_8py" ], + [ "config_command.py", "config__command_8py.html", "config__command_8py" ], + [ "constants.py", "constants_8py.html", "constants_8py" ], + [ "file_analyzer.py", "file__analyzer_8py.html", "file__analyzer_8py" ], + [ "folder_analyzer.py", "folder__analyzer_8py.html", "folder__analyzer_8py" ], + [ "git_analyzer.py", "git__analyzer_8py.html", "git__analyzer_8py" ], + [ "jira_client.py", "jira__client_8py.html", "jira__client_8py" ], + [ "llm_client.py", "llm__client_8py.html", "llm__client_8py" ], + [ "login_command.py", "login__command_8py.html", "login__command_8py" ], + [ "main.py", "main_8py.html", "main_8py" ], + [ "ui_utils.py", "ui__utils_8py.html", "ui__utils_8py" ], + [ "utils.py", "utils_8py.html", "utils_8py" ] +]; \ No newline at end of file diff --git a/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map new file mode 100644 index 0000000..fe220c5 --- /dev/null +++ b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 new file mode 100644 index 0000000..d0041bc --- /dev/null +++ b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 @@ -0,0 +1 @@ +bc85087cd42eec3bd3238e7d044ae1bb \ No newline at end of file diff --git a/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg new file mode 100644 index 0000000..b797414 --- /dev/null +++ b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + + + + + + +dir_f88c3381c1861b3f7ca1f3d63cf244b5 +penify_hook + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + + + + + + diff --git a/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg new file mode 100644 index 0000000..2026e9f --- /dev/null +++ b/docs/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg @@ -0,0 +1,41 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + + + + + + +dir_f88c3381c1861b3f7ca1f3d63cf244b5 +penify_hook + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + diff --git a/docs/html/doc.svg b/docs/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/doc__commands_8md.html b/docs/html/doc__commands_8md.html new file mode 100644 index 0000000..b298725 --- /dev/null +++ b/docs/html/doc__commands_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/doc_commands.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/doc_commands.md File Reference
+
+
+
+
+ + + + + diff --git a/docs/html/doc__commands_8py.html b/docs/html/doc__commands_8py.html new file mode 100644 index 0000000..9221684 --- /dev/null +++ b/docs/html/doc__commands_8py.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands/doc_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
doc_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.doc_commands
 
+ + + + + + + +

+Functions

 penify_hook.commands.doc_commands.generate_doc (api_url, token, location=None)
 
 penify_hook.commands.doc_commands.setup_docgen_parser (parser)
 
 penify_hook.commands.doc_commands.handle_docgen (args)
 
+ + + +

+Variables

str penify_hook.commands.doc_commands.docgen_description
 
+
+
+ + + + + diff --git a/docs/html/doc__commands_8py.js b/docs/html/doc__commands_8py.js new file mode 100644 index 0000000..4767b3a --- /dev/null +++ b/docs/html/doc__commands_8py.js @@ -0,0 +1,7 @@ +var doc__commands_8py = +[ + [ "penify_hook.commands.doc_commands.generate_doc", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7", null ], + [ "penify_hook.commands.doc_commands.handle_docgen", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc", null ], + [ "penify_hook.commands.doc_commands.setup_docgen_parser", "namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6", null ], + [ "penify_hook.commands.doc_commands.docgen_description", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a6dd45546559198f9f79caccd030d3588", null ] +]; \ No newline at end of file diff --git a/docs/html/docd.svg b/docs/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/doxygen-awesome-darkmode-toggle.js b/docs/html/doxygen-awesome-darkmode-toggle.js new file mode 100644 index 0000000..40fe2d3 --- /dev/null +++ b/docs/html/doxygen-awesome-darkmode-toggle.js @@ -0,0 +1,157 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeDarkModeToggle extends HTMLElement { + // SVG icons from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static lightModeIcon = `` + static darkModeIcon = `` + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static init() { + $(function() { + $(document).ready(function() { + const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') + toggleButton.title = DoxygenAwesomeDarkModeToggle.title + toggleButton.updateIcon() + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + toggleButton.updateIcon() + }) + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + toggleButton.updateIcon() + } + }); + + $(document).ready(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + $(window).resize(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || + (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) + } + + static set userPreference(userPreference) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference + if(!userPreference) { + if(DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if(!DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) + } + } + DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() + } + + static enableDarkMode(enable) { + if(enable) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + } + + static onSystemPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference + this.updateIcon() + } + + updateIcon() { + if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { + this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon + } else { + this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon + } + } +} + +customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); diff --git a/docs/html/doxygen-awesome-fragment-copy-button.js b/docs/html/doxygen-awesome-fragment-copy-button.js new file mode 100644 index 0000000..86c16fd --- /dev/null +++ b/docs/html/doxygen-awesome-fragment-copy-button.js @@ -0,0 +1,85 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeFragmentCopyButton extends HTMLElement { + constructor() { + super(); + this.onclick=this.copyContent + } + static title = "Copy to clipboard" + static copyIcon = `` + static successIcon = `` + static successDuration = 980 + static init() { + $(function() { + $(document).ready(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const fragmentWrapper = document.createElement("div") + fragmentWrapper.className = "doxygen-awesome-fragment-wrapper" + const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button") + fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon + fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title + + fragment.parentNode.replaceChild(fragmentWrapper, fragment) + fragmentWrapper.appendChild(fragment) + fragmentWrapper.appendChild(fragmentCopyButton) + + } + } + }) + }) + } + + + copyContent() { + const content = this.previousSibling.cloneNode(true) + // filter out line number from file listings + content.querySelectorAll(".lineno, .ttc").forEach((node) => { + node.remove() + }) + let textContent = content.textContent + // remove trailing newlines that appear in file listings + let numberOfTrailingNewlines = 0 + while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') { + numberOfTrailingNewlines++; + } + textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines) + navigator.clipboard.writeText(textContent); + this.classList.add("success") + this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon + window.setTimeout(() => { + this.classList.remove("success") + this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon + }, DoxygenAwesomeFragmentCopyButton.successDuration); + } +} + +customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton) diff --git a/docs/html/doxygen-awesome-interactive-toc.js b/docs/html/doxygen-awesome-interactive-toc.js new file mode 100644 index 0000000..20a9669 --- /dev/null +++ b/docs/html/doxygen-awesome-interactive-toc.js @@ -0,0 +1,81 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeInteractiveToc { + static topOffset = 38 + static hideMobileMenu = true + static headers = [] + + static init() { + window.addEventListener("load", () => { + let toc = document.querySelector(".contents > .toc") + if(toc) { + toc.classList.add("interactive") + if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) { + toc.classList.add("open") + } + document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => { + if(toc.classList.contains("open")) { + toc.classList.remove("open") + } else { + toc.classList.add("open") + } + }) + + document.querySelectorAll(".contents > .toc > ul a").forEach((node) => { + let id = node.getAttribute("href").substring(1) + DoxygenAwesomeInteractiveToc.headers.push({ + node: node, + headerNode: document.getElementById(id) + }) + + document.getElementById("doc-content")?.addEventListener("scroll", () => { + DoxygenAwesomeInteractiveToc.update() + }) + }) + DoxygenAwesomeInteractiveToc.update() + } + }) + } + + static update() { + let active = DoxygenAwesomeInteractiveToc.headers[0]?.node + DoxygenAwesomeInteractiveToc.headers.forEach((header) => { + let position = header.headerNode.getBoundingClientRect().top + header.node.classList.remove("active") + header.node.classList.remove("aboveActive") + if(position < DoxygenAwesomeInteractiveToc.topOffset) { + active = header.node + active?.classList.add("aboveActive") + } + }) + active?.classList.add("active") + active?.classList.remove("aboveActive") + } +} \ No newline at end of file diff --git a/docs/html/doxygen-awesome-paragraph-link.js b/docs/html/doxygen-awesome-paragraph-link.js new file mode 100644 index 0000000..e53d132 --- /dev/null +++ b/docs/html/doxygen-awesome-paragraph-link.js @@ -0,0 +1,51 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeParagraphLink { + // Icon from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static icon = `` + static title = "Permanent Link" + static init() { + $(function() { + $(document).ready(function() { + document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => { + let anchorlink = document.createElement("a") + anchorlink.setAttribute("href", `#${node.getAttribute("id")}`) + anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title) + anchorlink.classList.add("anchorlink") + node.classList.add("anchor") + anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon + node.parentElement.appendChild(anchorlink) + }) + }) + }) + } +} diff --git a/docs/html/doxygen-awesome-sidebar-only-darkmode-toggle.css b/docs/html/doxygen-awesome-sidebar-only-darkmode-toggle.css new file mode 100644 index 0000000..d207446 --- /dev/null +++ b/docs/html/doxygen-awesome-sidebar-only-darkmode-toggle.css @@ -0,0 +1,40 @@ + +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +@media screen and (min-width: 768px) { + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height)); + } +} diff --git a/docs/html/doxygen-awesome-sidebar-only.css b/docs/html/doxygen-awesome-sidebar-only.css new file mode 100644 index 0000000..853f6d6 --- /dev/null +++ b/docs/html/doxygen-awesome-sidebar-only.css @@ -0,0 +1,116 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/docs/html/doxygen-awesome-tabs.js b/docs/html/doxygen-awesome-tabs.js new file mode 100644 index 0000000..06dfd3d --- /dev/null +++ b/docs/html/doxygen-awesome-tabs.js @@ -0,0 +1,90 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeTabs { + + static init() { + window.addEventListener("load", () => { + document.querySelectorAll(".tabbed:not(:empty)").forEach((tabbed, tabbedIndex) => { + let tabLinkList = [] + tabbed.querySelectorAll(":scope > ul > li").forEach((tab, tabIndex) => { + tab.id = "tab_" + tabbedIndex + "_" + tabIndex + let header = tab.querySelector(".tab-title") + let tabLink = document.createElement("button") + tabLink.classList.add("tab-button") + tabLink.appendChild(header) + header.title = header.textContent + tabLink.addEventListener("click", () => { + tabbed.querySelectorAll(":scope > ul > li").forEach((tab) => { + tab.classList.remove("selected") + }) + tabLinkList.forEach((tabLink) => { + tabLink.classList.remove("active") + }) + tab.classList.add("selected") + tabLink.classList.add("active") + }) + tabLinkList.push(tabLink) + if(tabIndex == 0) { + tab.classList.add("selected") + tabLink.classList.add("active") + } + }) + let tabsOverview = document.createElement("div") + tabsOverview.classList.add("tabs-overview") + let tabsOverviewContainer = document.createElement("div") + tabsOverviewContainer.classList.add("tabs-overview-container") + tabLinkList.forEach((tabLink) => { + tabsOverview.appendChild(tabLink) + }) + tabsOverviewContainer.appendChild(tabsOverview) + tabbed.before(tabsOverviewContainer) + + function resize() { + let maxTabHeight = 0 + tabbed.querySelectorAll(":scope > ul > li").forEach((tab, tabIndex) => { + let visibility = tab.style.display + tab.style.display = "block" + maxTabHeight = Math.max(tab.offsetHeight, maxTabHeight) + tab.style.display = visibility + }) + tabbed.style.height = `${maxTabHeight + 10}px` + } + + resize() + new ResizeObserver(resize).observe(tabbed) + }) + }) + + } + + static resize(tabbed) { + + } +} \ No newline at end of file diff --git a/docs/html/doxygen-awesome.css b/docs/html/doxygen-awesome.css new file mode 100644 index 0000000..a44945b --- /dev/null +++ b/docs/html/doxygen-awesome.css @@ -0,0 +1,2675 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 0 var(--separator-color), + -100px 0 0 var(--separator-color), + 500px 0 0 var(--separator-color), + -500px 0 0 var(--separator-color), + 1500px 0 0 var(--separator-color), + -1500px 0 0 var(--separator-color), + 2000px 0 0 var(--separator-color), + -2000px 0 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css new file mode 100644 index 0000000..90fba19 --- /dev/null +++ b/docs/html/doxygen.css @@ -0,0 +1,1849 @@ +/* The standard CSS for doxygen 1.13.2*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/doxygen_crawl.html b/docs/html/doxygen_crawl.html new file mode 100644 index 0000000..5fbdbf7 --- /dev/null +++ b/docs/html/doxygen_crawl.html @@ -0,0 +1,447 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js new file mode 100644 index 0000000..3cc426a --- /dev/null +++ b/docs/html/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/docs/html/example-workflows_8md.html b/docs/html/example-workflows_8md.html new file mode 100644 index 0000000..7b1b2de --- /dev/null +++ b/docs/html/example-workflows_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/example-workflows.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/example-workflows.md File Reference
+
+
+
+
+ + + + + diff --git a/docs/html/file__analyzer_8py.html b/docs/html/file__analyzer_8py.html new file mode 100644 index 0000000..23c8e9c --- /dev/null +++ b/docs/html/file__analyzer_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/file_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
file_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.file_analyzer.FileAnalyzerGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.file_analyzer
 
+ + + +

+Variables

 penify_hook.file_analyzer.logger = logging.getLogger(__name__)
 
+
+
+ + + + + diff --git a/docs/html/file__analyzer_8py.js b/docs/html/file__analyzer_8py.js new file mode 100644 index 0000000..5890a99 --- /dev/null +++ b/docs/html/file__analyzer_8py.js @@ -0,0 +1,5 @@ +var file__analyzer_8py = +[ + [ "penify_hook.file_analyzer.FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook" ], + [ "penify_hook.file_analyzer.logger", "namespacepenify__hook_1_1file__analyzer.html#af419a4965f079d58cac5a5281ddb1828", null ] +]; \ No newline at end of file diff --git a/docs/html/files.html b/docs/html/files.html new file mode 100644 index 0000000..332d17f --- /dev/null +++ b/docs/html/files.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + +penify-cli: File List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+ +
+ + + + + diff --git a/docs/html/files_dup.js b/docs/html/files_dup.js new file mode 100644 index 0000000..dd5a1a9 --- /dev/null +++ b/docs/html/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "penify-cli", "dir_b3b22d2ab7966b65f6b237e3231b41be.html", "dir_b3b22d2ab7966b65f6b237e3231b41be" ] +]; \ No newline at end of file diff --git a/docs/html/folder__analyzer_8py.html b/docs/html/folder__analyzer_8py.html new file mode 100644 index 0000000..893e4f1 --- /dev/null +++ b/docs/html/folder__analyzer_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/folder_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
folder_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.folder_analyzer.FolderAnalyzerGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.folder_analyzer
 
+
+
+ + + + + diff --git a/docs/html/folder__analyzer_8py.js b/docs/html/folder__analyzer_8py.js new file mode 100644 index 0000000..f51e8e5 --- /dev/null +++ b/docs/html/folder__analyzer_8py.js @@ -0,0 +1,4 @@ +var folder__analyzer_8py = +[ + [ "penify_hook.folder_analyzer.FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook" ] +]; \ No newline at end of file diff --git a/docs/html/folderclosed.svg b/docs/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderclosedd.svg b/docs/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderopen.svg b/docs/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/html/folderopend.svg b/docs/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/functions.html b/docs/html/functions.html new file mode 100644 index 0000000..5b5a3ec --- /dev/null +++ b/docs/html/functions.html @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- j -

+ + +

- l -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+
+ + + + + diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html new file mode 100644 index 0000000..4959e6d --- /dev/null +++ b/docs/html/functions_func.html @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Members - Functions + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+
+ + + + + diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html new file mode 100644 index 0000000..a644568 --- /dev/null +++ b/docs/html/functions_vars.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Members - Variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/git__analyzer_8py.html b/docs/html/git__analyzer_8py.html new file mode 100644 index 0000000..a39d0a6 --- /dev/null +++ b/docs/html/git__analyzer_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/git_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
git_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.git_analyzer.GitDocGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.git_analyzer
 
+ + + +

+Variables

 penify_hook.git_analyzer.logger = logging.getLogger(__name__)
 
+
+
+ + + + + diff --git a/docs/html/git__analyzer_8py.js b/docs/html/git__analyzer_8py.js new file mode 100644 index 0000000..5aa8368 --- /dev/null +++ b/docs/html/git__analyzer_8py.js @@ -0,0 +1,5 @@ +var git__analyzer_8py = +[ + [ "penify_hook.git_analyzer.GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook" ], + [ "penify_hook.git_analyzer.logger", "namespacepenify__hook_1_1git__analyzer.html#ac4ce143fdca789a79c66852c37d7363a", null ] +]; \ No newline at end of file diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html new file mode 100644 index 0000000..c2bcfdd --- /dev/null +++ b/docs/html/graph_legend.html @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Graph Legend + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+
+ + + + + diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 new file mode 100644 index 0000000..34a71d6 --- /dev/null +++ b/docs/html/graph_legend.md5 @@ -0,0 +1 @@ +238bc3d95adc1929b3259d0c39010ed6 \ No newline at end of file diff --git a/docs/html/graph_legend.svg b/docs/html/graph_legend.svg new file mode 100644 index 0000000..f90d1bf --- /dev/null +++ b/docs/html/graph_legend.svg @@ -0,0 +1,167 @@ + + + + + + +Graph Legend + + +Node9 + + +Inherited + + + + + +Node10 + + +PublicBase + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Truncated + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +ProtectedBase + + + + + +Node13->Node9 + + + + + + + + +Node14 + + +PrivateBase + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +Undocumented + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +Templ< int > + + + + + +Node16->Node9 + + + + + + + + +Node17 + + +Templ< T > + + + + + +Node17->Node16 + + + + + +< int > + + + +Node18 + + +Used + + + + + +Node18->Node9 + + + + + +m_usedClass + + + diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html new file mode 100644 index 0000000..c5a32d8 --- /dev/null +++ b/docs/html/hierarchy.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js new file mode 100644 index 0000000..6af7a4f --- /dev/null +++ b/docs/html/hierarchy.js @@ -0,0 +1,18 @@ +var hierarchy = +[ + [ "penify_hook.api_client.APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", null ], + [ "penify_hook.base_analyzer.BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", [ + [ "penify_hook.commit_analyzer.CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", null ], + [ "penify_hook.file_analyzer.FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", null ], + [ "penify_hook.folder_analyzer.FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", null ], + [ "penify_hook.git_analyzer.GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", null ] + ] ], + [ "Exception", "classException.html", [ + [ "penify_hook.utils.GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ] + ] ], + [ "penify_hook.jira_client.JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", null ], + [ "penify_hook.llm_client.LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", null ], + [ "tests.test_commit_commands.TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", null ], + [ "tests.test_config_commands.TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", null ], + [ "tests.test_web_config.TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", null ] +]; \ No newline at end of file diff --git a/docs/html/hook__commands_8py.html b/docs/html/hook__commands_8py.html new file mode 100644 index 0000000..4cf626d --- /dev/null +++ b/docs/html/hook__commands_8py.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands/hook_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
hook_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.hook_commands
 
+ + + + + +

+Functions

 penify_hook.commands.hook_commands.install_git_hook (location, token)
 
 penify_hook.commands.hook_commands.uninstall_git_hook (location)
 
+ + + + + +

+Variables

str penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit"
 
str penify_hook.commands.hook_commands.HOOK_TEMPLATE
 
+
+
+ + + + + diff --git a/docs/html/hook__commands_8py.js b/docs/html/hook__commands_8py.js new file mode 100644 index 0000000..d8d8532 --- /dev/null +++ b/docs/html/hook__commands_8py.js @@ -0,0 +1,7 @@ +var hook__commands_8py = +[ + [ "penify_hook.commands.hook_commands.install_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135", null ], + [ "penify_hook.commands.hook_commands.uninstall_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443", null ], + [ "penify_hook.commands.hook_commands.HOOK_FILENAME", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a978b976442fbf28c29c8d0f889bfae9c", null ], + [ "penify_hook.commands.hook_commands.HOOK_TEMPLATE", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a51fc390518d967f2a1e21280d7ea781b", null ] +]; \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..074bbd9 --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Main Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify-cli Documentation
+
+
+ +
+
+ + + + + diff --git a/docs/html/inherit_graph_0.map b/docs/html/inherit_graph_0.map new file mode 100644 index 0000000..406384b --- /dev/null +++ b/docs/html/inherit_graph_0.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/inherit_graph_0.md5 b/docs/html/inherit_graph_0.md5 new file mode 100644 index 0000000..ea96ec0 --- /dev/null +++ b/docs/html/inherit_graph_0.md5 @@ -0,0 +1 @@ +3eb6427f44b1f537abaa72acbefc02c8 \ No newline at end of file diff --git a/docs/html/inherit_graph_0.svg b/docs/html/inherit_graph_0.svg new file mode 100644 index 0000000..44609dd --- /dev/null +++ b/docs/html/inherit_graph_0.svg @@ -0,0 +1,40 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +Exception + + + + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError + + + + + +Node0->Node1 + + + + + + + + diff --git a/docs/html/inherit_graph_1.map b/docs/html/inherit_graph_1.map new file mode 100644 index 0000000..a3a551d --- /dev/null +++ b/docs/html/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_1.md5 b/docs/html/inherit_graph_1.md5 new file mode 100644 index 0000000..f27860d --- /dev/null +++ b/docs/html/inherit_graph_1.md5 @@ -0,0 +1 @@ +30ab7e0f934acf6ce02c608f7b130af8 \ No newline at end of file diff --git a/docs/html/inherit_graph_1.svg b/docs/html/inherit_graph_1.svg new file mode 100644 index 0000000..9381d53 --- /dev/null +++ b/docs/html/inherit_graph_1.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.api_client.APIClient + + + + + diff --git a/docs/html/inherit_graph_2.map b/docs/html/inherit_graph_2.map new file mode 100644 index 0000000..5adb40c --- /dev/null +++ b/docs/html/inherit_graph_2.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/inherit_graph_2.md5 b/docs/html/inherit_graph_2.md5 new file mode 100644 index 0000000..c36e284 --- /dev/null +++ b/docs/html/inherit_graph_2.md5 @@ -0,0 +1 @@ +874705f4d60bd6db03044e05449f2c1a \ No newline at end of file diff --git a/docs/html/inherit_graph_2.svg b/docs/html/inherit_graph_2.svg new file mode 100644 index 0000000..21b60f3 --- /dev/null +++ b/docs/html/inherit_graph_2.svg @@ -0,0 +1,98 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.base_analyzer. +BaseAnalyzer + + + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook + + + + + +Node0->Node1 + + + + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook + + + + + +Node0->Node2 + + + + + + + + +Node3 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook + + + + + +Node0->Node3 + + + + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook + + + + + +Node0->Node4 + + + + + + + + diff --git a/docs/html/inherit_graph_3.map b/docs/html/inherit_graph_3.map new file mode 100644 index 0000000..69418a3 --- /dev/null +++ b/docs/html/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_3.md5 b/docs/html/inherit_graph_3.md5 new file mode 100644 index 0000000..bf0a2c8 --- /dev/null +++ b/docs/html/inherit_graph_3.md5 @@ -0,0 +1 @@ +af6bb0b4f75102cbee5ca7be41f73a3a \ No newline at end of file diff --git a/docs/html/inherit_graph_3.svg b/docs/html/inherit_graph_3.svg new file mode 100644 index 0000000..ea65e68 --- /dev/null +++ b/docs/html/inherit_graph_3.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.jira_client. +JiraClient + + + + + diff --git a/docs/html/inherit_graph_4.map b/docs/html/inherit_graph_4.map new file mode 100644 index 0000000..030b056 --- /dev/null +++ b/docs/html/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_4.md5 b/docs/html/inherit_graph_4.md5 new file mode 100644 index 0000000..ffe5e19 --- /dev/null +++ b/docs/html/inherit_graph_4.md5 @@ -0,0 +1 @@ +889026fbb54979a4167ba59a47d79890 \ No newline at end of file diff --git a/docs/html/inherit_graph_4.svg b/docs/html/inherit_graph_4.svg new file mode 100644 index 0000000..1f83fb0 --- /dev/null +++ b/docs/html/inherit_graph_4.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.llm_client.LLMClient + + + + + diff --git a/docs/html/inherit_graph_5.map b/docs/html/inherit_graph_5.map new file mode 100644 index 0000000..c211868 --- /dev/null +++ b/docs/html/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_5.md5 b/docs/html/inherit_graph_5.md5 new file mode 100644 index 0000000..9ad4789 --- /dev/null +++ b/docs/html/inherit_graph_5.md5 @@ -0,0 +1 @@ +70fd9fd520f30c258462f2b03b683a94 \ No newline at end of file diff --git a/docs/html/inherit_graph_5.svg b/docs/html/inherit_graph_5.svg new file mode 100644 index 0000000..aab0886 --- /dev/null +++ b/docs/html/inherit_graph_5.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +tests.test_commit_commands. +TestCommitCommands + + + + + diff --git a/docs/html/inherit_graph_6.map b/docs/html/inherit_graph_6.map new file mode 100644 index 0000000..6e6be2f --- /dev/null +++ b/docs/html/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_6.md5 b/docs/html/inherit_graph_6.md5 new file mode 100644 index 0000000..da0026d --- /dev/null +++ b/docs/html/inherit_graph_6.md5 @@ -0,0 +1 @@ +50eefd0e039ff697d7ac30f0ea20cb79 \ No newline at end of file diff --git a/docs/html/inherit_graph_6.svg b/docs/html/inherit_graph_6.svg new file mode 100644 index 0000000..fddd160 --- /dev/null +++ b/docs/html/inherit_graph_6.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +tests.test_config_commands. +TestConfigCommands + + + + + diff --git a/docs/html/inherit_graph_7.map b/docs/html/inherit_graph_7.map new file mode 100644 index 0000000..31cf321 --- /dev/null +++ b/docs/html/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_7.md5 b/docs/html/inherit_graph_7.md5 new file mode 100644 index 0000000..ac4cccf --- /dev/null +++ b/docs/html/inherit_graph_7.md5 @@ -0,0 +1 @@ +3b375f5c24cefc177dd2f4d4819b5727 \ No newline at end of file diff --git a/docs/html/inherit_graph_7.svg b/docs/html/inherit_graph_7.svg new file mode 100644 index 0000000..541f678 --- /dev/null +++ b/docs/html/inherit_graph_7.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +tests.test_web_config.Test +WebConfig + + + + + diff --git a/docs/html/inherits.html b/docs/html/inherits.html new file mode 100644 index 0000000..0ceb0f5 --- /dev/null +++ b/docs/html/inherits.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + +
+
+
+ + + + + diff --git a/docs/html/jira__client_8py.html b/docs/html/jira__client_8py.html new file mode 100644 index 0000000..ae3b9d7 --- /dev/null +++ b/docs/html/jira__client_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/jira_client.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jira_client.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.jira_client.JiraClient
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.jira_client
 
+ + + +

+Variables

bool penify_hook.jira_client.JIRA_AVAILABLE = True
 
+
+
+ + + + + diff --git a/docs/html/jira__client_8py.js b/docs/html/jira__client_8py.js new file mode 100644 index 0000000..f2f0342 --- /dev/null +++ b/docs/html/jira__client_8py.js @@ -0,0 +1,5 @@ +var jira__client_8py = +[ + [ "penify_hook.jira_client.JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", "classpenify__hook_1_1jira__client_1_1JiraClient" ], + [ "penify_hook.jira_client.JIRA_AVAILABLE", "namespacepenify__hook_1_1jira__client.html#a5593ea3415081eca1eea92e4c1ad1aa2", null ] +]; \ No newline at end of file diff --git a/docs/html/jquery.js b/docs/html/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/docs/html/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/html/llm__client_8py.html b/docs/html/llm__client_8py.html new file mode 100644 index 0000000..7052743 --- /dev/null +++ b/docs/html/llm__client_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/llm_client.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
llm_client.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.llm_client.LLMClient
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.llm_client
 
+
+
+ + + + + diff --git a/docs/html/llm__client_8py.js b/docs/html/llm__client_8py.js new file mode 100644 index 0000000..afd0616 --- /dev/null +++ b/docs/html/llm__client_8py.js @@ -0,0 +1,4 @@ +var llm__client_8py = +[ + [ "penify_hook.llm_client.LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", "classpenify__hook_1_1llm__client_1_1LLMClient" ] +]; \ No newline at end of file diff --git a/docs/html/login__command_8py.html b/docs/html/login__command_8py.html new file mode 100644 index 0000000..483d790 --- /dev/null +++ b/docs/html/login__command_8py.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/login_command.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
login_command.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.login_command
 
+ + + + + +

+Functions

 penify_hook.login_command.setup_login_parser (parser)
 
 penify_hook.login_command.handle_login (args)
 
+
+
+ + + + + diff --git a/docs/html/login__command_8py.js b/docs/html/login__command_8py.js new file mode 100644 index 0000000..f2fc81c --- /dev/null +++ b/docs/html/login__command_8py.js @@ -0,0 +1,5 @@ +var login__command_8py = +[ + [ "penify_hook.login_command.handle_login", "namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411", null ], + [ "penify_hook.login_command.setup_login_parser", "namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235", null ] +]; \ No newline at end of file diff --git a/docs/html/main_8py.html b/docs/html/main_8py.html new file mode 100644 index 0000000..0ad7ac6 --- /dev/null +++ b/docs/html/main_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/main.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
main.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.main
 
+ + + +

+Functions

 penify_hook.main.main ()
 
+
+
+ + + + + diff --git a/docs/html/main_8py.js b/docs/html/main_8py.js new file mode 100644 index 0000000..fac2812 --- /dev/null +++ b/docs/html/main_8py.js @@ -0,0 +1,4 @@ +var main_8py = +[ + [ "penify_hook.main.main", "namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb", null ] +]; \ No newline at end of file diff --git a/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html new file mode 100644 index 0000000..527bb2f --- /dev/null +++ b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Commit Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Commit Commands
+
+
+

+

The commit command allows you to generate smart, AI-powered commit messages for your Git changes. This document explains all available options and combinations.

+

+Basic Usage

+
penify commit
+

By default, this command:

    +
  • Analyzes your staged Git changes
  • +
  • Generates a concise commit title only
  • +
  • Uses local LLM if configured, or falls back to Penify API
  • +
+

+Command Options

+

+-m, --message

+

Provide context for the commit message generation:

+
penify commit -m "Fix login flow"
+

This hint helps the AI understand your intention and improves the quality of the generated message.

+

+-e, --terminal

+

Open an editor to review and edit the generated commit message before committing:

+
penify commit -e
+

This opens your default Git editor with the generated message for review.

+

+-d, --description

+

Generate a detailed commit message with both title and description:

+
penify commit -d
+

Without this flag, only the commit title is generated.

+

+Option Combinations

+

You can combine these options for different workflows:

+

+Generate Title Only with Context

+
penify commit -m "Update login UI"
+

+Generate Title and Description with Context

+
penify commit -m "Update login UI" -d
+

+Generate and Edit Full Commit Message

+
penify commit -d -e
+

+Generate, Edit, and Provide Context

+
penify commit -m "Refactor authentication" -d -e
+

+LLM and JIRA Integration

+

+Using Local LLM

+

If you've configured a local LLM using penify config llm, the commit command will automatically use it for message generation.

+

Benefits:

    +
  • Privacy: your code changes don't leave your machine
  • +
  • Speed: no network latency
  • +
  • Works offline
  • +
+

+JIRA Enhancement

+

If you've configured JIRA integration using penify config jira, the commit command will:

+
    +
  1. Detect JIRA issue references in your changes
  2. +
  3. Fetch issue details from your JIRA instance
  4. +
  5. Include issue information in the commit message
  6. +
  7. Format the commit message according to JIRA's smart commit format
  8. +
+

Example output:

PROJ-123: Fix authentication bug in login flow
+
+
- Updated OAuth token validation
+
- Fixed session timeout handling
+
- Added unit tests for edge cases
+
+
[PROJ-123]
+

+Configuration Requirements

+

For the commit command to work:

+
    +
  1. You must have configured either:
      +
    • Local LLM via penify config llm, OR
    • +
    • Logged in via penify login
    • +
    +
  2. +
  3. For JIRA enhancement (optional):
      +
    • Configure JIRA via penify config jira
    • +
    +
  4. +
+

+Examples

+

+Basic Commit with Default Settings

+
# Stage your changes
+
git add .
+
+
# Generate commit message
+
penify commit
+
+
# Commit with the generated message
+
git commit -m "Generated message here"
+

+Full Workflow with All Features

+
# Stage your changes
+
git add .
+
+
# Generate detailed commit message with JIRA integration,
+
# provide context, and open editor for review
+
penify commit -m "Fix login issue" -d -e
+
+
# The commit is automatically completed after you save and exit the editor
+

+Troubleshooting

+

+Common Issues

+
    +
  1. "No LLM model or API token provided"
      +
    • Run penify config llm to configure a local LLM, or
    • +
    • Run penify login to authenticate with Penify
    • +
    +
  2. +
  3. "Failed to connect to JIRA"
      +
    • Check your JIRA configuration with cat ~/.penify
    • +
    • Verify your network connection
    • +
    • Ensure your JIRA credentials are valid
    • +
    +
  4. +
  5. "Error initializing LLM client"
      +
    • Verify your LLM configuration settings
    • +
    • Ensure the LLM API is accessible
    • +
    +
  6. +
+
+
+
+ + + + + diff --git a/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html new file mode 100644 index 0000000..0ba592c --- /dev/null +++ b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Configuration Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Configuration Commands
+
+
+

+

The 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.

+

+Configuration Overview

+

Penify CLI stores configuration in a JSON file at ~/.penify/config.json. The configuration includes:

+
    +
  • LLM (Large Language Model) settings for local commit message generation
  • +
  • JIRA integration settings for enhanced commit messages
  • +
  • API tokens and other credentials
  • +
+

+Basic Usage

+
# Configure LLM settings
+
penify config llm
+
+
# Configure JIRA integration
+
penify config jira
+

+LLM Configuration

+

+Web Interface

+

Running penify config llm opens a web interface in your browser where you can configure:

+
    +
  1. Model: The LLM model to use (e.g., gpt-3.5-turbo)
  2. +
  3. API Base URL: The endpoint URL for your LLM API (e.g., https://api.openai.com/v1)
  4. +
  5. API Key: Your authentication key for the LLM API
  6. +
+

+Supported LLMs

+

Penify CLI supports various LLM providers:

+

+OpenAI

+ +

+Anthropic

+ +

+Ollama (Local)

+ +

+Azure OpenAI

+
    +
  • Model: Your deployed model name
  • +
  • API Base: Your Azure endpoint
  • +
  • API Key: Your Azure API key
  • +
+

+Configuration File Structure

+

After configuration, your ~/.penify/config.json will contain:

+
{
+
"llm": {
+
"model": "gpt-3.5-turbo",
+
"api_base": "https://api.openai.com/v1",
+
"api_key": "sk-..."
+
}
+
}
+

+JIRA Configuration

+

+Web Interface

+

Running penify config jira opens a web interface where you can configure:

+
    +
  1. JIRA URL: Your JIRA instance URL (e.g., https://yourcompany.atlassian.net)
  2. +
  3. Username: Your JIRA username (typically your email)
  4. +
  5. API Token: Your JIRA API token
  6. +
+

+Creating a JIRA API Token

+
    +
  1. Log in to https://id.atlassian.com/manage-profile/security/api-tokens
  2. +
  3. Click "Create API token"
  4. +
  5. Give it a name (e.g., "Penify CLI")
  6. +
  7. Copy the generated token and paste it into the configuration
  8. +
+

+Configuration File Structure

+

After configuration, your ~/.penify/config.json will contain:

+
{
+
"jira": {
+
"url": "https://yourcompany.atlassian.net",
+
"username": "your.email@example.com",
+
"api_token": "your-jira-api-token"
+
}
+
}
+

+Configuration Locations

+

Penify CLI looks for configuration in multiple locations:

+
    +
  1. Project-specific: .penify/config.json in the Git repository root
  2. +
  3. User-specific: ~/.penify/config.json in your home directory
  4. +
+

The project-specific configuration takes precedence if both exist.

+

+Environment Variables

+

You can override configuration settings using environment variables:

+
    +
  • PENIFY_API_TOKEN: Override the stored API token
  • +
  • PENIFY_LLM_MODEL: Override the configured LLM model
  • +
  • PENIFY_LLM_API_BASE: Override the configured LLM API base URL
  • +
  • PENIFY_LLM_API_KEY: Override the configured LLM API key
  • +
  • PENIFY_JIRA_URL: Override the configured JIRA URL
  • +
  • PENIFY_JIRA_USER: Override the configured JIRA username
  • +
  • PENIFY_JIRA_TOKEN: Override the configured JIRA API token
  • +
+

Example:

export PENIFY_LLM_MODEL="gpt-4"
+
penify commit
+

+Command-Line Configuration

+

For advanced users or scripting, you can directly edit the configuration file:

+
# View current configuration
+
cat ~/.penify/config.json
+
+
# Edit configuration with your preferred editor
+
nano ~/.penify/config.json
+

+Sharing Configuration

+

You can share configuration between machines by copying the .penify/config.json file. However, be cautious with API keys and credentials.

+

For team settings, consider:

    +
  1. Using a project-specific .penify/config.json with shared settings
  2. +
  3. Excluding API keys from shared configuration
  4. +
  5. Using environment variables for sensitive credentials
  6. +
+

+Troubleshooting

+

+Common Issues

+
    +
  1. "Error reading configuration file"
      +
    • Check if the file exists: ls -la ~/.penify
    • +
    • Ensure it contains valid JSON: cat ~/.penify/config.json
    • +
    +
  2. +
  3. "Failed to connect to LLM API"
      +
    • Verify API base URL and API key
    • +
    • Check network connectivity to the API endpoint
    • +
    • Ensure your account has access to the specified model
    • +
    +
  4. +
  5. "Failed to connect to JIRA"
      +
    • Check JIRA URL format (should include https://)
    • +
    • Verify username and API token
    • +
    • Ensure your JIRA account has API access permissions
    • +
    +
  6. +
+
+
+
+ + + + + diff --git a/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html new file mode 100644 index 0000000..de2780e --- /dev/null +++ b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Detailed Usage Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Detailed Usage Guide
+
+
+

+

This document provides in-depth information about all features and capabilities of the Penify CLI tool.

+

+Table of Contents

+
    +
  • Penify CLI - Detailed Usage Guide
      +
    • Table of Contents
    • +
    • Authentication
        +
      • Login Process
      • +
      • API Token Storage
      • +
      • Token Precedence
      • +
      +
    • +
    • Command Overview
    • +
    • Commit Message Generation
    • +
    • Code Documentation Generation
        +
      • Use Cases
      • +
      • Authentication Requirement
      • +
      +
    • +
    • Configuration Settings
    • +
    • Git Hooks
        +
      • Post-Commit Hook
      • +
      • Custom Hook Location
      • +
      +
    • +
    • Advanced Use Cases
        +
      • CI/CD Integration
      • +
      • Remote Repository Documentation
      • +
      +
    • +
    • Troubleshooting
        +
      • Common Issues
      • +
      • Logs
      • +
      • Support
      • +
      +
    • +
    +
  • +
+

+Authentication

+

+Login Process

+

When you run penify login, the tool:

+
    +
  1. Opens your default web browser
  2. +
  3. Redirects you to Penify's login page
  4. +
  5. Captures the authentication token after successful login
  6. +
  7. Saves the token in ~/.penify file
  8. +
+

+API Token Storage

+

API tokens are stored in your home directory in the .penify file. This JSON file contains:

+
{
+
"api_keys": "your-api-token",
+
"llm": { "model": "...", "api_base": "...", "api_key": "..." },
+
"jira": { "url": "...", "username": "...", "api_token": "..." }
+
}
+

+Token Precedence

+
    +
  1. Environment variable PENIFY_API_TOKEN (highest priority)
  2. +
  3. Token in ~/.penify file
  4. +
+

+Command Overview

+
penify
+
├── commit Generate smart commit messages
+
├── config Configure local LLM and JIRA
+
│ ├── llm Configure local LLM settings
+
│ └── jira Configure JIRA integration
+
├── login Log in to Penify account
+
└── docgen Generate code documentation
+
├── install-hook Install Git post-commit hook
+
└── uninstall-hook Remove Git post-commit hook
+

+Commit Message Generation

+

The commit command analyzes your staged changes and generates meaningful commit messages. It can:

+
    +
  • Use a local LLM if configured
  • +
  • Enhance messages with JIRA issue details
  • +
  • Provide both title and description
  • +
+

For specific options and examples, see docs/commit-commands.md.

+

+Code Documentation Generation

+

The docgen command generates documentation for your code:

+

+Use Cases

+
    +
  1. Current Git Diff: Default behavior, documents only changed files
  2. +
  3. Specific File: Pass a file path with -l path/to/file.py
  4. +
  5. Entire Folder: Pass a folder path with -l path/to/folder
  6. +
+

+Authentication Requirement

+

This feature requires authentication with a Penify account. Run penify login before using documentation features.

+

+Configuration Settings

+

Configure local settings using the config command:

+
    +
  • LLM Settings: Configure a local LLM for commit message generation
  • +
  • JIRA Settings: Set up JIRA integration for enhanced commit messages
  • +
+

For detailed configuration options, see docs/config-commands.md.

+

+Git Hooks

+

Penify can install Git hooks to automate documentation generation:

+

+Post-Commit Hook

+
    +
  • Install: penify docgen install-hook
  • +
  • What it does: Automatically generates documentation for changed files after each commit
  • +
  • Uninstall: penify docgen uninstall-hook
  • +
+

+Custom Hook Location

+

You can specify a custom location for Git hooks:

+
penify docgen install-hook -l /path/to/git/repo
+

+Advanced Use Cases

+

+CI/CD Integration

+

For CI/CD pipelines:

+
    +
  1. Set PENIFY_API_TOKEN as an environment variable
  2. +
  3. Run commands without requiring interactive login
  4. +
+

+Remote Repository Documentation

+

Generate documentation for an entire repository:

+
git clone https://github.com/user/repo
+
cd repo
+
penify docgen -l .
+

+Troubleshooting

+

+Common Issues

+
    +
  1. API Key Errors: Ensure you've run penify login or set PENIFY_API_TOKEN
  2. +
  3. LLM Configuration: Check your LLM settings with cat ~/.penify
  4. +
  5. JIRA Integration: Verify JIRA credentials in your configuration
  6. +
+

+Logs

+

For more detailed logs, you can set the environment variable:

+
export PENIFY_DEBUG=1
+

+Support

+

For additional help, visit https://docs.penify.dev/ or contact suppo.nosp@m.rt@p.nosp@m.enify.nosp@m..dev

+
+
+
+ + + + + diff --git a/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html new file mode 100644 index 0000000..bf19377 --- /dev/null +++ b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Documentation Generation Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Documentation Generation Commands
+
+
+

+

This document provides a detailed guide to all permutations and combinations of the docgen command, including extensive information about Git hook commands for automating documentation generation.

+

+Table of Contents

+
    +
  • Basic Usage
  • +
  • Command Options
  • +
  • Option Combinations
  • +
  • Git Hook Commands
      +
    • Hook Installation
    • +
    • Hook Customization
    • +
    • Hook Uninstallation
    • +
    +
  • +
  • Advanced Use Cases
  • +
  • Troubleshooting
  • +
+

+Basic Usage

+
penify docgen
+

By default, this command:

    +
  • Analyzes the current Git diff (changes since last commit)
  • +
  • Generates documentation for changed files only
  • +
  • Requires authentication via penify login
  • +
+

+Command Options

+

+-l, --location

+

Specify a target for documentation generation:

+
# Generate documentation for a specific file
+
penify docgen -l path/to/file.py
+
+
# Generate documentation for a specific folder
+
penify docgen -l path/to/folder
+

Without this flag, Penify analyzes only Git-tracked modified files.

+

+Subcommands

+

+install-hook

+

Install a Git post-commit hook to automatically generate documentation:

+
penify docgen install-hook
+

+uninstall-hook

+

Remove the Git post-commit hook:

+
penify docgen uninstall-hook
+

+Option Combinations

+

+Generate Documentation for Current Git Diff

+
# Basic usage - current Git diff
+
penify docgen
+

+Generate Documentation for a Specific File

+
# Single file documentation
+
penify docgen -l src/main.py
+

+Generate Documentation for a Folder

+
# Folder documentation
+
penify docgen -l src/models/
+

+Install Hook in Current Repository

+
# Install hook in current Git repository
+
penify docgen install-hook
+

+Install Hook in Specific Repository

+
# Install hook in a specific Git repository
+
penify docgen install-hook -l /path/to/repo
+

+Uninstall Hook from Current Repository

+
# Uninstall hook from current Git repository
+
penify docgen uninstall-hook
+

+Uninstall Hook from Specific Repository

+
# Uninstall hook from a specific Git repository
+
penify docgen uninstall-hook -l /path/to/repo
+

+Git Hook Commands

+

Penify provides Git hook commands to automate documentation generation as part of your Git workflow.

+

+Hook Installation

+

+How Hooks Work

+

When you install a Git hook with penify docgen install-hook, Penify:

+
    +
  1. Creates a post-commit hook script in the .git/hooks directory
  2. +
  3. Makes the script executable
  4. +
  5. Configures the hook to run penify docgen after each commit
  6. +
+

+Hook Script Content

+

The generated post-commit hook contains:

+
#!/bin/sh
+
# This is a post-commit hook generated by penify.
+
# Automatically generates documentation for changed files after each commit.
+
+
penify docgen -gf /path/to/git/repository -t your_api_token
+

+Installation Location

+

By default, hooks are installed in the current Git repository. You can specify a different location:

+
penify docgen install-hook -l /path/to/repo
+

+Installation Requirements

+

To install hooks, you need:

    +
  • A valid Penify API token (login first with penify login)
  • +
  • Write permissions to the .git/hooks directory
  • +
+

+Verifying Installation

+

After installation, you can verify that the hook is installed:

+
cat .git/hooks/post-commit
+

+Hook Customization

+

You can customize the post-commit hook after installation:

+

+Modifying Hook Behavior

+
    +
  1. Edit the .git/hooks/post-commit file
  2. +
  3. Add additional options to the penify docgen command
  4. +
  5. Add other commands to run after commit
  6. +
+

Example of a customized hook:

+
#!/bin/sh
+
# This is a post-commit hook generated by penify.
+
# Automatically generates documentation for changed files after each commit.
+
+
# Generate documentation
+
penify docgen -gf /path/to/git/repository -t your_api_token
+
+
# Additional custom commands
+
echo "Documentation generation complete!"
+

+Advanced Hook Scenarios

+

Conditional Documentation Generation:

+
#!/bin/sh
+
# Only generate documentation for commits to the main branch
+
BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
if [ "$BRANCH" = "main" ]; then
+
penify docgen -gf /path/to/git/repository -t your_api_token
+
fi
+

Documenting Specific Files/Folders:

+
#!/bin/sh
+
# Only document Python files in the src directory
+
penify docgen -l src/ -gf /path/to/git/repository -t your_api_token
+

+Hook Uninstallation

+

+Standard Uninstallation

+

To remove a hook from the current repository:

+
penify docgen uninstall-hook
+

+Specific Repository Uninstallation

+

To remove a hook from a specific repository:

+
penify docgen uninstall-hook -l /path/to/repo
+

+Manual Hook Removal

+

If needed, you can manually remove the hook:

+
rm .git/hooks/post-commit
+

+Verifying Uninstallation

+

Check that the hook was successfully removed:

+
ls -la .git/hooks/post-commit # Should return "No such file or directory"
+

+Advanced Use Cases

+

+Continuous Integration

+

Run documentation generation in CI pipelines:

+
# In your CI script
+
export PENIFY_API_TOKEN=your_api_token
+
penify docgen -l src/
+

+Batch Documentation

+

Generate documentation for multiple repositories:

+
# Bash script for batch documentation
+
for repo in repo1 repo2 repo3; do
+
cd /path/to/$repo
+
penify docgen -l .
+
done
+

+Custom Git Hook Integration

+

Integrate with other Git hooks:

+
# In .git/hooks/pre-push
+
penify docgen -l src/
+

+Documenting Release Tags

+

Generate documentation when creating a release tag:

+
# Document everything when creating a tag
+
git tag -a v1.0.0
+
penify docgen -l . # Document entire codebase
+
git commit --amend -m "Release v1.0.0 with updated documentation"
+

+Troubleshooting

+

+Common Issues

+
    +
  1. "Authentication required"
      +
    • Run penify login before using documentation features
    • +
    • Check your API token with cat ~/.penify
    • +
    +
  2. +
  3. "Permission denied when installing hook"
      +
    • Check Git repository permissions
    • +
    • Try running with sudo (if appropriate for your environment)
    • +
    • Ensure the .git/hooks directory exists
    • +
    +
  4. +
  5. "Hook installed but not running"
      +
    • Check if the hook is executable: ls -la .git/hooks/post-commit
    • +
    • Make it executable if needed: chmod +x .git/hooks/post-commit
    • +
    • Check for syntax errors in the hook script
    • +
    +
  6. +
  7. "File or directory not found"
      +
    • Verify the path provided to the -l option
    • +
    • Ensure you're running the command from the correct directory
    • +
    +
  8. +
  9. "Hook uninstallation failed"
      +
    • Check permissions on the .git/hooks directory
    • +
    • Try manual removal: rm .git/hooks/post-commit
    • +
    +
  10. +
+

+Debugging

+

For detailed output when running documentation commands:

+
export PENIFY_DEBUG=1
+
penify docgen -l src/
+

+Getting Help

+

For command-specific help:

+
penify docgen --help
+
penify docgen install-hook --help
+
penify docgen uninstall-hook --help
+
+
+
+ + + + + diff --git a/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html new file mode 100644 index 0000000..14daf11 --- /dev/null +++ b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI Example Workflows + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI Example Workflows
+
+
+

+

This document demonstrates how to use Penify CLI in real-world development workflows to improve your productivity.

+

+Workflow 1: Efficient Git Commits with AI

+

+Setup

+

First, configure your local LLM for offline operation:

+
penify config llm
+

Configure your JIRA integration for enhanced commit messages:

+
penify config jira
+

+Daily Workflow

+
    +
  1. Make your code changes as usual
  2. +
  3. When ready to commit, use Penify to generate a smart commit message:
  4. +
+
penify commit
+
    +
  1. Review and confirm the generated commit message
  2. +
  3. Git commit and push as usual
  4. +
+

+Benefits

+
    +
  • Consistent and descriptive commit messages
  • +
  • Automatic inclusion of relevant JIRA ticket information
  • +
  • Time saved from writing detailed commit messages
  • +
+

+Workflow 2: Documentation Generation Pipeline

+

+Setup

+

Login to Penify to access advanced documentation features:

+
penify login
+

Install the Git hook for automatic documentation generation:

+
penify docgen install-hook
+

+Daily Workflow

+
    +
  1. Make your code changes as usual
  2. +
  3. Commit your changes
  4. +
  5. Documentation is automatically generated for changed files
  6. +
  7. Review the generated documentation
  8. +
+

+Manual Documentation

+

For specific files or folders:

+
penify docgen -l src/components/authentication
+

+Benefits

+
    +
  • Always up-to-date documentation
  • +
  • Consistent documentation style
  • +
  • Time saved from writing detailed documentation
  • +
+

+Workflow 3: Code Review Enhancement

+

+Setup

+

Ensure you're logged into Penify:

+
penify login
+

+Workflow

+
    +
  1. Before submitting a PR, generate documentation for changed files:
  2. +
+
penify docgen
+
    +
  1. Include the generated documentation in your PR
  2. +
  3. Reviewers can better understand your changes with the AI-generated explanations
  4. +
+

+Benefits

+
    +
  • Improved PR quality
  • +
  • Faster code reviews
  • +
  • Better team understanding of code changes
  • +
+

+Workflow 4: Onboarding New Team Members

+

+For Team Leads

+

Generate comprehensive documentation for the entire codebase:

+
penify docgen -l .
+

+For New Team Members

+

Generate focused documentation for components you're working on:

+
penify docgen -l src/components/my-feature
+

+Benefits

+
    +
  • Faster onboarding
  • +
  • Better understanding of code structure
  • +
  • Reduced questions to senior team members
  • +
+

+Workflow 5: Legacy Code Understanding

+

When working with unfamiliar legacy code:

+
# Document a specific complex file
+
penify docgen -l src/legacy/complex_module.py
+
+
# Document an entire legacy component
+
penify docgen -l src/legacy/old_component
+

+Benefits

+
    +
  • Quickly understand complex legacy systems
  • +
  • Reduce time spent deciphering undocumented code
  • +
  • Make safer changes to legacy systems
  • +
+
+
+
+ + + + + diff --git a/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html new file mode 100644 index 0000000..0a6fba0 --- /dev/null +++ b/docs/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify-cli-documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify-cli-documentation
+
+
+

+autotoc_md123

+

layout: doc title: Streamline Git Commits and Code Documentation with Penify-CLI's Automated Generation description: Discover how Penify-CLI automates both Git commit messages and code documentation, with Jira integration and flexible options. Save time, improve repository clarity, and boost productivity with this detailed guide to usage and best practices. keywords: Penify-CLI, Git commit messages, code documentation, Jira integration, automated documentation, version control, repository management, developer productivity

+

+author: Suman Sauarbh

+

+Penify CLI Documentation

+

Penify CLI is a powerful tool for enhancing your development workflow with AI-powered features like commit message generation, code documentation, and JIRA integration.

+

+Installation

+
pip install penify
+

+Getting Started

+

After installation, you can check the version of Penify CLI:

+
penify --version
+

+Commands Overview

+
    +
  • commit: Generate smart commit messages using local-LLM
  • +
  • config: Configure local-LLM and JIRA settings
  • +
  • login: Log in to Penify to use advanced features
  • +
  • docgen: Generate code documentation for Git diffs, files, or folders
  • +
+

+Detailed Command Documentation

+

+Commit Command

+

The commit command generates intelligent commit messages using local LLM models or Penify services.

+

+Usage:

+
penify commit [options]
+

+Options:

+
    +
  • -m, --message TEXT: Provide context for the commit message generation
  • +
  • -e, --terminal: Open an editor to modify the generated commit message before applying it
  • +
  • -d, --description: Generate a detailed commit message with both title and description
  • +
+

+Examples:

+

Basic usage:

penify commit
+

Provide context for better results:

penify commit -m "Fixed the login button"
+

Generate a detailed commit message and open editor:

penify commit -e -d
+

+Requirements:

+
    +
  • Either a local LLM configuration (via penify config llm) or Penify login
  • +
  • For JIRA integration, configure JIRA settings (via penify config jira)
  • +
+
+

+Config Command

+

The config command helps you configure local LLM settings and JIRA integration for enhanced commit messages.

+

+Usage:

+
penify config [subcommand]
+

+Subcommands:

+
    +
  • llm: Configure local Large Language Model settings
  • +
  • jira: Configure JIRA integration settings
  • +
+

+Examples:

+

Configure local LLM:

penify config llm
+

This opens a web interface to configure:

+

Configure JIRA integration:

penify config jira
+

This opens a web interface to configure:

+
+

+Login Command

+

The login command authenticates you with Penify for advanced features like code documentation generation.

+

+Usage:

+
penify login
+

+What happens:

+
    +
  1. A browser window opens to the Penify login page
  2. +
  3. After successful login, your API key is automatically saved
  4. +
  5. The tool is now authorized to use Penify's advanced features
  6. +
+

+Example:

+
penify login
+

+

+Docgen Command

+

The docgen command generates documentation for your code using Penify's AI services.

+

+Usage:

+
penify docgen [options] [subcommand]
+

+Options:

+
    +
  • -l, --location PATH: Path to a specific file or folder to document (default: current working directory)
  • +
+

+Subcommands:

+
    +
  • install-hook: Install a Git post-commit hook to automatically generate documentation
  • +
  • uninstall-hook: Remove the Git post-commit hook
  • +
+

+Examples:

+

Document current Git diff:

penify docgen
+

Document a specific file:

penify docgen -l src/main.py
+

Document an entire folder:

penify docgen -l src/components
+

Install the Git hook for automatic documentation:

penify docgen install-hook
+

Uninstall the Git hook:

penify docgen uninstall-hook
+

+Requirements:

+
    +
  • Requires login to Penify (penify login)
  • +
+

+Configuration Files

+

Penify CLI stores configuration in the following locations:

+
    +
  • Global configuration: ~/.penify
  • +
  • Project-specific configuration: .penify in your Git repository root
  • +
+

+Environment Variables

+
    +
  • PENIFY_API_TOKEN: Can be used to provide the API token instead of logging in
  • +
+

+Troubleshooting

+

If you encounter issues:

+
    +
  1. Check your configuration with cat ~/.penify
  2. +
  3. Verify network connectivity to API endpoints
  4. +
  5. Ensure your API keys and tokens are valid
  6. +
  7. For JIRA integration issues, verify your JIRA credentials
  8. +
+

+Additional Resources

+

For more information, visit the Penify Documentation.

+
+
+
+ + + + + diff --git a/docs/html/menu.js b/docs/html/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/docs/html/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js new file mode 100644 index 0000000..314c51a --- /dev/null +++ b/docs/html/menudata.js @@ -0,0 +1,117 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"a",url:"namespacemembers.html#index_a"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"h",url:"namespacemembers.html#index_h"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"j",url:"namespacemembers.html#index_j"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}, +{text:"u",url:"namespacemembers.html#index_u"}, +{text:"v",url:"namespacemembers.html#index_v"}, +{text:"w",url:"namespacemembers.html#index_w"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"f",url:"namespacemembers_func.html#index_f"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"h",url:"namespacemembers_func.html#index_h"}, +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"l",url:"namespacemembers_func.html#index_l"}, +{text:"m",url:"namespacemembers_func.html#index_m"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"t",url:"namespacemembers_func.html#index_t"}, +{text:"u",url:"namespacemembers_func.html#index_u"}]}, +{text:"Variables",url:"namespacemembers_vars.html",children:[ +{text:"a",url:"namespacemembers_vars.html#index_a"}, +{text:"c",url:"namespacemembers_vars.html#index_c"}, +{text:"d",url:"namespacemembers_vars.html#index_d"}, +{text:"e",url:"namespacemembers_vars.html#index_e"}, +{text:"h",url:"namespacemembers_vars.html#index_h"}, +{text:"i",url:"namespacemembers_vars.html#index_i"}, +{text:"j",url:"namespacemembers_vars.html#index_j"}, +{text:"l",url:"namespacemembers_vars.html#index_l"}, +{text:"n",url:"namespacemembers_vars.html#index_n"}, +{text:"p",url:"namespacemembers_vars.html#index_p"}, +{text:"s",url:"namespacemembers_vars.html#index_s"}, +{text:"u",url:"namespacemembers_vars.html#index_u"}, +{text:"v",url:"namespacemembers_vars.html#index_v"}, +{text:"w",url:"namespacemembers_vars.html#index_w"}]}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"_",url:"functions.html#index__5F"}, +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"_",url:"functions_func.html#index__5F"}, +{text:"a",url:"functions_func.html#index_a"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/docs/html/minus.svg b/docs/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/minusd.svg b/docs/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html new file mode 100644 index 0000000..25466ae --- /dev/null +++ b/docs/html/namespacemembers.html @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    + +

    - a -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    + + +

    - v -

    + + +

    - w -

    +
    +
    + + + + + diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html new file mode 100644 index 0000000..a2b9e39 --- /dev/null +++ b/docs/html/namespacemembers_func.html @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace functions with links to the namespace documentation for each function:
    + +

    - c -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    +
    +
    + + + + + diff --git a/docs/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html new file mode 100644 index 0000000..c73078c --- /dev/null +++ b/docs/html/namespacemembers_vars.html @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace variables with links to the namespace documentation for each variable:
    + +

    - a -

    + + +

    - c -

      +
    • classifiers : setup
    • +
    + + +

    - d -

    + + +

    - e -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - l -

    + + +

    - n -

    + + +

    - p -

    + + +

    - s -

    + + +

    - u -

    + + +

    - v -

    + + +

    - w -

    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook.html b/docs/html/namespacepenify__hook.html new file mode 100644 index 0000000..2153c85 --- /dev/null +++ b/docs/html/namespacepenify__hook.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Namespaces

    namespace  api_client
     
    namespace  base_analyzer
     
    namespace  commands
     
    namespace  commit_analyzer
     
    namespace  config_command
     
    namespace  constants
     
    namespace  file_analyzer
     
    namespace  folder_analyzer
     
    namespace  git_analyzer
     
    namespace  jira_client
     
    namespace  llm_client
     
    namespace  login_command
     
    namespace  main
     
    namespace  ui_utils
     
    namespace  utils
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook.js b/docs/html/namespacepenify__hook.js new file mode 100644 index 0000000..d2d0a36 --- /dev/null +++ b/docs/html/namespacepenify__hook.js @@ -0,0 +1,56 @@ +var namespacepenify__hook = +[ + [ "api_client", "namespacepenify__hook_1_1api__client.html", "namespacepenify__hook_1_1api__client" ], + [ "base_analyzer", "namespacepenify__hook_1_1base__analyzer.html", "namespacepenify__hook_1_1base__analyzer" ], + [ "commands", "namespacepenify__hook_1_1commands.html", "namespacepenify__hook_1_1commands" ], + [ "commit_analyzer", "namespacepenify__hook_1_1commit__analyzer.html", "namespacepenify__hook_1_1commit__analyzer" ], + [ "config_command", "namespacepenify__hook_1_1config__command.html", [ + [ "handle_config", "namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5", null ], + [ "setup_config_parser", "namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba", null ] + ] ], + [ "constants", "namespacepenify__hook_1_1constants.html", [ + [ "API_URL", "namespacepenify__hook_1_1constants.html#a846767f047a1319005bc95395330ab34", null ], + [ "DASHBOARD_URL", "namespacepenify__hook_1_1constants.html#ae4a03ab3b19d60436c72484b313079c8", null ] + ] ], + [ "file_analyzer", "namespacepenify__hook_1_1file__analyzer.html", "namespacepenify__hook_1_1file__analyzer" ], + [ "folder_analyzer", "namespacepenify__hook_1_1folder__analyzer.html", "namespacepenify__hook_1_1folder__analyzer" ], + [ "git_analyzer", "namespacepenify__hook_1_1git__analyzer.html", "namespacepenify__hook_1_1git__analyzer" ], + [ "jira_client", "namespacepenify__hook_1_1jira__client.html", "namespacepenify__hook_1_1jira__client" ], + [ "llm_client", "namespacepenify__hook_1_1llm__client.html", "namespacepenify__hook_1_1llm__client" ], + [ "login_command", "namespacepenify__hook_1_1login__command.html", [ + [ "handle_login", "namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411", null ], + [ "setup_login_parser", "namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235", null ] + ] ], + [ "main", "namespacepenify__hook_1_1main.html", [ + [ "main", "namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb", null ] + ] ], + [ "ui_utils", "namespacepenify__hook_1_1ui__utils.html", [ + [ "create_progress_bar", "namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5", null ], + [ "create_stage_progress_bar", "namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405", null ], + [ "format_error", "namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca", null ], + [ "format_file_path", "namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41", null ], + [ "format_highlight", "namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7", null ], + [ "format_info", "namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2", null ], + [ "format_success", "namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e", null ], + [ "format_warning", "namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797", null ], + [ "print_error", "namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598", null ], + [ "print_info", "namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c", null ], + [ "print_processing", "namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb", null ], + [ "print_status", "namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7", null ], + [ "print_success", "namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b", null ], + [ "print_warning", "namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45", null ], + [ "update_stage", "namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd", null ], + [ "autoreset", "namespacepenify__hook_1_1ui__utils.html#ab560cfade398ac1e0bd47befb52d9f71", null ], + [ "ERROR_COLOR", "namespacepenify__hook_1_1ui__utils.html#a4ab4e61dfab7973c87bef59c6e1977fe", null ], + [ "ERROR_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ae941d124e4d3aa294314d73fb47c6432", null ], + [ "HIGHLIGHT_COLOR", "namespacepenify__hook_1_1ui__utils.html#aba01b8259f0d66cdc2b4a1b58f9736fc", null ], + [ "INFO_COLOR", "namespacepenify__hook_1_1ui__utils.html#a9fdcb180915696f5d217032a62c3857c", null ], + [ "NEUTRAL_COLOR", "namespacepenify__hook_1_1ui__utils.html#aca0fcee81606857497520ae4290bc9f5", null ], + [ "PROCESSING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ad7cc8eaf7a660ff195f4366d792ab155", null ], + [ "SUCCESS_COLOR", "namespacepenify__hook_1_1ui__utils.html#a22c450c5e2b5394618ecf9b636560df4", null ], + [ "SUCCESS_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a7d3cc992aaeb0a01c536c9a48e801ff3", null ], + [ "WARNING_COLOR", "namespacepenify__hook_1_1ui__utils.html#a177bc9b44157844c999e0c1c2c6936ff", null ], + [ "WARNING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a9ee7a42eeca5b12429cb97bf89007be8", null ] + ] ], + [ "utils", "namespacepenify__hook_1_1utils.html", "namespacepenify__hook_1_1utils" ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1api__client.html b/docs/html/namespacepenify__hook_1_1api__client.html new file mode 100644 index 0000000..f41d894 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1api__client.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.api_client Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.api_client Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  APIClient
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1api__client.js b/docs/html/namespacepenify__hook_1_1api__client.js new file mode 100644 index 0000000..fb9b017 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1api__client.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1api__client = +[ + [ "APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", "classpenify__hook_1_1api__client_1_1APIClient" ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1base__analyzer.html b/docs/html/namespacepenify__hook_1_1base__analyzer.html new file mode 100644 index 0000000..e84378e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1base__analyzer.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.base_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.base_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  BaseAnalyzer
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1base__analyzer.js b/docs/html/namespacepenify__hook_1_1base__analyzer.js new file mode 100644 index 0000000..6701f69 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1base__analyzer.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1base__analyzer = +[ + [ "BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer" ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands.html b/docs/html/namespacepenify__hook_1_1commands.html new file mode 100644 index 0000000..01d2467 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands Namespace Reference
    +
    +
    + + + + + + + + + + + + +

    +Namespaces

    namespace  auth_commands
     
    namespace  commit_commands
     
    namespace  config_commands
     
    namespace  doc_commands
     
    namespace  hook_commands
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands.js b/docs/html/namespacepenify__hook_1_1commands.js new file mode 100644 index 0000000..7050064 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands.js @@ -0,0 +1,38 @@ +var namespacepenify__hook_1_1commands = +[ + [ "auth_commands", "namespacepenify__hook_1_1commands_1_1auth__commands.html", [ + [ "login", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6", null ], + [ "save_credentials", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b", null ] + ] ], + [ "commit_commands", "namespacepenify__hook_1_1commands_1_1commit__commands.html", [ + [ "commit_code", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6", null ], + [ "handle_commit", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076", null ], + [ "setup_commit_parser", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1", null ] + ] ], + [ "config_commands", "namespacepenify__hook_1_1commands_1_1config__commands.html", [ + [ "config_jira_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13", null ], + [ "config_llm_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62", null ], + [ "get_env_var_or_default", "namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87", null ], + [ "get_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2", null ], + [ "get_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0", null ], + [ "get_penify_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20", null ], + [ "get_token", "namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812", null ], + [ "load_env_files", "namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae", null ], + [ "save_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374", null ], + [ "save_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4", null ], + [ "DOTENV_AVAILABLE", "namespacepenify__hook_1_1commands_1_1config__commands.html#a152642ab83cf6219b604bda6122aba67", null ], + [ "path", "namespacepenify__hook_1_1commands_1_1config__commands.html#a79fceaf7882b9bcf1075a24262c5d7e2", null ] + ] ], + [ "doc_commands", "namespacepenify__hook_1_1commands_1_1doc__commands.html", [ + [ "generate_doc", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7", null ], + [ "handle_docgen", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc", null ], + [ "setup_docgen_parser", "namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6", null ], + [ "docgen_description", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a6dd45546559198f9f79caccd030d3588", null ] + ] ], + [ "hook_commands", "namespacepenify__hook_1_1commands_1_1hook__commands.html", [ + [ "install_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135", null ], + [ "uninstall_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443", null ], + [ "HOOK_FILENAME", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a978b976442fbf28c29c8d0f889bfae9c", null ], + [ "HOOK_TEMPLATE", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a51fc390518d967f2a1e21280d7ea781b", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands.html b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands.html new file mode 100644 index 0000000..ced04f6 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.auth_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.auth_commands Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     save_credentials (api_key)
     
     login (api_url, dashboard_url)
     
    +

    Function Documentation

    + +

    ◆ login()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.commands.auth_commands.login ( api_url,
    dashboard_url )
    +
    +
    Open the login page in a web browser and capture the token via redirect.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ save_credentials()

    + +
    +
    + + + + + + + +
    penify_hook.commands.auth_commands.save_credentials ( api_key)
    +
    +
    Save the API key in a priority-based manner.
    +
    +This function attempts to save the API key in two locations, based on priority:
    +1. In a `.env` file located in the root of the Git repository if one is found.
    +2. In a global `.penify` file located in the user's home directory as a
    +fallback.  The function first tries to locate the Git repository using
    +`recursive_search_git_folder`. If a Git repository is found, it reads the
    +existing `.env` file (if present), updates or adds the API key under the key
    +`PENIFY_API_TOKEN`, and writes the updated content back. If any error occurs
    +during this process, it falls back to saving the credentials in the global
    +`.penify` file. The function handles exceptions and prints appropriate error
    +messages.
    +
    +Args:
    +    api_key (str): The API key to save.
    +
    +Returns:
    +    bool: True if the API key is saved successfully, False otherwise.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map new file mode 100644 index 0000000..bc1917f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 new file mode 100644 index 0000000..b8a526f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 @@ -0,0 +1 @@ +df121ab8f8f1f8c9b8beb1b8f46035c9 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg new file mode 100644 index 0000000..ee497a1 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.auth_commands.login + + +Node1 + + +penify_hook.commands.auth +_commands.login + + + + + +Node2 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg new file mode 100644 index 0000000..cdb13f9 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.auth_commands.login + + +Node1 + + +penify_hook.commands.auth +_commands.login + + + + + +Node2 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map new file mode 100644 index 0000000..05977aa --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 new file mode 100644 index 0000000..bec8676 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 @@ -0,0 +1 @@ +0c95eca14e69906c865588ce720ae68c \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg new file mode 100644 index 0000000..50d22ec --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.auth_commands.save_credentials + + +Node1 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2 + + +penify_hook.commands.auth +_commands.login + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg new file mode 100644 index 0000000..45dba64 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.auth_commands.save_credentials + + +Node1 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2 + + +penify_hook.commands.auth +_commands.login + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands.html b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands.html new file mode 100644 index 0000000..5d613c4 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands.html @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.commit_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.commit_commands Namespace Reference
    +
    +
    + + + + + + + + +

    +Functions

     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)
     
     setup_commit_parser (parser)
     
     handle_commit (args)
     
    +

    Function Documentation

    + +

    ◆ commit_code()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    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 )
    +
    +
    Enhance Git commits with AI-powered commit messages.
    +
    +This function allows for the generation of enhanced commit messages using
    +natural language processing models and optionally integrates with JIRA for
    +additional context. It processes the current Git folder to find relevant files
    +and generates a detailed commit message based on the provided parameters.
    +
    +Args:
    +    api_url (str): URL of the API endpoint.
    +    token (str): Authentication token for the API.
    +    message (str): Initial commit message provided by the user.
    +    open_terminal (bool): Whether to open the terminal after committing.
    +    generate_description (bool): Whether to generate a detailed description in the commit message.
    +    llm_model (str?): The language model to use for generating the commit message. Defaults to None.
    +    llm_api_base (str?): Base URL of the LLM API. Defaults to None.
    +    llm_api_key (str?): API key for accessing the LLM service. Defaults to None.
    +    jira_url (str?): URL of the JIRA instance. Defaults to None.
    +    jira_user (str?): Username for authenticating with JIRA. Defaults to None.
    +    jira_api_token (str?): API token for accessing JIRA. Defaults to None.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ handle_commit()

    + +
    +
    + + + + + + + +
    penify_hook.commands.commit_commands.handle_commit ( args)
    +
    +
    Handle commit functionality by processing arguments and invoking the
    +appropriate commands.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ setup_commit_parser()

    + +
    +
    + + + + + + + +
    penify_hook.commands.commit_commands.setup_commit_parser ( parser)
    +
    +
    Sets up an argument parser for generating smart commit messages.
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map new file mode 100644 index 0000000..ffe9a57 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 new file mode 100644 index 0000000..b2168e4 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 @@ -0,0 +1 @@ +a87fe683676275b5b9b302cacf7113c9 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg new file mode 100644 index 0000000..1d06beb --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.commit_commands.commit_code + + +Node1 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg new file mode 100644 index 0000000..388d136 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.commit_commands.commit_code + + +Node1 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map new file mode 100644 index 0000000..03cd05a --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 new file mode 100644 index 0000000..f54ff3c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 @@ -0,0 +1 @@ +1a444c8182e2ab10bd621bcdd7a97129 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg new file mode 100644 index 0000000..eb0dcc4 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.commit_commands.handle_commit + + +Node1 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg new file mode 100644 index 0000000..7737e2f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.commit_commands.handle_commit + + +Node1 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands.html b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands.html new file mode 100644 index 0000000..a94dd7a --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands.html @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.config_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.config_commands Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    None load_env_files ()
     
    Path get_penify_config ()
     
    Any get_env_var_or_default (str env_var, Any default=None)
     
     save_llm_config (model, api_base, api_key)
     
     save_jira_config (url, username, api_token)
     
    Dict[str, str] get_llm_config ()
     
    Dict[str, str] get_jira_config ()
     
     config_llm_web ()
     
     config_jira_web ()
     
    Optional[str] get_token ()
     
    + + + + + +

    +Variables

    bool DOTENV_AVAILABLE = True
     
    str path = "/":
     
    +

    Function Documentation

    + +

    ◆ config_jira_web()

    + +
    +
    + + + + + + + +
    penify_hook.commands.config_commands.config_jira_web ()
    +
    +
    Starts a web server for configuring JIRA settings.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ config_llm_web()

    + +
    +
    + + + + + + + +
    penify_hook.commands.config_commands.config_llm_web ()
    +
    +
    Starts an HTTP server for configuring LLM settings via a web interface.
    +
    +
    + +

    ◆ get_env_var_or_default()

    + +
    +
    + + + + + + + + + + + +
    Any penify_hook.commands.config_commands.get_env_var_or_default (str env_var,
    Any default = None )
    +
    +
    Get environment variable or return default value.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_jira_config()

    + +
    +
    + + + + + + + +
    Dict[str, str] penify_hook.commands.config_commands.get_jira_config ()
    +
    +
    Retrieve JIRA configuration from environment variables.
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_llm_config()

    + +
    +
    + + + + + + + +
    Dict[str, str] penify_hook.commands.config_commands.get_llm_config ()
    +
    +
    Retrieve LLM configuration from environment variables.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_penify_config()

    + +
    +
    + + + + + + + +
    Path penify_hook.commands.config_commands.get_penify_config ()
    +
    +
    Returns the path to the `config.json` file within the `.penify` directory,
    +creating it if necessary.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_token()

    + +
    +
    + + + + + + + +
    Optional[str] penify_hook.commands.config_commands.get_token ()
    +
    +
    Retrieves an API token using a prioritized method.
    +
    +This function first attempts to load environment variables from all `.env`
    +files and checks if the `PENIFY_API_TOKEN` environment variable is set. If
    +found, it returns the token. If not, it looks for the API key in a
    +configuration file named 'api_keys'. If both methods fail, it returns None.
    +
    +Returns:
    +    str or None: The API token if found, otherwise None.
    +
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ load_env_files()

    + +
    +
    + + + + + + + +
    None penify_hook.commands.config_commands.load_env_files ()
    +
    +
    Load environment variables from .env files in various locations with proper
    +priority.
    +
    +This function loads environment variables from .env files located in different
    +directories, prioritizing the current directory over the Git repo root and the
    +user home directory. The loading process ensures that later files override
    +earlier ones.
    +
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ save_jira_config()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.commands.config_commands.save_jira_config ( url,
    username,
    api_token )
    +
    +
    Save JIRA configuration settings to a .env file.
    +
    +This function saves JIRA configuration following these steps: 1. Determine the
    +target .env file location based on whether the current directory is inside a
    +Git repository. 2. If inside a Git repo, use the Git repo root's .env file;
    +otherwise, use the user home directory's .env file. 3. Read the existing
    +content of the .env file (if it exists) to preserve other settings. 4. Update
    +the .env content with the new JIRA configuration. 5. Write the updated content
    +back to the .env file. 6. Optionally, reload environment variables to make
    +changes immediately available.
    +
    +Args:
    +    url (str): The JIRA URL to be saved in the .env file.
    +    username (str): The JIRA username to be saved in the .env file.
    +    api_token (str): The JIRA API token to be saved in the .env file.
    +
    +Returns:
    +    bool: True if the configuration was successfully saved, False otherwise.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ save_llm_config()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.commands.config_commands.save_llm_config ( model,
    api_base,
    api_key )
    +
    +
    Save LLM configuration settings to an .env file.
    +
    +This function saves the LLM configuration following a specific priority: 1. Git
    +repo root .env (if inside a git repo) 2. User home directory .env  It handles
    +the detection of the Git repo root, reads the existing .env content, updates it
    +with the new LLM configuration, and writes it back to the file. It also reloads
    +the environment variables to make changes immediately available.
    +
    +Args:
    +    model (str): The name of the language model.
    +    api_base (str): The base URL for the API.
    +    api_key (str): The API key for authentication.
    +
    +Returns:
    +    bool: True if the configuration is saved successfully, False otherwise.
    +
    +
    +
    +

    Variable Documentation

    + +

    ◆ DOTENV_AVAILABLE

    + +
    +
    + + + + +
    bool penify_hook.commands.config_commands.DOTENV_AVAILABLE = True
    +
    + +
    +
    + +

    ◆ path

    + +
    +
    + + + + +
    str penify_hook.commands.config_commands.path = "/":
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map new file mode 100644 index 0000000..4bb2bfd --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 new file mode 100644 index 0000000..6283b41 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 @@ -0,0 +1 @@ +9bae164ffcfdbd7d2561af59ebd200f4 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg new file mode 100644 index 0000000..b03ff99 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.save_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg new file mode 100644 index 0000000..f22e981 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.config_commands.save_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map new file mode 100644 index 0000000..debb1c6 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 new file mode 100644 index 0000000..5da8c0b --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 @@ -0,0 +1 @@ +7fdb615e9f5308ecd3e5fa498551935b \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg new file mode 100644 index 0000000..051697d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg new file mode 100644 index 0000000..83113ab --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg @@ -0,0 +1,70 @@ + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map new file mode 100644 index 0000000..2f2fb21 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 new file mode 100644 index 0000000..eeb199e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 @@ -0,0 +1 @@ +ea0a5e6f435c6a7671d7bfc3bf0650ab \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg new file mode 100644 index 0000000..8c23edf --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg new file mode 100644 index 0000000..bdb538e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map new file mode 100644 index 0000000..bc13337 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 new file mode 100644 index 0000000..95b75fa --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 @@ -0,0 +1 @@ +9d37c64efeb0e64618f9f0dd5ab88ea7 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg new file mode 100644 index 0000000..543911e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commands.config_commands.get_env_var_or_default + + +Node1 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg new file mode 100644 index 0000000..e64712b --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg @@ -0,0 +1,99 @@ + + + + + + +penify_hook.commands.config_commands.get_env_var_or_default + + +Node1 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map new file mode 100644 index 0000000..a45a2e3 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 new file mode 100644 index 0000000..dc6ebb4 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 @@ -0,0 +1 @@ +62a8d5fb002f1fe17ac8f4fcc3136681 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg new file mode 100644 index 0000000..2463268 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_token + + +Node1 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg new file mode 100644 index 0000000..ca576fa --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg @@ -0,0 +1,89 @@ + + + + + + +penify_hook.commands.config_commands.get_token + + +Node1 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map new file mode 100644 index 0000000..d607a9f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 new file mode 100644 index 0000000..09d6307 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 @@ -0,0 +1 @@ +be40687575d18b019d656fb483e65768 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg new file mode 100644 index 0000000..4e6ac15 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_llm_config + + +Node1 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg new file mode 100644 index 0000000..fc4febe --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg @@ -0,0 +1,70 @@ + + + + + + +penify_hook.commands.config_commands.get_llm_config + + +Node1 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map new file mode 100644 index 0000000..b9bb19c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 new file mode 100644 index 0000000..0cd2655 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 @@ -0,0 +1 @@ +df0b168a9e4b36e7d852b9c65e80709e \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg new file mode 100644 index 0000000..aab8334 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_penify_config + + +Node1 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg new file mode 100644 index 0000000..b59f434 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.config_commands.get_penify_config + + +Node1 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map new file mode 100644 index 0000000..f86c5a0 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 new file mode 100644 index 0000000..7bf3519 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 @@ -0,0 +1 @@ +8c645913e8cff12571c79649a78d06bd \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg new file mode 100644 index 0000000..6e9d5b9 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg new file mode 100644 index 0000000..b75919f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map new file mode 100644 index 0000000..fa3ee3a --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 new file mode 100644 index 0000000..f2b4329 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 @@ -0,0 +1 @@ +e99355e8e4f7aa3a3c39859f2c6c54cd \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg new file mode 100644 index 0000000..e5396a3 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg new file mode 100644 index 0000000..af0bbf7 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg @@ -0,0 +1,107 @@ + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map new file mode 100644 index 0000000..69d3fb5 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 new file mode 100644 index 0000000..f524413 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 @@ -0,0 +1 @@ +6d91ab0a314de630848fab3f24910dc1 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg new file mode 100644 index 0000000..1dc4493 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commands.config_commands.config_jira_web + + +Node1 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg new file mode 100644 index 0000000..961450e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg @@ -0,0 +1,108 @@ + + + + + + +penify_hook.commands.config_commands.config_jira_web + + +Node1 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands.html b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands.html new file mode 100644 index 0000000..e684051 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands.html @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.doc_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.doc_commands Namespace Reference
    +
    +
    + + + + + + + + +

    +Functions

     generate_doc (api_url, token, location=None)
     
     setup_docgen_parser (parser)
     
     handle_docgen (args)
     
    + + + +

    +Variables

    str docgen_description
     
    +

    Function Documentation

    + +

    ◆ generate_doc()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.commands.doc_commands.generate_doc ( api_url,
    token,
    location = None )
    +
    +
    Generates documentation based on the given parameters.
    +
    +This function initializes an API client using the provided API URL and token.
    +It then generates documentation by analyzing the specified location, which can
    +be a folder, a file, or the current working directory if no location is
    +provided. The function handles different types of analysis based on the input
    +location and reports any errors encountered during the process.
    +
    +Args:
    +    api_url (str): The URL of the API to connect to for documentation generation.
    +    token (str): The authentication token for accessing the API.
    +    location (str?): The path to a specific file or folder to analyze. If not provided,
    +        the current working directory is used.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ handle_docgen()

    + +
    +
    + + + + + + + +
    penify_hook.commands.doc_commands.handle_docgen ( args)
    +
    +
    Handle document generation and hook management based on subcommands.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ setup_docgen_parser()

    + +
    +
    + + + + + + + +
    penify_hook.commands.doc_commands.setup_docgen_parser ( parser)
    +
    +
    Configure a parser for generating documentation using Git commands.
    +
    +
    +

    Variable Documentation

    + +

    ◆ docgen_description

    + +
    +
    + + + + +
    str penify_hook.commands.doc_commands.docgen_description
    +
    +Initial value:
    1= """Generate code documentation using Penify.
    +
    2
    +
    3This command requires you to be logged in to your Penify account.
    +
    4You can generate documentation for:
    +
    5- Current Git diff (default)
    +
    6- Specific file
    +
    7- Specific folder
    +
    8"""
    +
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map new file mode 100644 index 0000000..76b237e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 new file mode 100644 index 0000000..52e920a --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 @@ -0,0 +1 @@ +9deb41e37ce70184ff07fb37d0aeeac4 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg new file mode 100644 index 0000000..91be21e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.doc_commands.generate_doc + + +Node1 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg new file mode 100644 index 0000000..5f5636a --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.doc_commands.generate_doc + + +Node1 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map new file mode 100644 index 0000000..13879b6 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 new file mode 100644 index 0000000..2c8b8ee --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 @@ -0,0 +1 @@ +77112aad7e68837a8925bfc05a598e2b \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg new file mode 100644 index 0000000..faebae1 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.doc_commands.handle_docgen + + +Node1 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg new file mode 100644 index 0000000..cf7deef --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.doc_commands.handle_docgen + + +Node1 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commands_1_1hook__commands.html b/docs/html/namespacepenify__hook_1_1commands_1_1hook__commands.html new file mode 100644 index 0000000..21b2da5 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commands_1_1hook__commands.html @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.hook_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.hook_commands Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     install_git_hook (location, token)
     
     uninstall_git_hook (location)
     
    + + + + + +

    +Variables

    str HOOK_FILENAME = "post-commit"
     
    str HOOK_TEMPLATE
     
    +

    Function Documentation

    + +

    ◆ install_git_hook()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.commands.hook_commands.install_git_hook ( location,
    token )
    +
    +
    Install a post-commit Git hook that generates documentation for changed files.
    +
    +
    + +

    ◆ uninstall_git_hook()

    + +
    +
    + + + + + + + +
    penify_hook.commands.hook_commands.uninstall_git_hook ( location)
    +
    +
    Uninstalls the post-commit hook from the specified location.
    +
    +
    +

    Variable Documentation

    + +

    ◆ HOOK_FILENAME

    + +
    +
    + + + + +
    str penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit"
    +
    + +
    +
    + +

    ◆ HOOK_TEMPLATE

    + +
    +
    + + + + +
    str penify_hook.commands.hook_commands.HOOK_TEMPLATE
    +
    +Initial value:
    1= """#!/bin/sh
    +
    2# This is a post-commit hook generated by penify.
    +
    3# Automatically generates documentation for changed files after each commit.
    +
    4
    +
    5penify docgen -gf {git_folder_path} -t {token}
    +
    6"""
    +
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commit__analyzer.html b/docs/html/namespacepenify__hook_1_1commit__analyzer.html new file mode 100644 index 0000000..656ded5 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commit__analyzer.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commit_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commit_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  CommitDocGenHook
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1commit__analyzer.js b/docs/html/namespacepenify__hook_1_1commit__analyzer.js new file mode 100644 index 0000000..da2cbba --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1commit__analyzer.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1commit__analyzer = +[ + [ "CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook" ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1config__command.html b/docs/html/namespacepenify__hook_1_1config__command.html new file mode 100644 index 0000000..b18cbc9 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1config__command.html @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.config_command Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.config_command Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     setup_config_parser (parent_parser)
     
     handle_config (args)
     
    +

    Function Documentation

    + +

    ◆ handle_config()

    + +
    +
    + + + + + + + +
    penify_hook.config_command.handle_config ( args)
    +
    +
    Handle configuration settings based on the specified config type.
    +
    +This function processes different types of configurations such as LLM (Language
    +Model) and JIRA. It saves configurations, sets up web-based configurations, and
    +verifies JIRA connections. Depending on the `args.config_type`, it imports
    +necessary modules, handles configuration saving or setup, and optionally
    +verifies JIRA connectivity.
    +
    +Args:
    +    args (argparse.Namespace): Command-line arguments containing the type of configuration to handle.
    +
    +
    +
    + +

    ◆ setup_config_parser()

    + +
    +
    + + + + + + + +
    penify_hook.config_command.setup_config_parser ( parent_parser)
    +
    +
    Set up configuration parsers with subcommands for LLM and JIRA settings.
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1constants.html b/docs/html/namespacepenify__hook_1_1constants.html new file mode 100644 index 0000000..3613dee --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1constants.html @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.constants Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.constants Namespace Reference
    +
    +
    + + + + + + +

    +Variables

    str API_URL = 'http://localhost:8000/api'
     
    str DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
     
    +

    Variable Documentation

    + +

    ◆ API_URL

    + +
    +
    + + + + +
    str penify_hook.constants.API_URL = 'http://localhost:8000/api'
    +
    + +
    +
    + +

    ◆ DASHBOARD_URL

    + +
    +
    + + + + +
    str penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1file__analyzer.html b/docs/html/namespacepenify__hook_1_1file__analyzer.html new file mode 100644 index 0000000..415d06c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1file__analyzer.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.file_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.file_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  FileAnalyzerGenHook
     
    + + + +

    +Variables

     logger = logging.getLogger(__name__)
     
    +

    Variable Documentation

    + +

    ◆ logger

    + +
    +
    + + + + +
    penify_hook.file_analyzer.logger = logging.getLogger(__name__)
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1file__analyzer.js b/docs/html/namespacepenify__hook_1_1file__analyzer.js new file mode 100644 index 0000000..2fd7c22 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1file__analyzer.js @@ -0,0 +1,5 @@ +var namespacepenify__hook_1_1file__analyzer = +[ + [ "FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook" ], + [ "logger", "namespacepenify__hook_1_1file__analyzer.html#af419a4965f079d58cac5a5281ddb1828", null ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1folder__analyzer.html b/docs/html/namespacepenify__hook_1_1folder__analyzer.html new file mode 100644 index 0000000..3fb1c2c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1folder__analyzer.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.folder_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.folder_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  FolderAnalyzerGenHook
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1folder__analyzer.js b/docs/html/namespacepenify__hook_1_1folder__analyzer.js new file mode 100644 index 0000000..01d86ca --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1folder__analyzer.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1folder__analyzer = +[ + [ "FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook" ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1git__analyzer.html b/docs/html/namespacepenify__hook_1_1git__analyzer.html new file mode 100644 index 0000000..f174d70 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1git__analyzer.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.git_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.git_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  GitDocGenHook
     
    + + + +

    +Variables

     logger = logging.getLogger(__name__)
     
    +

    Variable Documentation

    + +

    ◆ logger

    + +
    +
    + + + + +
    penify_hook.git_analyzer.logger = logging.getLogger(__name__)
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1git__analyzer.js b/docs/html/namespacepenify__hook_1_1git__analyzer.js new file mode 100644 index 0000000..d89c507 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1git__analyzer.js @@ -0,0 +1,5 @@ +var namespacepenify__hook_1_1git__analyzer = +[ + [ "GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook" ], + [ "logger", "namespacepenify__hook_1_1git__analyzer.html#ac4ce143fdca789a79c66852c37d7363a", null ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1jira__client.html b/docs/html/namespacepenify__hook_1_1jira__client.html new file mode 100644 index 0000000..93ea595 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1jira__client.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.jira_client Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.jira_client Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  JiraClient
     
    + + + +

    +Variables

    bool JIRA_AVAILABLE = True
     
    +

    Variable Documentation

    + +

    ◆ JIRA_AVAILABLE

    + +
    +
    + + + + +
    bool penify_hook.jira_client.JIRA_AVAILABLE = True
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1jira__client.js b/docs/html/namespacepenify__hook_1_1jira__client.js new file mode 100644 index 0000000..824018c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1jira__client.js @@ -0,0 +1,5 @@ +var namespacepenify__hook_1_1jira__client = +[ + [ "JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", "classpenify__hook_1_1jira__client_1_1JiraClient" ], + [ "JIRA_AVAILABLE", "namespacepenify__hook_1_1jira__client.html#a5593ea3415081eca1eea92e4c1ad1aa2", null ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1llm__client.html b/docs/html/namespacepenify__hook_1_1llm__client.html new file mode 100644 index 0000000..0cb9837 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1llm__client.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.llm_client Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.llm_client Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  LLMClient
     
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1llm__client.js b/docs/html/namespacepenify__hook_1_1llm__client.js new file mode 100644 index 0000000..9f99a1e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1llm__client.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1llm__client = +[ + [ "LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", "classpenify__hook_1_1llm__client_1_1LLMClient" ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1login__command.html b/docs/html/namespacepenify__hook_1_1login__command.html new file mode 100644 index 0000000..65c03fc --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1login__command.html @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.login_command Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.login_command Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     setup_login_parser (parser)
     
     handle_login (args)
     
    +

    Function Documentation

    + +

    ◆ handle_login()

    + +
    +
    + + + + + + + +
    penify_hook.login_command.handle_login ( args)
    +
    +
    Initiates a user login process using predefined constants and the `login`
    +function.
    +
    +
    + +

    ◆ setup_login_parser()

    + +
    +
    + + + + + + + +
    penify_hook.login_command.setup_login_parser ( parser)
    +
    +
    Set up command-line arguments for login.
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1main.html b/docs/html/namespacepenify__hook_1_1main.html new file mode 100644 index 0000000..75b3de6 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.main Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.main Namespace Reference
    +
    +
    + + + + +

    +Functions

     main ()
     
    +

    Function Documentation

    + +

    ◆ main()

    + +
    +
    + + + + + + + +
    penify_hook.main.main ()
    +
    +
    Main function to handle command-line interface (CLI) interactions with Penify
    +services.
    +
    +This tool provides a command-line interface for generating smart commit
    +messages, configuring local-LLM and JIRA, and generating code documentation. It
    +supports basic commands that do not require login and advanced commands that
    +require user authentication. The `--version` flag can be used to display the
    +version information.
    +
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map new file mode 100644 index 0000000..442158b --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 new file mode 100644 index 0000000..e85ed31 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 @@ -0,0 +1 @@ +a4f96dd63f317a83c69771f984b80132 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg new file mode 100644 index 0000000..f67ffbe --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg new file mode 100644 index 0000000..7e1139c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map new file mode 100644 index 0000000..fcb431b --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 new file mode 100644 index 0000000..e5dd16d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 @@ -0,0 +1 @@ +29c740851881b222377ae665d281c00f \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg new file mode 100644 index 0000000..681c657 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg new file mode 100644 index 0000000..26cf71b --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils.html b/docs/html/namespacepenify__hook_1_1ui__utils.html new file mode 100644 index 0000000..a992f95 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils.html @@ -0,0 +1,703 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.ui_utils Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.ui_utils Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     format_info (message)
     
     format_success (message)
     
     format_warning (message)
     
     format_error (message)
     
     format_highlight (message)
     
     format_file_path (file_path)
     
     print_info (message)
     
     print_success (message)
     
     print_warning (message)
     
     print_error (message)
     
     print_processing (file_path)
     
     print_status (status, message)
     
     create_progress_bar (total, desc="Processing", unit="item")
     
     create_stage_progress_bar (stages, desc="Processing")
     
     update_stage (pbar, stage_name)
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     autoreset
     
     INFO_COLOR = Fore.CYAN
     
     SUCCESS_COLOR = Fore.GREEN
     
     WARNING_COLOR = Fore.YELLOW
     
     ERROR_COLOR = Fore.RED
     
     HIGHLIGHT_COLOR = Fore.BLUE
     
     NEUTRAL_COLOR = Fore.WHITE
     
    str SUCCESS_SYMBOL = "✓"
     
    str WARNING_SYMBOL = "○"
     
    str ERROR_SYMBOL = "✗"
     
    str PROCESSING_SYMBOL = "⟳"
     
    +

    Detailed Description

    +
    UI utilities for Penify CLI.
    +
    +This module provides utility functions for consistent UI formatting,
    +colored output, and progress indicators across the Penify CLI application.
    +

    Function Documentation

    + +

    ◆ create_progress_bar()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.ui_utils.create_progress_bar ( total,
    desc = "Processing",
    unit = "item" )
    +
    +
    Create a tqdm progress bar with consistent styling.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ create_stage_progress_bar()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.ui_utils.create_stage_progress_bar ( stages,
    desc = "Processing" )
    +
    +
    Create a tqdm progress bar for processing stages with consistent styling.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_error()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_error ( message)
    +
    +
    Format an error message with the specified error color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_file_path()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_file_path ( file_path)
    +
    +
    Format a file path with a warning color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_highlight()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_highlight ( message)
    +
    +
    Format a highlighted message with appropriate color.
    +
    +
    + +

    ◆ format_info()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_info ( message)
    +
    +
    Format an informational message with appropriate color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_success()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_success ( message)
    +
    +
    Formats a success message with green color and reset style.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_warning()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_warning ( message)
    +
    +
    Format a warning message with appropriate color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_error()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_error ( message)
    +
    +
    Print an error message with appropriate formatting.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_info()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_info ( message)
    +
    +
    Prints an informational message with formatting.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_processing()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_processing ( file_path)
    +
    +
    Print a processing message for a specified file.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_status()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.ui_utils.print_status ( status,
    message )
    +
    +
    Print a status message with an appropriate symbol.
    +
    +
    + +

    ◆ print_success()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_success ( message)
    +
    +
    Prints a formatted success message.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_warning()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_warning ( message)
    +
    +
    Prints a warning message with formatted output.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ update_stage()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.ui_utils.update_stage ( pbar,
    stage_name )
    +
    +
    Update the progress bar with a new stage name.
    +
    +
    +

    Variable Documentation

    + +

    ◆ autoreset

    + +
    +
    + + + + +
    penify_hook.ui_utils.autoreset
    +
    + +
    +
    + +

    ◆ ERROR_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.ERROR_COLOR = Fore.RED
    +
    + +
    +
    + +

    ◆ ERROR_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.ERROR_SYMBOL = "✗"
    +
    + +
    +
    + +

    ◆ HIGHLIGHT_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE
    +
    + +
    +
    + +

    ◆ INFO_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.INFO_COLOR = Fore.CYAN
    +
    + +
    +
    + +

    ◆ NEUTRAL_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE
    +
    + +
    +
    + +

    ◆ PROCESSING_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.PROCESSING_SYMBOL = "⟳"
    +
    + +
    +
    + +

    ◆ SUCCESS_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN
    +
    + +
    +
    + +

    ◆ SUCCESS_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.SUCCESS_SYMBOL = "✓"
    +
    + +
    +
    + +

    ◆ WARNING_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW
    +
    + +
    +
    + +

    ◆ WARNING_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.WARNING_SYMBOL = "○"
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map new file mode 100644 index 0000000..c3c3e95 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 new file mode 100644 index 0000000..e761ea5 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 @@ -0,0 +1 @@ +3c38bcd27919dc8de91ac54f38458e66 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg new file mode 100644 index 0000000..4ec0e0e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_error + + +Node1 + + +penify_hook.ui_utils.print +_error + + + + + +Node2 + + +penify_hook.ui_utils.format +_error + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg new file mode 100644 index 0000000..ad1d744 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_error + + +Node1 + + +penify_hook.ui_utils.print +_error + + + + + +Node2 + + +penify_hook.ui_utils.format +_error + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map new file mode 100644 index 0000000..c08f35c --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 new file mode 100644 index 0000000..8ba8f00 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 @@ -0,0 +1 @@ +a173588dc3c74cb84d6500d69570dae9 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg new file mode 100644 index 0000000..d133232 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_info + + +Node1 + + +penify_hook.ui_utils.print_info + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg new file mode 100644 index 0000000..01e761e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_info + + +Node1 + + +penify_hook.ui_utils.print_info + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map new file mode 100644 index 0000000..ccf59bb --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 new file mode 100644 index 0000000..9885692 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 @@ -0,0 +1 @@ +a6edbcf33d875fc9e8ec2114278fdbe7 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg new file mode 100644 index 0000000..1d590a5 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_success + + +Node1 + + +penify_hook.ui_utils.format +_success + + + + + +Node2 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg new file mode 100644 index 0000000..5516d4a --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_success + + +Node1 + + +penify_hook.ui_utils.format +_success + + + + + +Node2 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map new file mode 100644 index 0000000..543f29f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 new file mode 100644 index 0000000..cd71f48 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 @@ -0,0 +1 @@ +3fe8e64656feb94d8d766a06e0eeffa6 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg new file mode 100644 index 0000000..6312e92 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.ui_utils.create_stage_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg new file mode 100644 index 0000000..e6c1519 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.ui_utils.create_stage_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map new file mode 100644 index 0000000..91f8d4f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 new file mode 100644 index 0000000..a2351bb --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 @@ -0,0 +1 @@ +19018aa36c614d275a0b9fa78d6c4a06 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg new file mode 100644 index 0000000..ecee302 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_warning + + +Node1 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2 + + +penify_hook.ui_utils.format +_warning + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg new file mode 100644 index 0000000..be1fc4d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_warning + + +Node1 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2 + + +penify_hook.ui_utils.format +_warning + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map new file mode 100644 index 0000000..099c7ce --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 new file mode 100644 index 0000000..4c46648 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 @@ -0,0 +1 @@ +2a1ef2958c91d656bda941549590f8cd \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg new file mode 100644 index 0000000..7707f74 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_warning + + +Node1 + + +penify_hook.ui_utils.format +_warning + + + + + +Node2 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg new file mode 100644 index 0000000..4b752da --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_warning + + +Node1 + + +penify_hook.ui_utils.format +_warning + + + + + +Node2 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map new file mode 100644 index 0000000..fdbf33d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 new file mode 100644 index 0000000..e665eeb --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 @@ -0,0 +1 @@ +377e2e611961eae29e6e68fec93ccea8 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg new file mode 100644 index 0000000..5cdfd3f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_success + + +Node1 + + +penify_hook.ui_utils.print +_success + + + + + +Node2 + + +penify_hook.ui_utils.format +_success + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg new file mode 100644 index 0000000..3ae0228 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_success + + +Node1 + + +penify_hook.ui_utils.print +_success + + + + + +Node2 + + +penify_hook.ui_utils.format +_success + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map new file mode 100644 index 0000000..e4ee6c8 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 new file mode 100644 index 0000000..aee70ff --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 @@ -0,0 +1 @@ +51b93c94dd1dd7360725bd9ecdcd049a \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg new file mode 100644 index 0000000..45c4ff2 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_file_path + + +Node1 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node2 + + +penify_hook.ui_utils.print +_processing + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg new file mode 100644 index 0000000..2192485 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_file_path + + +Node1 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node2 + + +penify_hook.ui_utils.print +_processing + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map new file mode 100644 index 0000000..04fbb0d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 new file mode 100644 index 0000000..0d61e2e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 @@ -0,0 +1 @@ +9da14a7b18d0c9bbc2b0ae0b579a4359 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg new file mode 100644 index 0000000..6f610ce --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_info + + +Node1 + + +penify_hook.ui_utils.format_info + + + + + +Node2 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node4 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg new file mode 100644 index 0000000..909152f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg @@ -0,0 +1,77 @@ + + + + + + +penify_hook.ui_utils.format_info + + +Node1 + + +penify_hook.ui_utils.format_info + + + + + +Node2 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node4 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map new file mode 100644 index 0000000..6ddca67 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 new file mode 100644 index 0000000..7d116e5 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 @@ -0,0 +1 @@ +bf2e3a9ea057ecb4eef1c7637a63ec2d \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg new file mode 100644 index 0000000..1a28fe1 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.ui_utils.create_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg new file mode 100644 index 0000000..fd2e0d6 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.ui_utils.create_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map new file mode 100644 index 0000000..acc2a8e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 new file mode 100644 index 0000000..1310349 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 @@ -0,0 +1 @@ +e2867090c80f81524dcd514523e0702a \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg new file mode 100644 index 0000000..f5afa3e --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_error + + +Node1 + + +penify_hook.ui_utils.format +_error + + + + + +Node2 + + +penify_hook.ui_utils.print +_error + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg new file mode 100644 index 0000000..6759115 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_error + + +Node1 + + +penify_hook.ui_utils.format +_error + + + + + +Node2 + + +penify_hook.ui_utils.print +_error + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map new file mode 100644 index 0000000..33581a9 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 new file mode 100644 index 0000000..0da04ec --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 @@ -0,0 +1 @@ +ce180e2a90aa2b105fddd6414529bb27 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg new file mode 100644 index 0000000..2c10782 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_processing + + +Node1 + + +penify_hook.ui_utils.print +_processing + + + + + +Node2 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg new file mode 100644 index 0000000..983dc7d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_processing + + +Node1 + + +penify_hook.ui_utils.print +_processing + + + + + +Node2 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils.html b/docs/html/namespacepenify__hook_1_1utils.html new file mode 100644 index 0000000..7cc7c4f --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils.html @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.utils Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.utils Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  GitRepoNotFoundError
     
    + + + + + + + +

    +Functions

     get_repo_details (Repo repo)
     
     recursive_search_git_folder (folder_path)
     
     find_git_parent (path)
     
    + + + +

    +Variables

     logger = logging.getLogger(__name__)
     
    +

    Function Documentation

    + +

    ◆ find_git_parent()

    + +
    +
    + + + + + + + +
    penify_hook.utils.find_git_parent ( path)
    +
    +
    Traverse up from the given path to find the nearest directory containing a .git
    +subdirectory.
    +
    +
    + +

    ◆ get_repo_details()

    + +
    +
    + + + + + + + +
    penify_hook.utils.get_repo_details (Repo repo)
    +
    +
    Determine the details of a repository including its remote URL, hosting
    +service, organization name, and repository name.
    +
    +This function extracts the remote URL from the given Git repository object and
    +determines the hosting service (e.g., GitHub, Azure DevOps, Bitbucket, GitLab).
    +It then parses the URL to extract the organization name and repository name. If
    +the URL does not match any known hosting service pattern, it sets the hosting
    +service as "Unknown". The function handles exceptions that may occur during
    +this process and logs an error message if needed.
    +
    +Args:
    +    repo (Repo): A GitPython Repo object representing the local git repository.
    +
    +Returns:
    +    dict: A dictionary containing the organization name, repository name, and hosting
    +        service.
    +
    +
    +
    + +

    ◆ recursive_search_git_folder()

    + +
    +
    + + + + + + + +
    penify_hook.utils.recursive_search_git_folder ( folder_path)
    +
    +
    Recursively searches for a .git folder starting from the given directory.
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    +

    Variable Documentation

    + +

    ◆ logger

    + +
    +
    + + + + +
    penify_hook.utils.logger = logging.getLogger(__name__)
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils.js b/docs/html/namespacepenify__hook_1_1utils.js new file mode 100644 index 0000000..5435ff4 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils.js @@ -0,0 +1,8 @@ +var namespacepenify__hook_1_1utils = +[ + [ "GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ], + [ "find_git_parent", "namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2", null ], + [ "get_repo_details", "namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19", null ], + [ "recursive_search_git_folder", "namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a", null ], + [ "logger", "namespacepenify__hook_1_1utils.html#a0c0c1ed6b197038085c94a90ceedfb01", null ] +]; \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map new file mode 100644 index 0000000..8c6de3d --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 new file mode 100644 index 0000000..eb13324 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 @@ -0,0 +1 @@ +a61951c5b4fd274f26e71bcbe190a8cc \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg new file mode 100644 index 0000000..0a9ceb7 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg new file mode 100644 index 0000000..41437ef --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map new file mode 100644 index 0000000..6bc41f4 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 new file mode 100644 index 0000000..ff9ef84 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 @@ -0,0 +1 @@ +4503fbb4dc37d2af2eaeea5d61541a37 \ No newline at end of file diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg new file mode 100644 index 0000000..315ad23 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg new file mode 100644 index 0000000..c72f8f6 --- /dev/null +++ b/docs/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html new file mode 100644 index 0000000..326335c --- /dev/null +++ b/docs/html/namespaces.html @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    +
    +
    + + + + + diff --git a/docs/html/namespaces_dup.js b/docs/html/namespaces_dup.js new file mode 100644 index 0000000..7fcb39b --- /dev/null +++ b/docs/html/namespaces_dup.js @@ -0,0 +1,20 @@ +var namespaces_dup = +[ + [ "penify_hook", "namespacepenify__hook.html", "namespacepenify__hook" ], + [ "setup", "namespacesetup.html", [ + [ "author", "namespacesetup.html#a3a57a4772d418a06835249cbade0d86a", null ], + [ "author_email", "namespacesetup.html#a5b08034343aa2be607722a8b315f3625", null ], + [ "classifiers", "namespacesetup.html#abe96a9c38c1c61f9f0fdb002c482f785", null ], + [ "description", "namespacesetup.html#aedf461ec52a946bda975938ba0b93ec0", null ], + [ "entry_points", "namespacesetup.html#ada7058afc98897f073d3f3b8b9157059", null ], + [ "install_requires", "namespacesetup.html#abead4f26b530856f858f0d44c7cf2588", null ], + [ "long_description", "namespacesetup.html#a4cda9dbfb952875376a0749fe08a5bde", null ], + [ "long_description_content_type", "namespacesetup.html#a3796ea10c998699d07d391414ff5d720", null ], + [ "name", "namespacesetup.html#ab3a7a0638d76a01367c5bc3cc699447f", null ], + [ "packages", "namespacesetup.html#aff2375a361fd5865c77bd9aa093be747", null ], + [ "python_requires", "namespacesetup.html#aa7ca7bc9391b217e81efeb03689d8dbf", null ], + [ "url", "namespacesetup.html#afc13124aa5c0124e84e1d965e3f4b0fb", null ], + [ "version", "namespacesetup.html#a2aa722b36a933088812b50ea79b97a5c", null ] + ] ], + [ "tests", "namespacetests.html", "namespacetests" ] +]; \ No newline at end of file diff --git a/docs/html/namespacesetup.html b/docs/html/namespacesetup.html new file mode 100644 index 0000000..344732c --- /dev/null +++ b/docs/html/namespacesetup.html @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + +penify-cli: setup Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    setup Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     name
     
     version
     
     packages
     
     install_requires
     
     entry_points
     
     author
     
     author_email
     
     description
     
     long_description
     
     long_description_content_type
     
     url
     
     classifiers
     
     python_requires
     
    +

    Variable Documentation

    + +

    ◆ author

    + +
    +
    + + + + +
    setup.author
    +
    + +
    +
    + +

    ◆ author_email

    + +
    +
    + + + + +
    setup.author_email
    +
    + +
    +
    + +

    ◆ classifiers

    + +
    +
    + + + + +
    setup.classifiers
    +
    + +
    +
    + +

    ◆ description

    + +
    +
    + + + + +
    setup.description
    +
    + +
    +
    + +

    ◆ entry_points

    + +
    +
    + + + + +
    setup.entry_points
    +
    + +
    +
    + +

    ◆ install_requires

    + +
    +
    + + + + +
    setup.install_requires
    +
    + +
    +
    + +

    ◆ long_description

    + +
    +
    + + + + +
    setup.long_description
    +
    + +
    +
    + +

    ◆ long_description_content_type

    + +
    +
    + + + + +
    setup.long_description_content_type
    +
    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    setup.name
    +
    + +
    +
    + +

    ◆ packages

    + +
    +
    + + + + +
    setup.packages
    +
    + +
    +
    + +

    ◆ python_requires

    + +
    +
    + + + + +
    setup.python_requires
    +
    + +
    +
    + +

    ◆ url

    + +
    +
    + + + + +
    setup.url
    +
    + +
    +
    + +

    ◆ version

    + +
    +
    + + + + +
    setup.version
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacetests.html b/docs/html/namespacetests.html new file mode 100644 index 0000000..cb317a0 --- /dev/null +++ b/docs/html/namespacetests.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests Namespace Reference
    +
    +
    + + + + + + + + + + + + +

    +Namespaces

    namespace  conftest
     
    namespace  test_commit_commands
     
    namespace  test_config_commands
     
    namespace  test_doc_commands
     
    namespace  test_web_config
     
    +
    +
    + + + + + diff --git a/docs/html/namespacetests.js b/docs/html/namespacetests.js new file mode 100644 index 0000000..30e7f6c --- /dev/null +++ b/docs/html/namespacetests.js @@ -0,0 +1,20 @@ +var namespacetests = +[ + [ "conftest", "namespacetests_1_1conftest.html", null ], + [ "test_commit_commands", "namespacetests_1_1test__commit__commands.html", "namespacetests_1_1test__commit__commands" ], + [ "test_config_commands", "namespacetests_1_1test__config__commands.html", "namespacetests_1_1test__config__commands" ], + [ "test_doc_commands", "namespacetests_1_1test__doc__commands.html", [ + [ "test_generate_doc_error_handling", "namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6", null ], + [ "test_generate_doc_file_location", "namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16", null ], + [ "test_generate_doc_folder_location", "namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d", null ], + [ "test_generate_doc_no_location", "namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b", null ], + [ "test_generate_doc_with_file_exception", "namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68", null ], + [ "test_generate_doc_with_folder_exception", "namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee", null ], + [ "test_handle_docgen_generate", "namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5", null ], + [ "test_handle_docgen_install_hook", "namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9", null ], + [ "test_handle_docgen_no_token", "namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c", null ], + [ "test_handle_docgen_uninstall_hook", "namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b", null ], + [ "test_setup_docgen_parser", "namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042", null ] + ] ], + [ "test_web_config", "namespacetests_1_1test__web__config.html", "namespacetests_1_1test__web__config" ] +]; \ No newline at end of file diff --git a/docs/html/namespacetests_1_1conftest.html b/docs/html/namespacetests_1_1conftest.html new file mode 100644 index 0000000..6026550 --- /dev/null +++ b/docs/html/namespacetests_1_1conftest.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.conftest Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    tests.conftest Namespace Reference
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacetests_1_1test__commit__commands.html b/docs/html/namespacetests_1_1test__commit__commands.html new file mode 100644 index 0000000..34eab37 --- /dev/null +++ b/docs/html/namespacetests_1_1test__commit__commands.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_commit_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_commit_commands Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  TestCommitCommands
     
    +
    +
    + + + + + diff --git a/docs/html/namespacetests_1_1test__commit__commands.js b/docs/html/namespacetests_1_1test__commit__commands.js new file mode 100644 index 0000000..03fd373 --- /dev/null +++ b/docs/html/namespacetests_1_1test__commit__commands.js @@ -0,0 +1,4 @@ +var namespacetests_1_1test__commit__commands = +[ + [ "TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", "classtests_1_1test__commit__commands_1_1TestCommitCommands" ] +]; \ No newline at end of file diff --git a/docs/html/namespacetests_1_1test__config__commands.html b/docs/html/namespacetests_1_1test__config__commands.html new file mode 100644 index 0000000..237b7d9 --- /dev/null +++ b/docs/html/namespacetests_1_1test__config__commands.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_config_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_config_commands Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  TestConfigCommands
     
    +
    +
    + + + + + diff --git a/docs/html/namespacetests_1_1test__config__commands.js b/docs/html/namespacetests_1_1test__config__commands.js new file mode 100644 index 0000000..ae998ee --- /dev/null +++ b/docs/html/namespacetests_1_1test__config__commands.js @@ -0,0 +1,4 @@ +var namespacetests_1_1test__config__commands = +[ + [ "TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", "classtests_1_1test__config__commands_1_1TestConfigCommands" ] +]; \ No newline at end of file diff --git a/docs/html/namespacetests_1_1test__doc__commands.html b/docs/html/namespacetests_1_1test__doc__commands.html new file mode 100644 index 0000000..ae8211a --- /dev/null +++ b/docs/html/namespacetests_1_1test__doc__commands.html @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_doc_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_doc_commands Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     test_generate_doc_no_location (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     test_generate_doc_file_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     test_generate_doc_folder_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     test_generate_doc_error_handling (mock_api_client, mock_git_analyzer, mock_exit)
     
     test_setup_docgen_parser ()
     
     test_handle_docgen_install_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     test_handle_docgen_uninstall_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     test_handle_docgen_generate (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     test_handle_docgen_no_token (mock_exit, mock_get_token)
     
     test_generate_doc_with_file_exception (mock_api_client, mock_getcwd)
     
     test_generate_doc_with_folder_exception (mock_api_client, mock_getcwd)
     
    +

    Function Documentation

    + +

    ◆ test_generate_doc_error_handling()

    + +
    +
    + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_error_handling ( mock_api_client,
    mock_git_analyzer,
    mock_exit )
    +
    +
    Generate a documentation string for the provided code snippet using
    +Google Docstring style.
    +
    +Short one line description: Test function to ensure proper error
    +handling during API calls with GitAnalyzer.  Multiline long description:
    +This test function is designed to verify that the generate_doc function
    +handles exceptions correctly when an error occurs during API interaction
    +with GitAnalyzer. It sets up a mock API client and a mock Git analyzer,
    +causing the analyzer to raise an exception to simulate a failure
    +condition. The function then asserts that the exit code is set to 1 when
    +the error handling mechanism is invoked.
    +
    +Args:
    +    mock_api_client (MagicMock): A mock object simulating the API client.
    +    mock_git_analyzer (MagicMock): A mock object simulating the Git analyzer, configured to raise an
    +        exception.
    +    mock_exit (MagicMock): A mock object representing the exit function, which should be called
    +        with an error code.
    +
    +
    +
    + +

    ◆ test_generate_doc_file_location()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_file_location ( mock_api_client,
    mock_folder_analyzer,
    mock_file_analyzer,
    mock_git_analyzer )
    +
    +
    Test generating a documentation file location.
    +
    +This function tests the process of generating a documentation file
    +location using mock objects for API client, folder analyzer, file
    +analyzer, and Git analyzer. It sets up the necessary mocks, calls the
    +`generate_doc` function with specified parameters, and asserts that the
    +appropriate methods on the mock objects are called as expected.
    +
    +Args:
    +    mock_api_client (MagicMock): Mock object for the API client.
    +    mock_folder_analyzer (MagicMock): Mock object for the folder analyzer.
    +    mock_file_analyzer (MagicMock): Mock object for the file analyzer.
    +    mock_git_analyzer (MagicMock): Mock object for the Git analyzer.
    +
    +
    +
    + +

    ◆ test_generate_doc_folder_location()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_folder_location ( mock_api_client,
    mock_folder_analyzer,
    mock_file_analyzer,
    mock_git_analyzer )
    +
    +
    Test the function to generate documentation for a folder location.
    +
    +It sets up mock objects for API client, folder analyzer, file analyzer,
    +and Git analyzer, then calls the `generate_doc` function with specified
    +parameters. Finally, it asserts that the correct methods on the mock
    +objects were called as expected.
    +
    +Args:
    +    mock_api_client (MagicMock): Mock object for the API client.
    +    mock_folder_analyzer (MagicMock): Mock object for the folder analyzer.
    +    mock_file_analyzer (MagicMock): Mock object for the file analyzer.
    +    mock_git_analyzer (MagicMock): Mock object for the Git analyzer.
    +
    +
    +
    + +

    ◆ test_generate_doc_no_location()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_no_location ( mock_getcwd,
    mock_api_client,
    mock_folder_analyzer,
    mock_file_analyzer,
    mock_git_analyzer )
    +
    +
    Test function to generate documentation without location information.
    +
    +This function sets up mocks for the API client, current working
    +directory, and Git analyzer. It then calls the `generate_doc` function
    +with a fake API URL and token. The function is expected to initialize
    +the API client, configure the Git analyzer, and run it without any
    +location information.
    +
    +Args:
    +    mock_getcwd (MagicMock): Mock for os.getcwd().
    +    mock_api_client (MagicMock): Mock for creating an API client.
    +    mock_folder_analyzer (MagicMock): Mock for folder analysis.
    +    mock_file_analyzer (MagicMock): Mock for file analysis.
    +    mock_git_analyzer (MagicMock): Mock for Git analyzer setup.
    +
    +
    +
    + +

    ◆ test_generate_doc_with_file_exception()

    + +
    +
    + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_with_file_exception ( mock_api_client,
    mock_getcwd )
    +
    +
    Generate documentation from a Python source file.
    +
    +This function reads a Python file and generates a docstring based on its
    +content. It uses mock objects to simulate API calls and directory
    +operations during testing.
    +
    +Args:
    +    mock_api_client (unittest.mock.MagicMock): A mock object for simulating API client behavior.
    +    mock_getcwd (unittest.mock.MagicMock): A mock object for simulating the current working directory function.
    +
    +
    +
    + +

    ◆ test_generate_doc_with_folder_exception()

    + +
    +
    + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_with_folder_exception ( mock_api_client,
    mock_getcwd )
    +
    +
    Generate documentation from a given API endpoint and save it to a
    +folder.
    +
    +This function fetches data from the specified API endpoint, processes
    +it, and saves the generated documentation in the provided folder. If an
    +error occurs during the fetching process, a SystemExit exception is
    +raised with an appropriate message.
    +
    +Args:
    +    api_url (str): The URL of the API endpoint from which data will be fetched.
    +    token (str): The authentication token required to access the API.
    +    folder_path (str): The path to the folder where the documentation will be saved.
    +
    +
    +
    + +

    ◆ test_handle_docgen_generate()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_generate ( mock_get_token,
    mock_generate_doc,
    mock_uninstall_hook,
    mock_install_hook )
    +
    +
    Test the direct documentation generation functionality.
    +
    +This function tests the `handle_docgen` function when no subcommand is
    +provided. It verifies that the document generation hook is called and
    +the uninstall and install hooks are not called.
    +
    +Args:
    +    mock_get_token (MagicMock): Mocked function to get authentication token.
    +    mock_generate_doc (MagicMock): Mocked function for generating documentation.
    +    mock_uninstall_hook (MagicMock): Mocked function for uninstalling the document generation hook.
    +    mock_install_hook (MagicMock): Mocked function for installing the document generation hook.
    +
    +
    +
    + +

    ◆ test_handle_docgen_install_hook()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_install_hook ( mock_exit,
    mock_get_token,
    mock_generate_doc,
    mock_uninstall_hook,
    mock_install_hook )
    +
    +
    Test the handling of the 'install-hook' subcommand.
    +
    +This function sets up a mock environment where it simulates the
    +execution of the 'install-hook' subcommand. It verifies that the
    +`mock_install_hook` is called with the correct arguments, while
    +`mock_generate_doc` and `mock_uninstall_hook` are not called.
    +
    +Args:
    +    mock_exit (MagicMock): Mock object for sys.exit.
    +    mock_get_token (MagicMock): Mock object to simulate fetching a token.
    +    mock_generate_doc (MagicMock): Mock object to simulate generating documentation.
    +    mock_uninstall_hook (MagicMock): Mock object to simulate uninstalling a hook.
    +    mock_install_hook (MagicMock): Mock object to simulate installing a hook.
    +
    +
    +
    + +

    ◆ test_handle_docgen_no_token()

    + +
    +
    + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_no_token ( mock_exit,
    mock_get_token )
    +
    +
    Test the behavior of the `handle_docgen` function when no token is
    +provided.
    +
    +This function asserts that if no token is returned by `mock_get_token`,
    +the `handle_docgen` function will call `mock_exit` with a status code of
    +1.
    +
    +Args:
    +    mock_exit (MagicMock): A MagicMock object simulating the `exit` function.
    +    mock_get_token (MagicMock): A MagicMock object simulating the `get_token` function.
    +
    +
    +
    + +

    ◆ test_handle_docgen_uninstall_hook()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_uninstall_hook ( mock_exit,
    mock_get_token,
    mock_generate_doc,
    mock_uninstall_hook,
    mock_install_hook )
    +
    +
    Test the uninstall-hook subcommand of the handle_docgen function.
    +This test case sets up a mock environment and verifies that the
    +uninstall-hook is called with the correct location, while generate_doc
    +and install_hook are not called.
    +
    +Args:
    +    mock_exit (MagicMock): A mock for the exit function.
    +    mock_get_token (MagicMock): A mock for the get_token function.
    +    mock_generate_doc (MagicMock): A mock for the generate_doc function.
    +    mock_uninstall_hook (MagicMock): A mock for the uninstall_hook function.
    +    mock_install_hook (MagicMock): A mock for the install_hook function.
    +
    +
    +
    + +

    ◆ test_setup_docgen_parser()

    + +
    +
    + + + + + + + +
    tests.test_doc_commands.test_setup_docgen_parser ()
    +
    +
    Test the setup_docgen_parser function to ensure it properly configures
    +the ArgumentParser for docgen options.
    +
    +It verifies that the parser correctly sets up docgen options and handles
    +different subcommands like 'install-hook' and 'uninstall-hook'.
    +
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/namespacetests_1_1test__web__config.html b/docs/html/namespacetests_1_1test__web__config.html new file mode 100644 index 0000000..0f3f848 --- /dev/null +++ b/docs/html/namespacetests_1_1test__web__config.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_web_config Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_web_config Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  TestWebConfig
     
    +
    +
    + + + + + diff --git a/docs/html/namespacetests_1_1test__web__config.js b/docs/html/namespacetests_1_1test__web__config.js new file mode 100644 index 0000000..9c444bb --- /dev/null +++ b/docs/html/namespacetests_1_1test__web__config.js @@ -0,0 +1,4 @@ +var namespacetests_1_1test__web__config = +[ + [ "TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", "classtests_1_1test__web__config_1_1TestWebConfig" ] +]; \ No newline at end of file diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/docs/html/nav_fd.png b/docs/html/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/docs/html/navtree.css b/docs/html/navtree.css new file mode 100644 index 0000000..6b1e5e4 --- /dev/null +++ b/docs/html/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/html/navtree.js b/docs/html/navtree.js new file mode 100644 index 0000000..2d4fa84 --- /dev/null +++ b/docs/html/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + + + + + + + + + + +penify-cli: Related Pages + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    + +
    + + + + + diff --git a/docs/html/penify-cli-documentation_8md.html b/docs/html/penify-cli-documentation_8md.html new file mode 100644 index 0000000..60e8854 --- /dev/null +++ b/docs/html/penify-cli-documentation_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/penify-cli-documentation.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/docs/penify-cli-documentation.md File Reference
    +
    +
    +
    +
    + + + + + diff --git a/docs/html/penify__hook_2____init_____8py.html b/docs/html/penify__hook_2____init_____8py.html new file mode 100644 index 0000000..edb29bc --- /dev/null +++ b/docs/html/penify__hook_2____init_____8py.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/__init__.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    __init__.py File Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  penify_hook
     
    +
    +
    + + + + + diff --git a/docs/html/penify__hook_2commands_2____init_____8py.html b/docs/html/penify__hook_2commands_2____init_____8py.html new file mode 100644 index 0000000..b7239d0 --- /dev/null +++ b/docs/html/penify__hook_2commands_2____init_____8py.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/commands/__init__.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    __init__.py File Reference
    +
    +
    + + + + + + +

    +Namespaces

    namespace  penify_hook
     
    namespace  penify_hook.commands
     
    +
    +
    + + + + + diff --git a/docs/html/plus.svg b/docs/html/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/docs/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/plusd.svg b/docs/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/resize.js b/docs/html/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/docs/html/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..f3a2395 --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_3a_20efficient_20git_20commits_20with_20ai_0',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]] +]; diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..355f80e --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_3a_20documentation_20generation_20pipeline_0',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]] +]; diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js new file mode 100644 index 0000000..37d8ad6 --- /dev/null +++ b/docs/html/search/all_10.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['l_20location_20tt_0',['<tt>-l, --location</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'']]], + ['leads_1',['For Team Leads',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md118',1,'']]], + ['legacy_20code_20understanding_2',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['license_3',['License',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md172',1,'']]], + ['line_20configuration_4',['Command-Line Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md37',1,'']]], + ['list_5fall_5ffiles_5fin_5fdir_5',['list_all_files_in_dir',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a050554646cbc07aef1fbaa748ee4c0fc',1,'penify_hook::folder_analyzer::FolderAnalyzerGenHook']]], + ['litellm_6',['litellm',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#aa646fddc43ecd633d2c358d58dd4df24',1,'penify_hook::llm_client::LLMClient']]], + ['llm_7',['Using Local LLM',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md12',1,'']]], + ['llm_20and_20jira_20integration_8',['LLM and JIRA Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'']]], + ['llm_20configuration_9',['LLM Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md23',1,'LLM Configuration'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md168',1,'Local LLM Configuration']]], + ['llm_5fclient_10',['llm_client',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ad93360e31f2ec58a0d7c9f08b219028a',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['llm_5fclient_2epy_11',['llm_client.py',['../llm__client_8py.html',1,'']]], + ['llmclient_12',['LLMClient',['../classpenify__hook_1_1llm__client_1_1LLMClient.html',1,'penify_hook::llm_client']]], + ['llms_13',['Supported LLMs',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md25',1,'']]], + ['load_5fenv_5ffiles_14',['load_env_files',['../namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae',1,'penify_hook::commands::config_commands']]], + ['local_15',['Ollama (Local)',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md28',1,'']]], + ['local_20llm_16',['Using Local LLM',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md12',1,'']]], + ['local_20llm_20configuration_17',['Local LLM Configuration',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md168',1,'']]], + ['location_18',['Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md55',1,'Custom Hook Location'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md83',1,'Installation Location']]], + ['location_20tt_19',['<tt>-l, --location</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'']]], + ['locations_20',['Configuration Locations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md35',1,'']]], + ['logger_21',['logger',['../namespacepenify__hook_1_1file__analyzer.html#af419a4965f079d58cac5a5281ddb1828',1,'penify_hook.file_analyzer.logger'],['../namespacepenify__hook_1_1git__analyzer.html#ac4ce143fdca789a79c66852c37d7363a',1,'penify_hook.git_analyzer.logger'],['../namespacepenify__hook_1_1utils.html#a0c0c1ed6b197038085c94a90ceedfb01',1,'penify_hook.utils.logger']]], + ['login_22',['Login',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md164',1,'']]], + ['login_23',['login',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6',1,'penify_hook::commands::auth_commands']]], + ['login_20command_24',['Login Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md141',1,'']]], + ['login_20process_25',['Login Process',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md44',1,'']]], + ['login_20required_26',['Advanced Commands (Login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md163',1,'']]], + ['login_20required_27',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md160',1,'']]], + ['login_5fcommand_2epy_28',['login_command.py',['../login__command_8py.html',1,'']]], + ['logs_29',['Logs',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md61',1,'']]], + ['long_5fdescription_30',['long_description',['../namespacesetup.html#a4cda9dbfb952875376a0749fe08a5bde',1,'setup']]], + ['long_5fdescription_5fcontent_5ftype_31',['long_description_content_type',['../namespacesetup.html#a3796ea10c998699d07d391414ff5d720',1,'setup']]] +]; diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js new file mode 100644 index 0000000..ff2ad49 --- /dev/null +++ b/docs/html/search/all_11.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['m_20message_20tt_0',['<tt>-m, --message</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'']]], + ['main_1',['main',['../namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb',1,'penify_hook::main']]], + ['main_2epy_2',['main.py',['../main_8py.html',1,'']]], + ['management_3',['Git Hook Management',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md166',1,'']]], + ['manual_20documentation_4',['Manual Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md111',1,'']]], + ['manual_20hook_20removal_5',['Manual Hook Removal',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md92',1,'']]], + ['members_6',['Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'For New Team Members'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'Workflow 4: Onboarding New Team Members']]], + ['message_7',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['message_20generation_8',['Commit Message Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md48',1,'']]], + ['message_20tt_9',['<tt>-m, --message</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'']]], + ['mock_5fapi_5fclient_10',['mock_api_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a7f9beb5fdd122ed9a39dd0751934d661',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fcommit_5fdoc_5fgen_11',['mock_commit_doc_gen',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a4e7b42caad38d0f9162c7b490720a3b7',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fgit_5ffolder_5fsearch_12',['mock_git_folder_search',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a71bfa48c9a521febb5c279cff113fbf5',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fjira_5fclient_13',['mock_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a43b8dd6adb507ef30604cd790940b881',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fllm_5fclient_14',['mock_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#af8f0277ac27f0e9d0a0e4bc6fcd77107',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fprint_5ffunctions_15',['mock_print_functions',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a65132bfab05d287af9eb380b73d332ab',1,'tests::test_commit_commands::TestCommitCommands']]], + ['model_16',['model',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#abc2cb6b1d6d9b5dc16401ca078ec8c10',1,'penify_hook::llm_client::LLMClient']]], + ['modifying_20hook_20behavior_17',['Modifying Hook Behavior',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md87',1,'']]] +]; diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js new file mode 100644 index 0000000..8efe90c --- /dev/null +++ b/docs/html/search/all_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['name_0',['name',['../namespacesetup.html#ab3a7a0638d76a01367c5bc3cc699447f',1,'setup']]], + ['neutral_5fcolor_1',['NEUTRAL_COLOR',['../namespacepenify__hook_1_1ui__utils.html#aca0fcee81606857497520ae4290bc9f5',1,'penify_hook::ui_utils']]], + ['new_20team_20members_2',['New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'For New Team Members'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'Workflow 4: Onboarding New Team Members']]], + ['no_20login_20required_3',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md160',1,'']]] +]; diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js new file mode 100644 index 0000000..d2b4600 --- /dev/null +++ b/docs/html/search/all_13.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['of_20contents_0',['of Contents',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md42',1,'Table of Contents'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md64',1,'Table of Contents']]], + ['ollama_20local_1',['Ollama (Local)',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md28',1,'']]], + ['onboarding_20new_20team_20members_2',['Workflow 4: Onboarding New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'']]], + ['only_20with_20context_3',['Generate Title Only with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'']]], + ['openai_4',['OpenAI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md29',1,'Azure OpenAI'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md26',1,'OpenAI']]], + ['option_20combinations_5',['Option Combinations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md6',1,'Option Combinations'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md71',1,'Option Combinations']]], + ['options_6',['Options',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md2',1,'Command Options'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md66',1,'Command Options']]], + ['options_3a_7',['Options:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md132',1,'Options:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md148',1,'Options:']]], + ['overview_8',['Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md47',1,'Command Overview'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md128',1,'Commands Overview'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md21',1,'Configuration Overview']]] +]; diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js new file mode 100644 index 0000000..9fcea3a --- /dev/null +++ b/docs/html/search/all_14.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['packages_0',['packages',['../namespacesetup.html#aff2375a361fd5865c77bd9aa093be747',1,'setup']]], + ['path_1',['path',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a79fceaf7882b9bcf1075a24262c5d7e2',1,'penify_hook::commands::config_commands']]], + ['penify_20cli_20commit_20commands_2',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['penify_20cli_20configuration_20commands_3',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'']]], + ['penify_20cli_20detailed_20usage_20guide_4',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['penify_20cli_20documentation_5',['Penify CLI Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md125',1,'']]], + ['penify_20cli_20documentation_6',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['penify_20cli_20documentation_20generation_20commands_7',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['penify_20cli_20example_20workflows_8',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['penify_2dcli_2ddocumentation_2emd_9',['penify-cli-documentation.md',['../penify-cli-documentation_8md.html',1,'']]], + ['penify_5fhook_10',['penify_hook',['../namespacepenify__hook.html',1,'']]], + ['penify_5fhook_3a_3aapi_5fclient_11',['api_client',['../namespacepenify__hook_1_1api__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3abase_5fanalyzer_12',['base_analyzer',['../namespacepenify__hook_1_1base__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_13',['commands',['../namespacepenify__hook_1_1commands.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_3a_3aauth_5fcommands_14',['auth_commands',['../namespacepenify__hook_1_1commands_1_1auth__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3acommit_5fcommands_15',['commit_commands',['../namespacepenify__hook_1_1commands_1_1commit__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3aconfig_5fcommands_16',['config_commands',['../namespacepenify__hook_1_1commands_1_1config__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3adoc_5fcommands_17',['doc_commands',['../namespacepenify__hook_1_1commands_1_1doc__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3ahook_5fcommands_18',['hook_commands',['../namespacepenify__hook_1_1commands_1_1hook__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommit_5fanalyzer_19',['commit_analyzer',['../namespacepenify__hook_1_1commit__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconfig_5fcommand_20',['config_command',['../namespacepenify__hook_1_1config__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconstants_21',['constants',['../namespacepenify__hook_1_1constants.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afile_5fanalyzer_22',['file_analyzer',['../namespacepenify__hook_1_1file__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afolder_5fanalyzer_23',['folder_analyzer',['../namespacepenify__hook_1_1folder__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3agit_5fanalyzer_24',['git_analyzer',['../namespacepenify__hook_1_1git__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3ajira_5fclient_25',['jira_client',['../namespacepenify__hook_1_1jira__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3allm_5fclient_26',['llm_client',['../namespacepenify__hook_1_1llm__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3alogin_5fcommand_27',['login_command',['../namespacepenify__hook_1_1login__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3amain_28',['main',['../namespacepenify__hook_1_1main.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aui_5futils_29',['ui_utils',['../namespacepenify__hook_1_1ui__utils.html',1,'penify_hook']]], + ['penify_5fhook_3a_3autils_30',['utils',['../namespacepenify__hook_1_1utils.html',1,'penify_hook']]], + ['pipeline_31',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['post_20commit_20hook_32',['Post-Commit Hook',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md54',1,'']]], + ['precedence_33',['Token Precedence',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md46',1,'']]], + ['print_5ferror_34',['print_error',['../namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598',1,'penify_hook::ui_utils']]], + ['print_5finfo_35',['print_info',['../namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c',1,'penify_hook::ui_utils']]], + ['print_5fprocessing_36',['print_processing',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a1b371f1ba909b4fd351c542815f18747',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing()'],['../namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb',1,'penify_hook.ui_utils.print_processing(file_path)']]], + ['print_5fstatus_37',['print_status',['../namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7',1,'penify_hook::ui_utils']]], + ['print_5fsuccess_38',['print_success',['../namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b',1,'penify_hook::ui_utils']]], + ['print_5fwarning_39',['print_warning',['../namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45',1,'penify_hook::ui_utils']]], + ['process_40',['Login Process',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md44',1,'']]], + ['process_5ffile_41',['process_file',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#aeb3be324ba517855d6e5cdb684a6efda',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.process_file()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a0fcec06966a3a5ef1df21529a6a3db81',1,'penify_hook.git_analyzer.GitDocGenHook.process_file()']]], + ['process_5fjira_5fintegration_42',['process_jira_integration',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#adda13cc121d96342476ccf72b63a007f',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['processing_5fsymbol_43',['PROCESSING_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#ad7cc8eaf7a660ff195f4366d792ab155',1,'penify_hook::ui_utils']]], + ['provide_20context_44',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['python_5frequires_45',['python_requires',['../namespacesetup.html#aa7ca7bc9391b217e81efeb03689d8dbf',1,'setup']]] +]; diff --git a/docs/html/search/all_15.js b/docs/html/search/all_15.js new file mode 100644 index 0000000..84997c7 --- /dev/null +++ b/docs/html/search/all_15.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../README_8md.html',1,'']]], + ['recursive_5fsearch_5fgit_5ffolder_1',['recursive_search_git_folder',['../namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a',1,'penify_hook::utils']]], + ['relative_5ffile_5fpath_2',['relative_file_path',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#ab702c0c3ba81d159d7c3bcd7ea2abba4',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['release_20tags_3',['Documenting Release Tags',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md98',1,'']]], + ['remote_20repository_20documentation_4',['Remote Repository Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md58',1,'']]], + ['removal_5',['Manual Hook Removal',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md92',1,'']]], + ['repo_6',['repo',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a3a9ddfa1dfba81fe21214fe486389369',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['repo_5fdetails_7',['repo_details',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a9cca3465b0cc00d78324b0a9eac1d7f5',1,'penify_hook.base_analyzer.BaseAnalyzer.repo_details'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook.commit_analyzer.CommitDocGenHook.repo_details']]], + ['repo_5fpath_8',['repo_path',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a957e81a1ab561f6cecfbe999e7b85499',1,'penify_hook.base_analyzer.BaseAnalyzer.repo_path'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook.commit_analyzer.CommitDocGenHook.repo_path']]], + ['repository_9',['Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'Install Hook in Current Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'Install Hook in Specific Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'Uninstall Hook from Current Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'Uninstall Hook from Specific Repository']]], + ['repository_20documentation_10',['Remote Repository Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md58',1,'']]], + ['repository_20uninstallation_11',['Specific Repository Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md91',1,'']]], + ['required_12',['required',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md163',1,'Advanced Commands (Login required)'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md160',1,'Basic Commands (No login required)']]], + ['requirement_13',['Authentication Requirement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md51',1,'']]], + ['requirements_14',['Requirements',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md14',1,'Configuration Requirements'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md84',1,'Installation Requirements']]], + ['requirements_3a_15',['Requirements:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md134',1,'Requirements:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md151',1,'Requirements:']]], + ['resources_16',['Additional Resources',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md155',1,'']]], + ['review_20enhancement_17',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]], + ['run_18',['run',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a2d0bb9eba04614915fa33a1d7b0b8f03',1,'penify_hook.commit_analyzer.CommitDocGenHook.run()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a503c97b07cb2db1df0d881094dd6bb49',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.run()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53c61ef41d39dd9bb1c8020a94f1dd8d',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.run()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a38fe1e50fc9448d995851d933283b633',1,'penify_hook.git_analyzer.GitDocGenHook.run()']]], + ['running_20tests_19',['Running Tests',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md171',1,'']]] +]; diff --git a/docs/html/search/all_16.js b/docs/html/search/all_16.js new file mode 100644 index 0000000..ad1ceb4 --- /dev/null +++ b/docs/html/search/all_16.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['sauarbh_0',['author: Suman Sauarbh',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md124',1,'']]], + ['save_5fcredentials_1',['save_credentials',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b',1,'penify_hook::commands::auth_commands']]], + ['save_5fjira_5fconfig_2',['save_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374',1,'penify_hook::commands::config_commands']]], + ['save_5fllm_5fconfig_3',['save_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4',1,'penify_hook::commands::config_commands']]], + ['scenarios_4',['Advanced Hook Scenarios',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md88',1,'']]], + ['script_20content_5',['Hook Script Content',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md82',1,'']]], + ['send_5ffile_5ffor_5fdocstring_5fgeneration_6',['send_file_for_docstring_generation',['../classpenify__hook_1_1api__client_1_1APIClient.html#ad6392c5f8e8b5e3394a74979278835bd',1,'penify_hook::api_client::APIClient']]], + ['settings_7',['Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'Basic Commit with Default Settings'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md52',1,'Configuration Settings']]], + ['setup_8',['Setup',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md105',1,'Setup'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md109',1,'Setup'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md114',1,'Setup']]], + ['setup_9',['setup',['../namespacesetup.html',1,'']]], + ['setup_2epy_10',['setup.py',['../setup_8py.html',1,'']]], + ['setup_5fcommit_5fparser_11',['setup_commit_parser',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1',1,'penify_hook::commands::commit_commands']]], + ['setup_5fconfig_5fparser_12',['setup_config_parser',['../namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba',1,'penify_hook::config_command']]], + ['setup_5fdocgen_5fparser_13',['setup_docgen_parser',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6',1,'penify_hook::commands::doc_commands']]], + ['setup_5flogin_5fparser_14',['setup_login_parser',['../namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235',1,'penify_hook::login_command']]], + ['sharing_20configuration_15',['Sharing Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md38',1,'']]], + ['specific_20file_16',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['specific_20repository_17',['Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'Install Hook in Specific Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'Uninstall Hook from Specific Repository']]], + ['specific_20repository_20uninstallation_18',['Specific Repository Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md91',1,'']]], + ['standard_20uninstallation_19',['Standard Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md90',1,'']]], + ['started_20',['Getting Started',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md127',1,'']]], + ['storage_21',['API Token Storage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md45',1,'']]], + ['structure_22',['Structure',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md30',1,'Configuration File Structure'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md34',1,'Configuration File Structure']]], + ['subcommands_23',['Subcommands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md68',1,'']]], + ['subcommands_3a_24',['Subcommands:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md138',1,'Subcommands:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md149',1,'Subcommands:']]], + ['success_5fcolor_25',['SUCCESS_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a22c450c5e2b5394618ecf9b636560df4',1,'penify_hook::ui_utils']]], + ['success_5fsymbol_26',['SUCCESS_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#a7d3cc992aaeb0a01c536c9a48e801ff3',1,'penify_hook::ui_utils']]], + ['suman_20sauarbh_27',['author: Suman Sauarbh',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md124',1,'']]], + ['support_28',['Support',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md62',1,'Support'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md176',1,'Support']]], + ['supported_20llms_29',['Supported LLMs',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md25',1,'']]], + ['supported_5ffile_5ftypes_30',['supported_file_types',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a0cac0310ec635aa64a34857cf30ce1eb',1,'penify_hook.base_analyzer.BaseAnalyzer.supported_file_types'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.supported_file_types'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html',1,'penify_hook.git_analyzer.GitDocGenHook.supported_file_types']]] +]; diff --git a/docs/html/search/all_17.js b/docs/html/search/all_17.js new file mode 100644 index 0000000..1adc4d7 --- /dev/null +++ b/docs/html/search/all_17.js @@ -0,0 +1,66 @@ +var searchData= +[ + ['table_20of_20contents_0',['Table of Contents',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md42',1,'Table of Contents'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md64',1,'Table of Contents']]], + ['tags_1',['Documenting Release Tags',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md98',1,'']]], + ['team_20leads_2',['For Team Leads',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md118',1,'']]], + ['team_20members_3',['Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'For New Team Members'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'Workflow 4: Onboarding New Team Members']]], + ['terminal_20tt_4',['<tt>-e, --terminal</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'']]], + ['test_5fcommit_5fcode_5ferror_5fhandling_5',['test_commit_code_error_handling',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a8288fd5a830273e48732231df0421658',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fclient_6',['test_commit_code_with_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a02319d7a366df3950c8c151dd7821a93',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fconnection_5ffailure_7',['test_commit_code_with_jira_connection_failure',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#ae8066d6f07122a6be89b05ddbb5bb07b',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fllm_5fclient_8',['test_commit_code_with_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a70225e655e0ca64868d71e3c9389a218',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcommands_2epy_9',['test_commit_commands.py',['../test__commit__commands_8py.html',1,'']]], + ['test_5fconfig_5fcommands_2epy_10',['test_config_commands.py',['../test__config__commands_8py.html',1,'']]], + ['test_5fconfig_5fjira_5fweb_5fserver_5fsetup_11',['test_config_jira_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a63789aa9bfafe1a16b1f462174c53f6b',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fconfig_5fllm_5fweb_5fserver_5fsetup_12',['test_config_llm_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a881cb29c7d44f302fb961f496a20776d',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fdoc_5fcommands_2epy_13',['test_doc_commands.py',['../test__doc__commands_8py.html',1,'']]], + ['test_5fgenerate_5fdoc_5ferror_5fhandling_14',['test_generate_doc_error_handling',['../namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffile_5flocation_15',['test_generate_doc_file_location',['../namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffolder_5flocation_16',['test_generate_doc_folder_location',['../namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fno_5flocation_17',['test_generate_doc_no_location',['../namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffile_5fexception_18',['test_generate_doc_with_file_exception',['../namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffolder_5fexception_19',['test_generate_doc_with_folder_exception',['../namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee',1,'tests::test_doc_commands']]], + ['test_5fget_5fjira_5fconfig_5fexists_20',['test_get_jira_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a153e6f218be2f42581be6895a14a4e85',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fempty_21',['test_get_llm_config_empty',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a29cdcf995761e77c9ff8c93e49eff541',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fexists_22',['test_get_llm_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#acd6ebd022b24b111df7cabdab4e1b6db',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5finvalid_5fjson_23',['test_get_llm_config_invalid_json',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a06d58f1b9188f2486f7e424aea40d0bd',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fexisting_5fdir_24',['test_get_penify_config_existing_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ae9c0ef56734f17892b7ac115e488bac4',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fnew_5fdir_25',['test_get_penify_config_new_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a335a57c003a8d797a5457c4d1c60420e',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fconfig_26',['test_get_token_from_config',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ac2890b010d859d53629d9bea6a72b9c0',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fenv_27',['test_get_token_from_env',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#af30db6b96dcf9e6143d6a8f5241f5be1',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5fnot_5ffound_28',['test_get_token_not_found',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a1548cea068b4305d5a1d3ad5fb1bc25a',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fhandle_5fcommit_29',['test_handle_commit',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#adc5d95c15793c4bc698a62147aab2f7a',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fhandle_5fdocgen_5fgenerate_30',['test_handle_docgen_generate',['../namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5finstall_5fhook_31',['test_handle_docgen_install_hook',['../namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5fno_5ftoken_32',['test_handle_docgen_no_token',['../namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5funinstall_5fhook_33',['test_handle_docgen_uninstall_hook',['../namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b',1,'tests::test_doc_commands']]], + ['test_5fsave_5fjira_5fconfig_5fsuccess_34',['test_save_jira_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a060996b8323f4cfd629c77b4e2605f50',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5ffailure_35',['test_save_llm_config_failure',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2ccb8ee5c161fcf49a04404a1658100b',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5fsuccess_36',['test_save_llm_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2411d025a057beb8a2f2a6431559e64f',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsetup_5fcommit_5fparser_37',['test_setup_commit_parser',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a820f1f6ac060eb4b33903e1e8a3318fe',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fsetup_5fdocgen_5fparser_38',['test_setup_docgen_parser',['../namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042',1,'tests::test_doc_commands']]], + ['test_5fweb_5fconfig_2epy_39',['test_web_config.py',['../test__web__config_8py.html',1,'']]], + ['testcommitcommands_40',['TestCommitCommands',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html',1,'tests::test_commit_commands']]], + ['testconfigcommands_41',['TestConfigCommands',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html',1,'tests::test_config_commands']]], + ['tests_42',['Running Tests',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md171',1,'']]], + ['tests_43',['tests',['../namespacetests.html',1,'']]], + ['tests_3a_3aconftest_44',['conftest',['../namespacetests_1_1conftest.html',1,'tests']]], + ['tests_3a_3atest_5fcommit_5fcommands_45',['test_commit_commands',['../namespacetests_1_1test__commit__commands.html',1,'tests']]], + ['tests_3a_3atest_5fconfig_5fcommands_46',['test_config_commands',['../namespacetests_1_1test__config__commands.html',1,'tests']]], + ['tests_3a_3atest_5fdoc_5fcommands_47',['test_doc_commands',['../namespacetests_1_1test__doc__commands.html',1,'tests']]], + ['tests_3a_3atest_5fweb_5fconfig_48',['test_web_config',['../namespacetests_1_1test__web__config.html',1,'tests']]], + ['testwebconfig_49',['TestWebConfig',['../classtests_1_1test__web__config_1_1TestWebConfig.html',1,'tests::test_web_config']]], + ['title_20and_20description_20with_20context_50',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['title_20only_20with_20context_51',['Generate Title Only with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'']]], + ['token_52',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['token_20precedence_53',['Token Precedence',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md46',1,'']]], + ['token_20storage_54',['API Token Storage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md45',1,'']]], + ['troubleshooting_55',['Troubleshooting',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md18',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md39',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md59',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md99',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md154',1,'Troubleshooting']]], + ['tt_56',['tt',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'<tt>-d, --description</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'<tt>-e, --terminal</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'<tt>-l, --location</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'<tt>-m, --message</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'<tt>install-hook</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'<tt>uninstall-hook</tt>']]], + ['tt_20d_20description_20tt_57',['<tt>-d, --description</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'']]], + ['tt_20e_20terminal_20tt_58',['<tt>-e, --terminal</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'']]], + ['tt_20install_20hook_20tt_59',['<tt>install-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'']]], + ['tt_20l_20location_20tt_60',['<tt>-l, --location</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'']]], + ['tt_20m_20message_20tt_61',['<tt>-m, --message</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'']]], + ['tt_20uninstall_20hook_20tt_62',['<tt>uninstall-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'']]] +]; diff --git a/docs/html/search/all_18.js b/docs/html/search/all_18.js new file mode 100644 index 0000000..73febc9 --- /dev/null +++ b/docs/html/search/all_18.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['ui_5futils_2epy_0',['ui_utils.py',['../ui__utils_8py.html',1,'']]], + ['understanding_1',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['uninstall_20hook_20from_20current_20repository_2',['Uninstall Hook from Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'']]], + ['uninstall_20hook_20from_20specific_20repository_3',['Uninstall Hook from Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'']]], + ['uninstall_20hook_20tt_4',['<tt>uninstall-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'']]], + ['uninstall_5fgit_5fhook_5',['uninstall_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443',1,'penify_hook::commands::hook_commands']]], + ['uninstallation_6',['Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md89',1,'Hook Uninstallation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md91',1,'Specific Repository Uninstallation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md90',1,'Standard Uninstallation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md93',1,'Verifying Uninstallation']]], + ['update_5fissue_5fstatus_7',['update_issue_status',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aca8837552d37bfd611de23441a240826',1,'penify_hook::jira_client::JiraClient']]], + ['update_5fstage_8',['update_stage',['../namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd',1,'penify_hook::ui_utils']]], + ['url_9',['url',['../namespacesetup.html#afc13124aa5c0124e84e1d965e3f4b0fb',1,'setup']]], + ['usage_10',['Usage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md1',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md22',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md65',1,'Basic Usage'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md159',1,'Usage']]], + ['usage_20guide_11',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['usage_3a_12',['Usage:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md131',1,'Usage:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md137',1,'Usage:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md142',1,'Usage:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md147',1,'Usage:']]], + ['use_20cases_13',['Use Cases',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md56',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md94',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md50',1,'Use Cases']]], + ['using_20local_20llm_14',['Using Local LLM',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md12',1,'']]], + ['utils_2epy_15',['utils.py',['../utils_8py.html',1,'']]] +]; diff --git a/docs/html/search/all_19.js b/docs/html/search/all_19.js new file mode 100644 index 0000000..7368186 --- /dev/null +++ b/docs/html/search/all_19.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['variables_0',['Variables',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md36',1,'Environment Variables'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md153',1,'Environment Variables']]], + ['verifying_20installation_1',['Verifying Installation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md85',1,'']]], + ['verifying_20uninstallation_2',['Verifying Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md93',1,'']]], + ['version_3',['version',['../namespacesetup.html#a2aa722b36a933088812b50ea79b97a5c',1,'setup']]] +]; diff --git a/docs/html/search/all_1a.js b/docs/html/search/all_1a.js new file mode 100644 index 0000000..a30a2ae --- /dev/null +++ b/docs/html/search/all_1a.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['warning_5fcolor_0',['WARNING_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a177bc9b44157844c999e0c1c2c6936ff',1,'penify_hook::ui_utils']]], + ['warning_5fsymbol_1',['WARNING_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#a9ee7a42eeca5b12429cb97bf89007be8',1,'penify_hook::ui_utils']]], + ['web_20interface_2',['Web Interface',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md24',1,'Web Interface'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md32',1,'Web Interface']]], + ['what_20happens_3a_3',['What happens:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md143',1,'']]], + ['with_20ai_4',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['with_20all_20features_5',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]], + ['with_20context_6',['with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'Generate Title and Description with Context'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'Generate Title Only with Context']]], + ['with_20default_20settings_7',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['work_8',['How Hooks Work',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md81',1,'']]], + ['workflow_9',['Workflow',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md106',1,'Daily Workflow'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md110',1,'Daily Workflow'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md115',1,'Workflow']]], + ['workflow_201_3a_20efficient_20git_20commits_20with_20ai_10',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['workflow_202_3a_20documentation_20generation_20pipeline_11',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['workflow_203_3a_20code_20review_20enhancement_12',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]], + ['workflow_204_3a_20onboarding_20new_20team_20members_13',['Workflow 4: Onboarding New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'']]], + ['workflow_205_3a_20legacy_20code_20understanding_14',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['workflow_20with_20all_20features_15',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]], + ['workflows_16',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..317363a --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_3a_20code_20review_20enhancement_0',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]] +]; diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js new file mode 100644 index 0000000..9be3a71 --- /dev/null +++ b/docs/html/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_3a_20onboarding_20new_20team_20members_0',['Workflow 4: Onboarding New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'']]] +]; diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js new file mode 100644 index 0000000..ca30ba4 --- /dev/null +++ b/docs/html/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_3a_20legacy_20code_20understanding_0',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]] +]; diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js new file mode 100644 index 0000000..11fbbe3 --- /dev/null +++ b/docs/html/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['_5f_5finit_5f_5f_0',['__init__',['../classpenify__hook_1_1api__client_1_1APIClient.html#a8edae83711be6de381c6ec71c7aa2e37',1,'penify_hook.api_client.APIClient.__init__()'],['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa5d7b59e2118c6b229ab59f3ef3b95b5',1,'penify_hook.base_analyzer.BaseAnalyzer.__init__()'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a1fa29d890af3f3770743197e15776778',1,'penify_hook.commit_analyzer.CommitDocGenHook.__init__()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#ad0e39446078e1aeeb5325f3af02de2fb',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a8f7a55b16cab4711eb3a3c3d9eb99344',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a6f94663c0330ae7e6cbb7a8748177c24',1,'penify_hook.git_analyzer.GitDocGenHook.__init__()'],['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a3a6914654fd59e0cef96159143a52355',1,'penify_hook.jira_client.JiraClient.__init__()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a699a5be4411f5847fcb0a170281ab14b',1,'penify_hook.llm_client.LLMClient.__init__()']]], + ['_5f_5finit_5f_5f_2epy_1',['__init__.py',['../penify__hook_2____init_____8py.html',1,'(Global Namespace)'],['../penify__hook_2commands_2____init_____8py.html',1,'(Global Namespace)'],['../tests_2____init_____8py.html',1,'(Global Namespace)']]], + ['_5famend_5fcommit_2',['_amend_commit',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a011812b68bf904e3beb051e585eff111',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['_5flitellm_3',['_litellm',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a76c2e9805f805624ab9c55a9f1f8d362',1,'penify_hook::llm_client::LLMClient']]] +]; diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js new file mode 100644 index 0000000..f07e236 --- /dev/null +++ b/docs/html/search/all_6.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['a_20folder_0',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['a_20jira_20api_20token_1',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['a_20specific_20file_2',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['add_5fcomment_3',['add_comment',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa1f374116c64cd5f1492ec7f7e40f9c1',1,'penify_hook::jira_client::JiraClient']]], + ['additional_20resources_4',['Additional Resources',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md155',1,'']]], + ['advanced_20commands_20login_20required_5',['Advanced Commands (Login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md163',1,'']]], + ['advanced_20hook_20scenarios_6',['Advanced Hook Scenarios',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md88',1,'']]], + ['advanced_20use_20cases_7',['Advanced Use Cases',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md56',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md94',1,'Advanced Use Cases']]], + ['ai_8',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['all_20features_9',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]], + ['and_20description_20with_20context_10',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['and_20edit_20full_20commit_20message_11',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['and_20jira_20integration_12',['LLM and JIRA Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'']]], + ['and_20provide_20context_13',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['anthropic_14',['Anthropic',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md27',1,'']]], + ['api_20token_15',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['api_20token_20storage_16',['API Token Storage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md45',1,'']]], + ['api_5fclient_17',['api_client',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a81e9c55709205aaf4ebbe2b41683baf2',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['api_5fclient_2epy_18',['api_client.py',['../api__client_8py.html',1,'']]], + ['api_5furl_19',['API_URL',['../namespacepenify__hook_1_1constants.html#a846767f047a1319005bc95395330ab34',1,'penify_hook::constants']]], + ['api_5furl_20',['api_url',['../classpenify__hook_1_1api__client_1_1APIClient.html#a130cf688ed35dc0e8cbd8320b6b2d872',1,'penify_hook::api_client::APIClient']]], + ['apiclient_21',['APIClient',['../classpenify__hook_1_1api__client_1_1APIClient.html',1,'penify_hook::api_client']]], + ['auth_5fcommands_2epy_22',['auth_commands.py',['../auth__commands_8py.html',1,'']]], + ['auth_5ftoken_23',['AUTH_TOKEN',['../classpenify__hook_1_1api__client_1_1APIClient.html#a5bb502603717946ad710b49ad9d95237',1,'penify_hook::api_client::APIClient']]], + ['authentication_24',['Authentication',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md43',1,'Authentication'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md167',1,'Authentication']]], + ['authentication_20requirement_25',['Authentication Requirement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md51',1,'']]], + ['author_26',['Author',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md173',1,'']]], + ['author_27',['author',['../namespacesetup.html#a3a57a4772d418a06835249cbade0d86a',1,'setup']]], + ['author_3a_20suman_20sauarbh_28',['author: Suman Sauarbh',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md124',1,'']]], + ['author_5femail_29',['author_email',['../namespacesetup.html#a5b08034343aa2be607722a8b315f3625',1,'setup']]], + ['autoreset_30',['autoreset',['../namespacepenify__hook_1_1ui__utils.html#ab560cfade398ac1e0bd47befb52d9f71',1,'penify_hook::ui_utils']]], + ['azure_20openai_31',['Azure OpenAI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md29',1,'']]] +]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js new file mode 100644 index 0000000..7aba856 --- /dev/null +++ b/docs/html/search/all_7.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['base_5fanalyzer_2epy_0',['base_analyzer.py',['../base__analyzer_8py.html',1,'']]], + ['baseanalyzer_1',['BaseAnalyzer',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html',1,'penify_hook::base_analyzer']]], + ['basic_20commands_20no_20login_20required_2',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md160',1,'']]], + ['basic_20commit_20with_20default_20settings_3',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['basic_20usage_4',['Basic Usage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md1',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md22',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md65',1,'Basic Usage']]], + ['batch_20documentation_5',['Batch Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md96',1,'']]], + ['bearer_5ftoken_6',['BEARER_TOKEN',['../classpenify__hook_1_1api__client_1_1APIClient.html#a7d7e2cf42c54eb4f25adee96a09ee7b0',1,'penify_hook::api_client::APIClient']]], + ['behavior_7',['Modifying Hook Behavior',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md87',1,'']]], + ['benefits_8',['Benefits',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md107',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md112',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md116',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md120',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md122',1,'Benefits']]] +]; diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js new file mode 100644 index 0000000..c9d18b0 --- /dev/null +++ b/docs/html/search/all_8.js @@ -0,0 +1,71 @@ +var searchData= +[ + ['cases_0',['Cases',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md56',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md94',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md50',1,'Use Cases']]], + ['cd_20integration_1',['CI/CD Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md57',1,'']]], + ['ci_20cd_20integration_2',['CI/CD Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md57',1,'']]], + ['classifiers_3',['classifiers',['../namespacesetup.html#abe96a9c38c1c61f9f0fdb002c482f785',1,'setup']]], + ['cli_20commit_20commands_4',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['cli_20configuration_20commands_5',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'']]], + ['cli_20detailed_20usage_20guide_6',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['cli_20documentation_7',['Penify CLI Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md125',1,'']]], + ['cli_20documentation_8',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['cli_20documentation_20generation_20commands_9',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['cli_20example_20workflows_10',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['code_20documentation_20generation_11',['Code Documentation Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md49',1,'']]], + ['code_20review_20enhancement_12',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]], + ['code_20understanding_13',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['combinations_14',['Combinations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md6',1,'Option Combinations'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md71',1,'Option Combinations']]], + ['command_15',['Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md130',1,'Commit Command'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md136',1,'Config Command'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md146',1,'Docgen Command'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md141',1,'Login Command']]], + ['command_20documentation_16',['Detailed Command Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md129',1,'']]], + ['command_20line_20configuration_17',['Command-Line Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md37',1,'']]], + ['command_20options_18',['Command Options',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md2',1,'Command Options'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md66',1,'Command Options']]], + ['command_20overview_19',['Command Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md47',1,'']]], + ['commands_20',['Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md79',1,'Git Hook Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'Penify CLI - Commit Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'Penify CLI - Configuration Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'Penify CLI - Documentation Generation Commands']]], + ['commands_20login_20required_21',['Advanced Commands (Login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md163',1,'']]], + ['commands_20no_20login_20required_22',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md160',1,'']]], + ['commands_20overview_23',['Commands Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md128',1,'']]], + ['commit_24',['Commit',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md161',1,'']]], + ['commit_20command_25',['Commit Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md130',1,'']]], + ['commit_20commands_26',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['commit_20hook_27',['Post-Commit Hook',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md54',1,'']]], + ['commit_20message_28',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['commit_20message_20generation_29',['Commit Message Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md48',1,'']]], + ['commit_20with_20default_20settings_30',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['commit_2dcommands_2emd_31',['commit-commands.md',['../commit-commands_8md.html',1,'']]], + ['commit_5fanalyzer_2epy_32',['commit_analyzer.py',['../commit__analyzer_8py.html',1,'']]], + ['commit_5fcode_33',['commit_code',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6',1,'penify_hook::commands::commit_commands']]], + ['commit_5fcommands_2epy_34',['commit_commands.py',['../commit__commands_8py.html',1,'']]], + ['commitdocgenhook_35',['CommitDocGenHook',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook::commit_analyzer']]], + ['commits_20with_20ai_36',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['common_20issues_37',['Common Issues',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md19',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md40',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md60',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md100',1,'Common Issues']]], + ['config_38',['Config',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md162',1,'']]], + ['config_20command_39',['Config Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md136',1,'']]], + ['config_2dcommands_2emd_40',['config-commands.md',['../config-commands_8md.html',1,'']]], + ['config_5fcommand_2epy_41',['config_command.py',['../config__command_8py.html',1,'']]], + ['config_5fcommands_2epy_42',['config_commands.py',['../config__commands_8py.html',1,'']]], + ['config_5fjira_5fweb_43',['config_jira_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13',1,'penify_hook::commands::config_commands']]], + ['config_5fllm_5fweb_44',['config_llm_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62',1,'penify_hook::commands::config_commands']]], + ['configuration_45',['Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md37',1,'Command-Line Configuration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md31',1,'JIRA Configuration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md23',1,'LLM Configuration'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md168',1,'Local LLM Configuration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md38',1,'Sharing Configuration']]], + ['configuration_20commands_46',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'']]], + ['configuration_20file_20structure_47',['Configuration File Structure',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md30',1,'Configuration File Structure'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md34',1,'Configuration File Structure']]], + ['configuration_20files_48',['Configuration Files',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md152',1,'']]], + ['configuration_20locations_49',['Configuration Locations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md35',1,'']]], + ['configuration_20overview_50',['Configuration Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md21',1,'']]], + ['configuration_20requirements_51',['Configuration Requirements',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md14',1,'']]], + ['configuration_20settings_52',['Configuration Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md52',1,'']]], + ['conftest_2epy_53',['conftest.py',['../conftest_8py.html',1,'']]], + ['constants_2epy_54',['constants.py',['../constants_8py.html',1,'']]], + ['content_55',['Hook Script Content',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md82',1,'']]], + ['contents_56',['Contents',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md42',1,'Table of Contents'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md64',1,'Table of Contents']]], + ['context_57',['Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'Generate Title and Description with Context'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'Generate Title Only with Context'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'Generate, Edit, and Provide Context']]], + ['continuous_20integration_58',['Continuous Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md95',1,'']]], + ['contributing_59',['Contributing',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md174',1,'']]], + ['create_5fprogress_5fbar_60',['create_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5',1,'penify_hook::ui_utils']]], + ['create_5fstage_5fprogress_5fbar_61',['create_stage_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405',1,'penify_hook::ui_utils']]], + ['creating_20a_20jira_20api_20token_62',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['current_20git_20diff_63',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['current_20repository_64',['Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'Install Hook in Current Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'Uninstall Hook from Current Repository']]], + ['custom_20git_20hook_20integration_65',['Custom Git Hook Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'']]], + ['custom_20hook_20location_66',['Custom Hook Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md55',1,'']]], + ['customization_67',['Hook Customization',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md86',1,'']]] +]; diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js new file mode 100644 index 0000000..91a9ab6 --- /dev/null +++ b/docs/html/search/all_9.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['d_20description_20tt_0',['<tt>-d, --description</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'']]], + ['daily_20workflow_1',['Daily Workflow',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md106',1,'Daily Workflow'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md110',1,'Daily Workflow']]], + ['dashboard_5furl_2',['DASHBOARD_URL',['../namespacepenify__hook_1_1constants.html#ae4a03ab3b19d60436c72484b313079c8',1,'penify_hook::constants']]], + ['debugging_3',['Debugging',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md101',1,'']]], + ['default_20settings_4',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['description_5',['description',['../namespacesetup.html#aedf461ec52a946bda975938ba0b93ec0',1,'setup']]], + ['description_20tt_6',['<tt>-d, --description</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'']]], + ['description_20with_20context_7',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['detailed_20command_20documentation_8',['Detailed Command Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md129',1,'']]], + ['detailed_20usage_20guide_9',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['detailed_2dusage_2emd_10',['detailed-usage.md',['../detailed-usage_8md.html',1,'']]], + ['development_11',['Development',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md170',1,'']]], + ['diff_12',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['dir_5fpath_13',['dir_path',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53f73d69cc0f00763ee4830e4f0f7393',1,'penify_hook::folder_analyzer::FolderAnalyzerGenHook']]], + ['doc_5fcommands_2emd_14',['doc_commands.md',['../doc__commands_8md.html',1,'']]], + ['doc_5fcommands_2epy_15',['doc_commands.py',['../doc__commands_8py.html',1,'']]], + ['docgen_20command_16',['Docgen Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md146',1,'']]], + ['docgen_5fdescription_17',['docgen_description',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a6dd45546559198f9f79caccd030d3588',1,'penify_hook::commands::doc_commands']]], + ['documentation_18',['Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md96',1,'Batch Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md129',1,'Detailed Command Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md111',1,'Manual Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md125',1,'Penify CLI Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md58',1,'Remote Repository Documentation']]], + ['documentation_19',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['documentation_20for_20a_20folder_20',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['documentation_20for_20a_20specific_20file_21',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['documentation_20for_20current_20git_20diff_22',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['documentation_20generation_23',['Documentation Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md49',1,'Code Documentation Generation'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md165',1,'Documentation Generation']]], + ['documentation_20generation_20commands_24',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['documentation_20generation_20pipeline_25',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['documenting_20release_20tags_26',['Documenting Release Tags',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md98',1,'']]], + ['dotenv_5favailable_27',['DOTENV_AVAILABLE',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a152642ab83cf6219b604bda6122aba67',1,'penify_hook::commands::config_commands']]] +]; diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js new file mode 100644 index 0000000..3794554 --- /dev/null +++ b/docs/html/search/all_a.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['e_20terminal_20tt_0',['<tt>-e, --terminal</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'']]], + ['edit_20and_20provide_20context_1',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['edit_20full_20commit_20message_2',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['efficient_20git_20commits_20with_20ai_3',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['enhance_5fcommit_5fmessage_4',['enhance_commit_message',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a70d2c5a6432aa6f238da0ff65d49a760',1,'penify_hook::jira_client::JiraClient']]], + ['enhancement_5',['Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md13',1,'JIRA Enhancement'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'Workflow 3: Code Review Enhancement']]], + ['entry_5fpoints_6',['entry_points',['../namespacesetup.html#ada7058afc98897f073d3f3b8b9157059',1,'setup']]], + ['environment_20variables_7',['Environment Variables',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md36',1,'Environment Variables'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md153',1,'Environment Variables']]], + ['error_5fcolor_8',['ERROR_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a4ab4e61dfab7973c87bef59c6e1977fe',1,'penify_hook::ui_utils']]], + ['error_5fsymbol_9',['ERROR_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#ae941d124e4d3aa294314d73fb47c6432',1,'penify_hook::ui_utils']]], + ['example_20workflows_10',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['example_2dworkflows_2emd_11',['example-workflows.md',['../example-workflows_8md.html',1,'']]], + ['example_3a_12',['Example:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md144',1,'']]], + ['examples_13',['Examples',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md15',1,'']]], + ['examples_3a_14',['Examples:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md133',1,'Examples:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md139',1,'Examples:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md150',1,'Examples:']]], + ['exception_15',['Exception',['../classException.html',1,'']]], + ['extract_5fissue_5fkeys_16',['extract_issue_keys',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#ad2823ad1d3baaedd38039913c3a97fd7',1,'penify_hook::jira_client::JiraClient']]], + ['extract_5fissue_5fkeys_5ffrom_5fbranch_17',['extract_issue_keys_from_branch',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a093d6456fe053ef7a7862d5d6851910c',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js new file mode 100644 index 0000000..9fd359f --- /dev/null +++ b/docs/html/search/all_b.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['features_0',['Features',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md157',1,'Features'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'Full Workflow with All Features']]], + ['file_1',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['file_20structure_2',['File Structure',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md30',1,'Configuration File Structure'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md34',1,'Configuration File Structure']]], + ['file_5fanalyzer_2epy_3',['file_analyzer.py',['../file__analyzer_8py.html',1,'']]], + ['file_5fpath_4',['file_path',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a9b03b88a9ce1b9af945279375048dc32',1,'penify_hook::file_analyzer::FileAnalyzerGenHook']]], + ['fileanalyzergenhook_5',['FileAnalyzerGenHook',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html',1,'penify_hook::file_analyzer']]], + ['files_6',['Configuration Files',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md152',1,'']]], + ['find_5fgit_5fparent_7',['find_git_parent',['../namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2',1,'penify_hook::utils']]], + ['folder_8',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['folder_5fanalyzer_2epy_9',['folder_analyzer.py',['../folder__analyzer_8py.html',1,'']]], + ['folder_5fpath_10',['folder_path',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa67c06dd12b1bafaeaee81c41dcb7e25',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['folderanalyzergenhook_11',['FolderAnalyzerGenHook',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html',1,'penify_hook::folder_analyzer']]], + ['for_20a_20folder_12',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['for_20a_20specific_20file_13',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['for_20current_20git_20diff_14',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['for_20new_20team_20members_15',['For New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'']]], + ['for_20team_20leads_16',['For Team Leads',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md118',1,'']]], + ['format_5fcommit_5fmessage_5fwith_5fjira_5finfo_17',['format_commit_message_with_jira_info',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a49ea1149758f7f5212149d357b13cc23',1,'penify_hook::jira_client::JiraClient']]], + ['format_5ferror_18',['format_error',['../namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca',1,'penify_hook::ui_utils']]], + ['format_5ffile_5fpath_19',['format_file_path',['../namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41',1,'penify_hook::ui_utils']]], + ['format_5fhighlight_20',['format_highlight',['../namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7',1,'penify_hook::ui_utils']]], + ['format_5finfo_21',['format_info',['../namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2',1,'penify_hook::ui_utils']]], + ['format_5fsuccess_22',['format_success',['../namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e',1,'penify_hook::ui_utils']]], + ['format_5fwarning_23',['format_warning',['../namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797',1,'penify_hook::ui_utils']]], + ['from_20current_20repository_24',['Uninstall Hook from Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'']]], + ['from_20specific_20repository_25',['Uninstall Hook from Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'']]], + ['full_20commit_20message_26',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['full_20workflow_20with_20all_20features_27',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]] +]; diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js new file mode 100644 index 0000000..1fa4383 --- /dev/null +++ b/docs/html/search/all_c.js @@ -0,0 +1,42 @@ +var searchData= +[ + ['generate_20and_20edit_20full_20commit_20message_0',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['generate_20documentation_20for_20a_20folder_1',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['generate_20documentation_20for_20a_20specific_20file_2',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['generate_20documentation_20for_20current_20git_20diff_3',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['generate_20edit_20and_20provide_20context_4',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['generate_20title_20and_20description_20with_20context_5',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['generate_20title_20only_20with_20context_6',['Generate Title Only with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'']]], + ['generate_5fcommit_5fsummary_7',['generate_commit_summary',['../classpenify__hook_1_1api__client_1_1APIClient.html#af0c2fac38629fed60e8440203a1197dd',1,'penify_hook.api_client.APIClient.generate_commit_summary()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a2ad3014dac466ee1d8e00306d0cf2000',1,'penify_hook.llm_client.LLMClient.generate_commit_summary()']]], + ['generate_5fcommit_5fsummary_5fwith_5fllm_8',['generate_commit_summary_with_llm',['../classpenify__hook_1_1api__client_1_1APIClient.html#a07bc97b2af31662029a24169f285c286',1,'penify_hook::api_client::APIClient']]], + ['generate_5fdoc_9',['generate_doc',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7',1,'penify_hook::commands::doc_commands']]], + ['generation_10',['Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md49',1,'Code Documentation Generation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md48',1,'Commit Message Generation'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md165',1,'Documentation Generation']]], + ['generation_20commands_11',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['generation_20pipeline_12',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['get_5fapi_5fkey_13',['get_api_key',['../classpenify__hook_1_1api__client_1_1APIClient.html#a57a96d5c14128dd8021347f7e72fe12b',1,'penify_hook::api_client::APIClient']]], + ['get_5fcommit_5fcontext_5ffrom_5fissues_14',['get_commit_context_from_issues',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#afb41ce6f13c30b1265d439ddf04bf2cd',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fdetailed_5fissue_5fcontext_15',['get_detailed_issue_context',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa967169a4b7970c67c0947b9ac56f746',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fenv_5fvar_5for_5fdefault_16',['get_env_var_or_default',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87',1,'penify_hook::commands::config_commands']]], + ['get_5fissue_5fdetails_17',['get_issue_details',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a65f6924819084b7c8d268956a784804a',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fjira_5fconfig_18',['get_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2',1,'penify_hook::commands::config_commands']]], + ['get_5fllm_5fconfig_19',['get_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0',1,'penify_hook::commands::config_commands']]], + ['get_5fmodified_5ffiles_5fin_5flast_5fcommit_20',['get_modified_files_in_last_commit',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a7070449b5dc058808eb13013db3d8eab',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fmodified_5flines_21',['get_modified_lines',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a74e36507adc1b1955cc6cc303f3f5328',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fpenify_5fconfig_22',['get_penify_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20',1,'penify_hook::commands::config_commands']]], + ['get_5frepo_5fdetails_23',['get_repo_details',['../namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19',1,'penify_hook::utils']]], + ['get_5fsummary_24',['get_summary',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a8496194276441fa2eb2fa014eaab9a37',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['get_5fsupported_5ffile_5ftypes_25',['get_supported_file_types',['../classpenify__hook_1_1api__client_1_1APIClient.html#a5d2b4a26b24352d951ea79ecc4ff3402',1,'penify_hook::api_client::APIClient']]], + ['get_5ftoken_26',['get_token',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812',1,'penify_hook::commands::config_commands']]], + ['getting_20help_27',['Getting Help',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md102',1,'']]], + ['getting_20started_28',['Getting Started',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md127',1,'']]], + ['git_20commits_20with_20ai_29',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['git_20diff_30',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['git_20hook_20commands_31',['Git Hook Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md79',1,'']]], + ['git_20hook_20integration_32',['Custom Git Hook Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'']]], + ['git_20hook_20management_33',['Git Hook Management',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md166',1,'']]], + ['git_20hooks_34',['Git Hooks',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md53',1,'']]], + ['git_5fanalyzer_2epy_35',['git_analyzer.py',['../git__analyzer_8py.html',1,'']]], + ['gitdocgenhook_36',['GitDocGenHook',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html',1,'penify_hook::git_analyzer']]], + ['gitreponotfounderror_37',['GitRepoNotFoundError',['../classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html',1,'penify_hook::utils']]], + ['guide_38',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]] +]; diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js new file mode 100644 index 0000000..dde735f --- /dev/null +++ b/docs/html/search/all_d.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['handle_5fcommit_0',['handle_commit',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076',1,'penify_hook::commands::commit_commands']]], + ['handle_5fconfig_1',['handle_config',['../namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5',1,'penify_hook::config_command']]], + ['handle_5fdocgen_2',['handle_docgen',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc',1,'penify_hook::commands::doc_commands']]], + ['handle_5flogin_3',['handle_login',['../namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411',1,'penify_hook::login_command']]], + ['happens_3a_4',['What happens:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md143',1,'']]], + ['help_5',['Getting Help',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md102',1,'']]], + ['highlight_5fcolor_6',['HIGHLIGHT_COLOR',['../namespacepenify__hook_1_1ui__utils.html#aba01b8259f0d66cdc2b4a1b58f9736fc',1,'penify_hook::ui_utils']]], + ['hook_7',['Post-Commit Hook',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md54',1,'']]], + ['hook_20behavior_8',['Modifying Hook Behavior',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md87',1,'']]], + ['hook_20commands_9',['Git Hook Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md79',1,'']]], + ['hook_20customization_10',['Hook Customization',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md86',1,'']]], + ['hook_20from_20current_20repository_11',['Uninstall Hook from Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'']]], + ['hook_20from_20specific_20repository_12',['Uninstall Hook from Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'']]], + ['hook_20in_20current_20repository_13',['Install Hook in Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'']]], + ['hook_20in_20specific_20repository_14',['Install Hook in Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'']]], + ['hook_20installation_15',['Hook Installation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md80',1,'']]], + ['hook_20integration_16',['Custom Git Hook Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'']]], + ['hook_20location_17',['Custom Hook Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md55',1,'']]], + ['hook_20management_18',['Git Hook Management',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md166',1,'']]], + ['hook_20removal_19',['Manual Hook Removal',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md92',1,'']]], + ['hook_20scenarios_20',['Advanced Hook Scenarios',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md88',1,'']]], + ['hook_20script_20content_21',['Hook Script Content',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md82',1,'']]], + ['hook_20tt_22',['hook tt',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'<tt>install-hook</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'<tt>uninstall-hook</tt>']]], + ['hook_20uninstallation_23',['Hook Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md89',1,'']]], + ['hook_5fcommands_2epy_24',['hook_commands.py',['../hook__commands_8py.html',1,'']]], + ['hook_5ffilename_25',['HOOK_FILENAME',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a978b976442fbf28c29c8d0f889bfae9c',1,'penify_hook::commands::hook_commands']]], + ['hook_5ftemplate_26',['HOOK_TEMPLATE',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a51fc390518d967f2a1e21280d7ea781b',1,'penify_hook::commands::hook_commands']]], + ['hooks_27',['Git Hooks',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md53',1,'']]], + ['hooks_20work_28',['How Hooks Work',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md81',1,'']]], + ['how_20hooks_20work_29',['How Hooks Work',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md81',1,'']]] +]; diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js new file mode 100644 index 0000000..f0b70ce --- /dev/null +++ b/docs/html/search/all_e.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['in_20current_20repository_0',['Install Hook in Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'']]], + ['in_20specific_20repository_1',['Install Hook in Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'']]], + ['info_5fcolor_2',['INFO_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a9fdcb180915696f5d217032a62c3857c',1,'penify_hook::ui_utils']]], + ['install_20hook_20in_20current_20repository_3',['Install Hook in Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'']]], + ['install_20hook_20in_20specific_20repository_4',['Install Hook in Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'']]], + ['install_20hook_20tt_5',['<tt>install-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'']]], + ['install_5fgit_5fhook_6',['install_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135',1,'penify_hook::commands::hook_commands']]], + ['install_5frequires_7',['install_requires',['../namespacesetup.html#abead4f26b530856f858f0d44c7cf2588',1,'setup']]], + ['installation_8',['Installation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md80',1,'Hook Installation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md126',1,'Installation'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md158',1,'Installation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md85',1,'Verifying Installation']]], + ['installation_20location_9',['Installation Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md83',1,'']]], + ['installation_20requirements_10',['Installation Requirements',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md84',1,'']]], + ['integration_11',['Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md57',1,'CI/CD Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md95',1,'Continuous Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'Custom Git Hook Integration'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md169',1,'JIRA Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'LLM and JIRA Integration']]], + ['interface_12',['Interface',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md24',1,'Web Interface'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md32',1,'Web Interface']]], + ['is_5fconnected_13',['is_connected',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a00d0f9ae006313a21576362d26ac5ec8',1,'penify_hook::jira_client::JiraClient']]], + ['issues_14',['Issues',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md19',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md40',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html#autotoc_md60',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html#autotoc_md100',1,'Common Issues'],['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md175',1,'Issues']]] +]; diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js new file mode 100644 index 0000000..8ea9d86 --- /dev/null +++ b/docs/html/search/all_f.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['jira_20api_20token_0',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['jira_20configuration_1',['JIRA Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html#autotoc_md31',1,'']]], + ['jira_20enhancement_2',['JIRA Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md13',1,'']]], + ['jira_20integration_3',['JIRA Integration',['..//app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/README.md#autotoc_md169',1,'JIRA Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'LLM and JIRA Integration']]], + ['jira_5fapi_5ftoken_4',['jira_api_token',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#afc5c90e53b702f9fc27e2ee7d3f991b9',1,'penify_hook::jira_client::JiraClient']]], + ['jira_5favailable_5',['JIRA_AVAILABLE',['../namespacepenify__hook_1_1jira__client.html#a5593ea3415081eca1eea92e4c1ad1aa2',1,'penify_hook::jira_client']]], + ['jira_5fclient_6',['jira_client',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ab03214b60248a10bca32597098b0a107',1,'penify_hook.commit_analyzer.CommitDocGenHook.jira_client'],['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aefb3f96c79358cf3a95d96d3747235b6',1,'penify_hook.jira_client.JiraClient.jira_client']]], + ['jira_5fclient_2epy_7',['jira_client.py',['../jira__client_8py.html',1,'']]], + ['jira_5furl_8',['jira_url',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a3c0cfecff02a75cb7001509a595b8197',1,'penify_hook::jira_client::JiraClient']]], + ['jira_5fuser_9',['jira_user',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#ae56104d5aa7bda7bb26d169c4b46038c',1,'penify_hook::jira_client::JiraClient']]], + ['jiraclient_10',['JiraClient',['../classpenify__hook_1_1jira__client_1_1JiraClient.html',1,'penify_hook::jira_client']]] +]; diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js new file mode 100644 index 0000000..d470783 --- /dev/null +++ b/docs/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['apiclient_0',['APIClient',['../classpenify__hook_1_1api__client_1_1APIClient.html',1,'penify_hook::api_client']]] +]; diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js new file mode 100644 index 0000000..740b36f --- /dev/null +++ b/docs/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['baseanalyzer_0',['BaseAnalyzer',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html',1,'penify_hook::base_analyzer']]] +]; diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js new file mode 100644 index 0000000..8bdd859 --- /dev/null +++ b/docs/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['commitdocgenhook_0',['CommitDocGenHook',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook::commit_analyzer']]] +]; diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js new file mode 100644 index 0000000..0ed9487 --- /dev/null +++ b/docs/html/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['exception_0',['Exception',['../classException.html',1,'']]] +]; diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js new file mode 100644 index 0000000..e90ffee --- /dev/null +++ b/docs/html/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fileanalyzergenhook_0',['FileAnalyzerGenHook',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html',1,'penify_hook::file_analyzer']]], + ['folderanalyzergenhook_1',['FolderAnalyzerGenHook',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html',1,'penify_hook::folder_analyzer']]] +]; diff --git a/docs/html/search/classes_5.js b/docs/html/search/classes_5.js new file mode 100644 index 0000000..a6b1740 --- /dev/null +++ b/docs/html/search/classes_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gitdocgenhook_0',['GitDocGenHook',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html',1,'penify_hook::git_analyzer']]], + ['gitreponotfounderror_1',['GitRepoNotFoundError',['../classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html',1,'penify_hook::utils']]] +]; diff --git a/docs/html/search/classes_6.js b/docs/html/search/classes_6.js new file mode 100644 index 0000000..6f010a9 --- /dev/null +++ b/docs/html/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jiraclient_0',['JiraClient',['../classpenify__hook_1_1jira__client_1_1JiraClient.html',1,'penify_hook::jira_client']]] +]; diff --git a/docs/html/search/classes_7.js b/docs/html/search/classes_7.js new file mode 100644 index 0000000..bd37889 --- /dev/null +++ b/docs/html/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['llmclient_0',['LLMClient',['../classpenify__hook_1_1llm__client_1_1LLMClient.html',1,'penify_hook::llm_client']]] +]; diff --git a/docs/html/search/classes_8.js b/docs/html/search/classes_8.js new file mode 100644 index 0000000..ca590a4 --- /dev/null +++ b/docs/html/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['testcommitcommands_0',['TestCommitCommands',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html',1,'tests::test_commit_commands']]], + ['testconfigcommands_1',['TestConfigCommands',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html',1,'tests::test_config_commands']]], + ['testwebconfig_2',['TestWebConfig',['../classtests_1_1test__web__config_1_1TestWebConfig.html',1,'tests::test_web_config']]] +]; diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js new file mode 100644 index 0000000..7b3d690 --- /dev/null +++ b/docs/html/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5finit_5f_5f_2epy_0',['__init__.py',['../penify__hook_2____init_____8py.html',1,'(Global Namespace)'],['../penify__hook_2commands_2____init_____8py.html',1,'(Global Namespace)'],['../tests_2____init_____8py.html',1,'(Global Namespace)']]] +]; diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js new file mode 100644 index 0000000..6d2b14e --- /dev/null +++ b/docs/html/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['api_5fclient_2epy_0',['api_client.py',['../api__client_8py.html',1,'']]], + ['auth_5fcommands_2epy_1',['auth_commands.py',['../auth__commands_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_10.js b/docs/html/search/files_10.js new file mode 100644 index 0000000..b759a00 --- /dev/null +++ b/docs/html/search/files_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ui_5futils_2epy_0',['ui_utils.py',['../ui__utils_8py.html',1,'']]], + ['utils_2epy_1',['utils.py',['../utils_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js new file mode 100644 index 0000000..ba3909d --- /dev/null +++ b/docs/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['base_5fanalyzer_2epy_0',['base_analyzer.py',['../base__analyzer_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js new file mode 100644 index 0000000..bb00fd4 --- /dev/null +++ b/docs/html/search/files_3.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['commit_2dcommands_2emd_0',['commit-commands.md',['../commit-commands_8md.html',1,'']]], + ['commit_5fanalyzer_2epy_1',['commit_analyzer.py',['../commit__analyzer_8py.html',1,'']]], + ['commit_5fcommands_2epy_2',['commit_commands.py',['../commit__commands_8py.html',1,'']]], + ['config_2dcommands_2emd_3',['config-commands.md',['../config-commands_8md.html',1,'']]], + ['config_5fcommand_2epy_4',['config_command.py',['../config__command_8py.html',1,'']]], + ['config_5fcommands_2epy_5',['config_commands.py',['../config__commands_8py.html',1,'']]], + ['conftest_2epy_6',['conftest.py',['../conftest_8py.html',1,'']]], + ['constants_2epy_7',['constants.py',['../constants_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_4.js b/docs/html/search/files_4.js new file mode 100644 index 0000000..e7bf2b2 --- /dev/null +++ b/docs/html/search/files_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['detailed_2dusage_2emd_0',['detailed-usage.md',['../detailed-usage_8md.html',1,'']]], + ['doc_5fcommands_2emd_1',['doc_commands.md',['../doc__commands_8md.html',1,'']]], + ['doc_5fcommands_2epy_2',['doc_commands.py',['../doc__commands_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_5.js b/docs/html/search/files_5.js new file mode 100644 index 0000000..29d814a --- /dev/null +++ b/docs/html/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['example_2dworkflows_2emd_0',['example-workflows.md',['../example-workflows_8md.html',1,'']]] +]; diff --git a/docs/html/search/files_6.js b/docs/html/search/files_6.js new file mode 100644 index 0000000..3d76b9d --- /dev/null +++ b/docs/html/search/files_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['file_5fanalyzer_2epy_0',['file_analyzer.py',['../file__analyzer_8py.html',1,'']]], + ['folder_5fanalyzer_2epy_1',['folder_analyzer.py',['../folder__analyzer_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_7.js b/docs/html/search/files_7.js new file mode 100644 index 0000000..4c89ef8 --- /dev/null +++ b/docs/html/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['git_5fanalyzer_2epy_0',['git_analyzer.py',['../git__analyzer_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_8.js b/docs/html/search/files_8.js new file mode 100644 index 0000000..3d83c4a --- /dev/null +++ b/docs/html/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hook_5fcommands_2epy_0',['hook_commands.py',['../hook__commands_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_9.js b/docs/html/search/files_9.js new file mode 100644 index 0000000..fcddd7a --- /dev/null +++ b/docs/html/search/files_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jira_5fclient_2epy_0',['jira_client.py',['../jira__client_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_a.js b/docs/html/search/files_a.js new file mode 100644 index 0000000..876ef0d --- /dev/null +++ b/docs/html/search/files_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['llm_5fclient_2epy_0',['llm_client.py',['../llm__client_8py.html',1,'']]], + ['login_5fcommand_2epy_1',['login_command.py',['../login__command_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_b.js b/docs/html/search/files_b.js new file mode 100644 index 0000000..01a0bf7 --- /dev/null +++ b/docs/html/search/files_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2epy_0',['main.py',['../main_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_c.js b/docs/html/search/files_c.js new file mode 100644 index 0000000..6f265cb --- /dev/null +++ b/docs/html/search/files_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['penify_2dcli_2ddocumentation_2emd_0',['penify-cli-documentation.md',['../penify-cli-documentation_8md.html',1,'']]] +]; diff --git a/docs/html/search/files_d.js b/docs/html/search/files_d.js new file mode 100644 index 0000000..9847676 --- /dev/null +++ b/docs/html/search/files_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../README_8md.html',1,'']]] +]; diff --git a/docs/html/search/files_e.js b/docs/html/search/files_e.js new file mode 100644 index 0000000..d0dfcff --- /dev/null +++ b/docs/html/search/files_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['setup_2epy_0',['setup.py',['../setup_8py.html',1,'']]] +]; diff --git a/docs/html/search/files_f.js b/docs/html/search/files_f.js new file mode 100644 index 0000000..133fd11 --- /dev/null +++ b/docs/html/search/files_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['test_5fcommit_5fcommands_2epy_0',['test_commit_commands.py',['../test__commit__commands_8py.html',1,'']]], + ['test_5fconfig_5fcommands_2epy_1',['test_config_commands.py',['../test__config__commands_8py.html',1,'']]], + ['test_5fdoc_5fcommands_2epy_2',['test_doc_commands.py',['../test__doc__commands_8py.html',1,'']]], + ['test_5fweb_5fconfig_2epy_3',['test_web_config.py',['../test__web__config_8py.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..3ed0715 --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_5f_5finit_5f_5f_0',['__init__',['../classpenify__hook_1_1api__client_1_1APIClient.html#a8edae83711be6de381c6ec71c7aa2e37',1,'penify_hook.api_client.APIClient.__init__()'],['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa5d7b59e2118c6b229ab59f3ef3b95b5',1,'penify_hook.base_analyzer.BaseAnalyzer.__init__()'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a1fa29d890af3f3770743197e15776778',1,'penify_hook.commit_analyzer.CommitDocGenHook.__init__()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#ad0e39446078e1aeeb5325f3af02de2fb',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a8f7a55b16cab4711eb3a3c3d9eb99344',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a6f94663c0330ae7e6cbb7a8748177c24',1,'penify_hook.git_analyzer.GitDocGenHook.__init__()'],['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a3a6914654fd59e0cef96159143a52355',1,'penify_hook.jira_client.JiraClient.__init__()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a699a5be4411f5847fcb0a170281ab14b',1,'penify_hook.llm_client.LLMClient.__init__()']]], + ['_5famend_5fcommit_1',['_amend_commit',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a011812b68bf904e3beb051e585eff111',1,'penify_hook::commit_analyzer::CommitDocGenHook']]] +]; diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js new file mode 100644 index 0000000..6c71456 --- /dev/null +++ b/docs/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['add_5fcomment_0',['add_comment',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa1f374116c64cd5f1492ec7f7e40f9c1',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js new file mode 100644 index 0000000..1ba8685 --- /dev/null +++ b/docs/html/search/functions_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['commit_5fcode_0',['commit_code',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6',1,'penify_hook::commands::commit_commands']]], + ['config_5fjira_5fweb_1',['config_jira_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13',1,'penify_hook::commands::config_commands']]], + ['config_5fllm_5fweb_2',['config_llm_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62',1,'penify_hook::commands::config_commands']]], + ['create_5fprogress_5fbar_3',['create_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5',1,'penify_hook::ui_utils']]], + ['create_5fstage_5fprogress_5fbar_4',['create_stage_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405',1,'penify_hook::ui_utils']]] +]; diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js new file mode 100644 index 0000000..79bed7c --- /dev/null +++ b/docs/html/search/functions_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['enhance_5fcommit_5fmessage_0',['enhance_commit_message',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a70d2c5a6432aa6f238da0ff65d49a760',1,'penify_hook::jira_client::JiraClient']]], + ['extract_5fissue_5fkeys_1',['extract_issue_keys',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#ad2823ad1d3baaedd38039913c3a97fd7',1,'penify_hook::jira_client::JiraClient']]], + ['extract_5fissue_5fkeys_5ffrom_5fbranch_2',['extract_issue_keys_from_branch',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a093d6456fe053ef7a7862d5d6851910c',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js new file mode 100644 index 0000000..b54d0d5 --- /dev/null +++ b/docs/html/search/functions_4.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['find_5fgit_5fparent_0',['find_git_parent',['../namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2',1,'penify_hook::utils']]], + ['format_5fcommit_5fmessage_5fwith_5fjira_5finfo_1',['format_commit_message_with_jira_info',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a49ea1149758f7f5212149d357b13cc23',1,'penify_hook::jira_client::JiraClient']]], + ['format_5ferror_2',['format_error',['../namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca',1,'penify_hook::ui_utils']]], + ['format_5ffile_5fpath_3',['format_file_path',['../namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41',1,'penify_hook::ui_utils']]], + ['format_5fhighlight_4',['format_highlight',['../namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7',1,'penify_hook::ui_utils']]], + ['format_5finfo_5',['format_info',['../namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2',1,'penify_hook::ui_utils']]], + ['format_5fsuccess_6',['format_success',['../namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e',1,'penify_hook::ui_utils']]], + ['format_5fwarning_7',['format_warning',['../namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797',1,'penify_hook::ui_utils']]] +]; diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js new file mode 100644 index 0000000..d5e79d8 --- /dev/null +++ b/docs/html/search/functions_5.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['generate_5fcommit_5fsummary_0',['generate_commit_summary',['../classpenify__hook_1_1api__client_1_1APIClient.html#af0c2fac38629fed60e8440203a1197dd',1,'penify_hook.api_client.APIClient.generate_commit_summary()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a2ad3014dac466ee1d8e00306d0cf2000',1,'penify_hook.llm_client.LLMClient.generate_commit_summary()']]], + ['generate_5fcommit_5fsummary_5fwith_5fllm_1',['generate_commit_summary_with_llm',['../classpenify__hook_1_1api__client_1_1APIClient.html#a07bc97b2af31662029a24169f285c286',1,'penify_hook::api_client::APIClient']]], + ['generate_5fdoc_2',['generate_doc',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7',1,'penify_hook::commands::doc_commands']]], + ['get_5fapi_5fkey_3',['get_api_key',['../classpenify__hook_1_1api__client_1_1APIClient.html#a57a96d5c14128dd8021347f7e72fe12b',1,'penify_hook::api_client::APIClient']]], + ['get_5fcommit_5fcontext_5ffrom_5fissues_4',['get_commit_context_from_issues',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#afb41ce6f13c30b1265d439ddf04bf2cd',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fdetailed_5fissue_5fcontext_5',['get_detailed_issue_context',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa967169a4b7970c67c0947b9ac56f746',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fenv_5fvar_5for_5fdefault_6',['get_env_var_or_default',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87',1,'penify_hook::commands::config_commands']]], + ['get_5fissue_5fdetails_7',['get_issue_details',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a65f6924819084b7c8d268956a784804a',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fjira_5fconfig_8',['get_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2',1,'penify_hook::commands::config_commands']]], + ['get_5fllm_5fconfig_9',['get_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0',1,'penify_hook::commands::config_commands']]], + ['get_5fmodified_5ffiles_5fin_5flast_5fcommit_10',['get_modified_files_in_last_commit',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a7070449b5dc058808eb13013db3d8eab',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fmodified_5flines_11',['get_modified_lines',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a74e36507adc1b1955cc6cc303f3f5328',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fpenify_5fconfig_12',['get_penify_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20',1,'penify_hook::commands::config_commands']]], + ['get_5frepo_5fdetails_13',['get_repo_details',['../namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19',1,'penify_hook::utils']]], + ['get_5fsummary_14',['get_summary',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a8496194276441fa2eb2fa014eaab9a37',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['get_5fsupported_5ffile_5ftypes_15',['get_supported_file_types',['../classpenify__hook_1_1api__client_1_1APIClient.html#a5d2b4a26b24352d951ea79ecc4ff3402',1,'penify_hook::api_client::APIClient']]], + ['get_5ftoken_16',['get_token',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812',1,'penify_hook::commands::config_commands']]] +]; diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js new file mode 100644 index 0000000..7ca9744 --- /dev/null +++ b/docs/html/search/functions_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['handle_5fcommit_0',['handle_commit',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076',1,'penify_hook::commands::commit_commands']]], + ['handle_5fconfig_1',['handle_config',['../namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5',1,'penify_hook::config_command']]], + ['handle_5fdocgen_2',['handle_docgen',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc',1,'penify_hook::commands::doc_commands']]], + ['handle_5flogin_3',['handle_login',['../namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411',1,'penify_hook::login_command']]] +]; diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js new file mode 100644 index 0000000..bc56fed --- /dev/null +++ b/docs/html/search/functions_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['install_5fgit_5fhook_0',['install_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135',1,'penify_hook::commands::hook_commands']]], + ['is_5fconnected_1',['is_connected',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a00d0f9ae006313a21576362d26ac5ec8',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js new file mode 100644 index 0000000..aefe8a8 --- /dev/null +++ b/docs/html/search/functions_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['list_5fall_5ffiles_5fin_5fdir_0',['list_all_files_in_dir',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a050554646cbc07aef1fbaa748ee4c0fc',1,'penify_hook::folder_analyzer::FolderAnalyzerGenHook']]], + ['litellm_1',['litellm',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#aa646fddc43ecd633d2c358d58dd4df24',1,'penify_hook::llm_client::LLMClient']]], + ['load_5fenv_5ffiles_2',['load_env_files',['../namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae',1,'penify_hook::commands::config_commands']]], + ['login_3',['login',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6',1,'penify_hook::commands::auth_commands']]] +]; diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js new file mode 100644 index 0000000..14007e2 --- /dev/null +++ b/docs/html/search/functions_9.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['main_0',['main',['../namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb',1,'penify_hook::main']]], + ['mock_5fapi_5fclient_1',['mock_api_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a7f9beb5fdd122ed9a39dd0751934d661',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fcommit_5fdoc_5fgen_2',['mock_commit_doc_gen',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a4e7b42caad38d0f9162c7b490720a3b7',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fgit_5ffolder_5fsearch_3',['mock_git_folder_search',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a71bfa48c9a521febb5c279cff113fbf5',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fjira_5fclient_4',['mock_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a43b8dd6adb507ef30604cd790940b881',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fllm_5fclient_5',['mock_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#af8f0277ac27f0e9d0a0e4bc6fcd77107',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fprint_5ffunctions_6',['mock_print_functions',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a65132bfab05d287af9eb380b73d332ab',1,'tests::test_commit_commands::TestCommitCommands']]] +]; diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js new file mode 100644 index 0000000..5235d1b --- /dev/null +++ b/docs/html/search/functions_a.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['print_5ferror_0',['print_error',['../namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598',1,'penify_hook::ui_utils']]], + ['print_5finfo_1',['print_info',['../namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c',1,'penify_hook::ui_utils']]], + ['print_5fprocessing_2',['print_processing',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a1b371f1ba909b4fd351c542815f18747',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing()'],['../namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb',1,'penify_hook.ui_utils.print_processing(file_path)']]], + ['print_5fstatus_3',['print_status',['../namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7',1,'penify_hook::ui_utils']]], + ['print_5fsuccess_4',['print_success',['../namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b',1,'penify_hook::ui_utils']]], + ['print_5fwarning_5',['print_warning',['../namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45',1,'penify_hook::ui_utils']]], + ['process_5ffile_6',['process_file',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#aeb3be324ba517855d6e5cdb684a6efda',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.process_file()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a0fcec06966a3a5ef1df21529a6a3db81',1,'penify_hook.git_analyzer.GitDocGenHook.process_file()']]], + ['process_5fjira_5fintegration_7',['process_jira_integration',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#adda13cc121d96342476ccf72b63a007f',1,'penify_hook::commit_analyzer::CommitDocGenHook']]] +]; diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js new file mode 100644 index 0000000..e479d59 --- /dev/null +++ b/docs/html/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['recursive_5fsearch_5fgit_5ffolder_0',['recursive_search_git_folder',['../namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a',1,'penify_hook::utils']]], + ['run_1',['run',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a2d0bb9eba04614915fa33a1d7b0b8f03',1,'penify_hook.commit_analyzer.CommitDocGenHook.run()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a503c97b07cb2db1df0d881094dd6bb49',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.run()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53c61ef41d39dd9bb1c8020a94f1dd8d',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.run()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a38fe1e50fc9448d995851d933283b633',1,'penify_hook.git_analyzer.GitDocGenHook.run()']]] +]; diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js new file mode 100644 index 0000000..5eaaf97 --- /dev/null +++ b/docs/html/search/functions_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['save_5fcredentials_0',['save_credentials',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b',1,'penify_hook::commands::auth_commands']]], + ['save_5fjira_5fconfig_1',['save_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374',1,'penify_hook::commands::config_commands']]], + ['save_5fllm_5fconfig_2',['save_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4',1,'penify_hook::commands::config_commands']]], + ['send_5ffile_5ffor_5fdocstring_5fgeneration_3',['send_file_for_docstring_generation',['../classpenify__hook_1_1api__client_1_1APIClient.html#ad6392c5f8e8b5e3394a74979278835bd',1,'penify_hook::api_client::APIClient']]], + ['setup_5fcommit_5fparser_4',['setup_commit_parser',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1',1,'penify_hook::commands::commit_commands']]], + ['setup_5fconfig_5fparser_5',['setup_config_parser',['../namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba',1,'penify_hook::config_command']]], + ['setup_5fdocgen_5fparser_6',['setup_docgen_parser',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6',1,'penify_hook::commands::doc_commands']]], + ['setup_5flogin_5fparser_7',['setup_login_parser',['../namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235',1,'penify_hook::login_command']]] +]; diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js new file mode 100644 index 0000000..5087b19 --- /dev/null +++ b/docs/html/search/functions_d.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['test_5fcommit_5fcode_5ferror_5fhandling_0',['test_commit_code_error_handling',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a8288fd5a830273e48732231df0421658',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fclient_1',['test_commit_code_with_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a02319d7a366df3950c8c151dd7821a93',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fconnection_5ffailure_2',['test_commit_code_with_jira_connection_failure',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#ae8066d6f07122a6be89b05ddbb5bb07b',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fllm_5fclient_3',['test_commit_code_with_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a70225e655e0ca64868d71e3c9389a218',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fconfig_5fjira_5fweb_5fserver_5fsetup_4',['test_config_jira_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a63789aa9bfafe1a16b1f462174c53f6b',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fconfig_5fllm_5fweb_5fserver_5fsetup_5',['test_config_llm_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a881cb29c7d44f302fb961f496a20776d',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fgenerate_5fdoc_5ferror_5fhandling_6',['test_generate_doc_error_handling',['../namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffile_5flocation_7',['test_generate_doc_file_location',['../namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffolder_5flocation_8',['test_generate_doc_folder_location',['../namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fno_5flocation_9',['test_generate_doc_no_location',['../namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffile_5fexception_10',['test_generate_doc_with_file_exception',['../namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffolder_5fexception_11',['test_generate_doc_with_folder_exception',['../namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee',1,'tests::test_doc_commands']]], + ['test_5fget_5fjira_5fconfig_5fexists_12',['test_get_jira_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a153e6f218be2f42581be6895a14a4e85',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fempty_13',['test_get_llm_config_empty',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a29cdcf995761e77c9ff8c93e49eff541',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fexists_14',['test_get_llm_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#acd6ebd022b24b111df7cabdab4e1b6db',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5finvalid_5fjson_15',['test_get_llm_config_invalid_json',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a06d58f1b9188f2486f7e424aea40d0bd',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fexisting_5fdir_16',['test_get_penify_config_existing_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ae9c0ef56734f17892b7ac115e488bac4',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fnew_5fdir_17',['test_get_penify_config_new_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a335a57c003a8d797a5457c4d1c60420e',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fconfig_18',['test_get_token_from_config',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ac2890b010d859d53629d9bea6a72b9c0',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fenv_19',['test_get_token_from_env',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#af30db6b96dcf9e6143d6a8f5241f5be1',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5fnot_5ffound_20',['test_get_token_not_found',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a1548cea068b4305d5a1d3ad5fb1bc25a',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fhandle_5fcommit_21',['test_handle_commit',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#adc5d95c15793c4bc698a62147aab2f7a',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fhandle_5fdocgen_5fgenerate_22',['test_handle_docgen_generate',['../namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5finstall_5fhook_23',['test_handle_docgen_install_hook',['../namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5fno_5ftoken_24',['test_handle_docgen_no_token',['../namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5funinstall_5fhook_25',['test_handle_docgen_uninstall_hook',['../namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b',1,'tests::test_doc_commands']]], + ['test_5fsave_5fjira_5fconfig_5fsuccess_26',['test_save_jira_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a060996b8323f4cfd629c77b4e2605f50',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5ffailure_27',['test_save_llm_config_failure',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2ccb8ee5c161fcf49a04404a1658100b',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5fsuccess_28',['test_save_llm_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2411d025a057beb8a2f2a6431559e64f',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsetup_5fcommit_5fparser_29',['test_setup_commit_parser',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a820f1f6ac060eb4b33903e1e8a3318fe',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fsetup_5fdocgen_5fparser_30',['test_setup_docgen_parser',['../namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042',1,'tests::test_doc_commands']]] +]; diff --git a/docs/html/search/functions_e.js b/docs/html/search/functions_e.js new file mode 100644 index 0000000..eb360f1 --- /dev/null +++ b/docs/html/search/functions_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['uninstall_5fgit_5fhook_0',['uninstall_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443',1,'penify_hook::commands::hook_commands']]], + ['update_5fissue_5fstatus_1',['update_issue_status',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aca8837552d37bfd611de23441a240826',1,'penify_hook::jira_client::JiraClient']]], + ['update_5fstage_2',['update_stage',['../namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd',1,'penify_hook::ui_utils']]] +]; diff --git a/docs/html/search/mag.svg b/docs/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/html/search/mag_d.svg b/docs/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/html/search/mag_seld.svg b/docs/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js new file mode 100644 index 0000000..22d8699 --- /dev/null +++ b/docs/html/search/namespaces_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['penify_5fhook_0',['penify_hook',['../namespacepenify__hook.html',1,'']]], + ['penify_5fhook_3a_3aapi_5fclient_1',['api_client',['../namespacepenify__hook_1_1api__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3abase_5fanalyzer_2',['base_analyzer',['../namespacepenify__hook_1_1base__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_3',['commands',['../namespacepenify__hook_1_1commands.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_3a_3aauth_5fcommands_4',['auth_commands',['../namespacepenify__hook_1_1commands_1_1auth__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3acommit_5fcommands_5',['commit_commands',['../namespacepenify__hook_1_1commands_1_1commit__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3aconfig_5fcommands_6',['config_commands',['../namespacepenify__hook_1_1commands_1_1config__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3adoc_5fcommands_7',['doc_commands',['../namespacepenify__hook_1_1commands_1_1doc__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3ahook_5fcommands_8',['hook_commands',['../namespacepenify__hook_1_1commands_1_1hook__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommit_5fanalyzer_9',['commit_analyzer',['../namespacepenify__hook_1_1commit__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconfig_5fcommand_10',['config_command',['../namespacepenify__hook_1_1config__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconstants_11',['constants',['../namespacepenify__hook_1_1constants.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afile_5fanalyzer_12',['file_analyzer',['../namespacepenify__hook_1_1file__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afolder_5fanalyzer_13',['folder_analyzer',['../namespacepenify__hook_1_1folder__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3agit_5fanalyzer_14',['git_analyzer',['../namespacepenify__hook_1_1git__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3ajira_5fclient_15',['jira_client',['../namespacepenify__hook_1_1jira__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3allm_5fclient_16',['llm_client',['../namespacepenify__hook_1_1llm__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3alogin_5fcommand_17',['login_command',['../namespacepenify__hook_1_1login__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3amain_18',['main',['../namespacepenify__hook_1_1main.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aui_5futils_19',['ui_utils',['../namespacepenify__hook_1_1ui__utils.html',1,'penify_hook']]], + ['penify_5fhook_3a_3autils_20',['utils',['../namespacepenify__hook_1_1utils.html',1,'penify_hook']]] +]; diff --git a/docs/html/search/namespaces_1.js b/docs/html/search/namespaces_1.js new file mode 100644 index 0000000..fdca1a8 --- /dev/null +++ b/docs/html/search/namespaces_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['setup_0',['setup',['../namespacesetup.html',1,'']]] +]; diff --git a/docs/html/search/namespaces_2.js b/docs/html/search/namespaces_2.js new file mode 100644 index 0000000..3095caf --- /dev/null +++ b/docs/html/search/namespaces_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['tests_0',['tests',['../namespacetests.html',1,'']]], + ['tests_3a_3aconftest_1',['conftest',['../namespacetests_1_1conftest.html',1,'tests']]], + ['tests_3a_3atest_5fcommit_5fcommands_2',['test_commit_commands',['../namespacetests_1_1test__commit__commands.html',1,'tests']]], + ['tests_3a_3atest_5fconfig_5fcommands_3',['test_config_commands',['../namespacetests_1_1test__config__commands.html',1,'tests']]], + ['tests_3a_3atest_5fdoc_5fcommands_4',['test_doc_commands',['../namespacetests_1_1test__doc__commands.html',1,'tests']]], + ['tests_3a_3atest_5fweb_5fconfig_5',['test_web_config',['../namespacetests_1_1test__web__config.html',1,'tests']]] +]; diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js new file mode 100644 index 0000000..ad90568 --- /dev/null +++ b/docs/html/search/pages_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['cli_20commit_20commands_0',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['cli_20configuration_20commands_1',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'']]], + ['cli_20detailed_20usage_20guide_2',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['cli_20documentation_3',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['cli_20documentation_20generation_20commands_4',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['cli_20example_20workflows_5',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['commands_6',['Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'Penify CLI - Commit Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'Penify CLI - Configuration Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'Penify CLI - Documentation Generation Commands']]], + ['commit_20commands_7',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['configuration_20commands_8',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'']]] +]; diff --git a/docs/html/search/pages_1.js b/docs/html/search/pages_1.js new file mode 100644 index 0000000..f314043 --- /dev/null +++ b/docs/html/search/pages_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['detailed_20usage_20guide_0',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['documentation_1',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['documentation_20generation_20commands_2',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]] +]; diff --git a/docs/html/search/pages_2.js b/docs/html/search/pages_2.js new file mode 100644 index 0000000..31052be --- /dev/null +++ b/docs/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['example_20workflows_0',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs/html/search/pages_3.js b/docs/html/search/pages_3.js new file mode 100644 index 0000000..337de9f --- /dev/null +++ b/docs/html/search/pages_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['generation_20commands_0',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['guide_1',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]] +]; diff --git a/docs/html/search/pages_4.js b/docs/html/search/pages_4.js new file mode 100644 index 0000000..13fb42f --- /dev/null +++ b/docs/html/search/pages_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['penify_20cli_20commit_20commands_0',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['penify_20cli_20configuration_20commands_1',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2config-commands.html',1,'']]], + ['penify_20cli_20detailed_20usage_20guide_2',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['penify_20cli_20documentation_3',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['penify_20cli_20documentation_20generation_20commands_4',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['penify_20cli_20example_20workflows_5',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs/html/search/pages_5.js b/docs/html/search/pages_5.js new file mode 100644 index 0000000..f27c2e2 --- /dev/null +++ b/docs/html/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['usage_20guide_0',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2detailed-usage.html',1,'']]] +]; diff --git a/docs/html/search/pages_6.js b/docs/html/search/pages_6.js new file mode 100644 index 0000000..9840017 --- /dev/null +++ b/docs/html/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['workflows_0',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2SingularityX-ai_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..d7b0f90 --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/setup.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    setup.py File Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  setup
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     setup.name
     
     setup.version
     
     setup.packages
     
     setup.install_requires
     
     setup.entry_points
     
     setup.author
     
     setup.author_email
     
     setup.description
     
     setup.long_description
     
     setup.long_description_content_type
     
     setup.url
     
     setup.classifiers
     
     setup.python_requires
     
    +
    +
    + + + + + diff --git a/docs/html/setup_8py.js b/docs/html/setup_8py.js new file mode 100644 index 0000000..ff1aead --- /dev/null +++ b/docs/html/setup_8py.js @@ -0,0 +1,16 @@ +var setup_8py = +[ + [ "setup.author", "namespacesetup.html#a3a57a4772d418a06835249cbade0d86a", null ], + [ "setup.author_email", "namespacesetup.html#a5b08034343aa2be607722a8b315f3625", null ], + [ "setup.classifiers", "namespacesetup.html#abe96a9c38c1c61f9f0fdb002c482f785", null ], + [ "setup.description", "namespacesetup.html#aedf461ec52a946bda975938ba0b93ec0", null ], + [ "setup.entry_points", "namespacesetup.html#ada7058afc98897f073d3f3b8b9157059", null ], + [ "setup.install_requires", "namespacesetup.html#abead4f26b530856f858f0d44c7cf2588", null ], + [ "setup.long_description", "namespacesetup.html#a4cda9dbfb952875376a0749fe08a5bde", null ], + [ "setup.long_description_content_type", "namespacesetup.html#a3796ea10c998699d07d391414ff5d720", null ], + [ "setup.name", "namespacesetup.html#ab3a7a0638d76a01367c5bc3cc699447f", null ], + [ "setup.packages", "namespacesetup.html#aff2375a361fd5865c77bd9aa093be747", null ], + [ "setup.python_requires", "namespacesetup.html#aa7ca7bc9391b217e81efeb03689d8dbf", null ], + [ "setup.url", "namespacesetup.html#afc13124aa5c0124e84e1d965e3f4b0fb", null ], + [ "setup.version", "namespacesetup.html#a2aa722b36a933088812b50ea79b97a5c", null ] +]; \ No newline at end of file diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/docs/html/splitbard.png b/docs/html/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/docs/html/svg.min.js b/docs/html/svg.min.js new file mode 100644 index 0000000..916732f --- /dev/null +++ b/docs/html/svg.min.js @@ -0,0 +1,46 @@ +/*! +* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG. +* @version 3.1.2 +* https://svgjs.dev/ +* +* @copyright Wout Fierens +* @license MIT +* +* BUILT: Wed Jan 26 2022 23:19:07 GMT+0100 (Mitteleuropäische Normalzeit) +*/var SVG=function(){"use strict";const methods$1={};const names=[];function registerMethods(name,m){if(Array.isArray(name)){for(const _name of name){registerMethods(_name,m)}return}if(typeof name==="object"){for(const _name in name){registerMethods(_name,name[_name])}return}addMethodNames(Object.getOwnPropertyNames(m));methods$1[name]=Object.assign(methods$1[name]||{},m)}function getMethodsFor(name){return methods$1[name]||{}}function getMethodNames(){return[...new Set(names)]}function addMethodNames(_names){names.push(..._names)}function map(array,block){let i;const il=array.length;const result=[];for(i=0;i=0;i--){assignNewId(node.children[i])}if(node.id){node.id=eid(node.nodeName);return node}return node}function extend(modules,methods){let key,i;modules=Array.isArray(modules)?modules:[modules];for(i=modules.length-1;i>=0;i--){for(key in methods){modules[i].prototype[key]=methods[key]}}}function wrapWithAttrCheck(fn){return function(...args){const o=args[args.length-1];if(o&&o.constructor===Object&&!(o instanceof Array)){return fn.apply(this,args.slice(0,-1)).attr(o)}else{return fn.apply(this,args)}}}function siblings(){return this.parent().children()}function position(){return this.parent().index(this)}function next(){return this.siblings()[this.position()+1]}function prev(){return this.siblings()[this.position()-1]}function forward(){const i=this.position();const p=this.parent();p.add(this.remove(),i+1);return this}function backward(){const i=this.position();const p=this.parent();p.add(this.remove(),i?i-1:0);return this}function front(){const p=this.parent();p.add(this.remove());return this}function back(){const p=this.parent();p.add(this.remove(),0);return this}function before(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i);return this}function after(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i+1);return this}function insertBefore(element){element=makeInstance(element);element.before(this);return this}function insertAfter(element){element=makeInstance(element);element.after(this);return this}registerMethods("Dom",{siblings:siblings,position:position,next:next,prev:prev,forward:forward,backward:backward,front:front,back:back,before:before,after:after,insertBefore:insertBefore,insertAfter:insertAfter});const numberAndUnit=/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i;const hex=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;const rgb=/rgb\((\d+),(\d+),(\d+)\)/;const reference=/(#[a-z_][a-z0-9\-_]*)/i;const transforms=/\)\s*,?\s*/;const whitespace=/\s/g;const isHex=/^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;const isRgb=/^rgb\(/;const isBlank=/^(\s+)?$/;const isNumber=/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;const isImage=/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i;const delimiter=/[\s,]+/;const isPathLetter=/[MLHVCSQTAZ]/i;var regex={__proto__:null,numberAndUnit:numberAndUnit,hex:hex,rgb:rgb,reference:reference,transforms:transforms,whitespace:whitespace,isHex:isHex,isRgb:isRgb,isBlank:isBlank,isNumber:isNumber,isImage:isImage,delimiter:delimiter,isPathLetter:isPathLetter};function classes(){const attr=this.attr("class");return attr==null?[]:attr.trim().split(delimiter)}function hasClass(name){return this.classes().indexOf(name)!==-1}function addClass(name){if(!this.hasClass(name)){const array=this.classes();array.push(name);this.attr("class",array.join(" "))}return this}function removeClass(name){if(this.hasClass(name)){this.attr("class",this.classes().filter(function(c){return c!==name}).join(" "))}return this}function toggleClass(name){return this.hasClass(name)?this.removeClass(name):this.addClass(name)}registerMethods("Dom",{classes:classes,hasClass:hasClass,addClass:addClass,removeClass:removeClass,toggleClass:toggleClass});function css(style,val){const ret={};if(arguments.length===0){this.node.style.cssText.split(/\s*;\s*/).filter(function(el){return!!el.length}).forEach(function(el){const t=el.split(/\s*:\s*/);ret[t[0]]=t[1]});return ret}if(arguments.length<2){if(Array.isArray(style)){for(const name of style){const cased=camelCase(name);ret[name]=this.node.style[cased]}return ret}if(typeof style==="string"){return this.node.style[camelCase(style)]}if(typeof style==="object"){for(const name in style){this.node.style[camelCase(name)]=style[name]==null||isBlank.test(style[name])?"":style[name]}}}if(arguments.length===2){this.node.style[camelCase(style)]=val==null||isBlank.test(val)?"":val}return this}function show(){return this.css("display","")}function hide(){return this.css("display","none")}function visible(){return this.css("display")!=="none"}registerMethods("Dom",{css:css,show:show,hide:hide,visible:visible});function data(a,v,r){if(a==null){return this.data(map(filter(this.node.attributes,el=>el.nodeName.indexOf("data-")===0),el=>el.nodeName.slice(5)))}else if(a instanceof Array){const data={};for(const key of a){data[key]=this.data(key)}return data}else if(typeof a==="object"){for(v in a){this.data(v,a[v])}}else if(arguments.length<2){try{return JSON.parse(this.attr("data-"+a))}catch(e){return this.attr("data-"+a)}}else{this.attr("data-"+a,v===null?null:r===true||typeof v==="string"||typeof v==="number"?v:JSON.stringify(v))}return this}registerMethods("Dom",{data:data});function remember(k,v){if(typeof arguments[0]==="object"){for(const key in k){this.remember(key,k[key])}}else if(arguments.length===1){return this.memory()[k]}else{this.memory()[k]=v}return this}function forget(){if(arguments.length===0){this._memory={}}else{for(let i=arguments.length-1;i>=0;i--){delete this.memory()[arguments[i]]}}return this}function memory(){return this._memory=this._memory||{}}registerMethods("Dom",{remember:remember,forget:forget,memory:memory});function sixDigitHex(hex){return hex.length===4?["#",hex.substring(1,2),hex.substring(1,2),hex.substring(2,3),hex.substring(2,3),hex.substring(3,4),hex.substring(3,4)].join(""):hex}function componentHex(component){const integer=Math.round(component);const bounded=Math.max(0,Math.min(255,integer));const hex=bounded.toString(16);return hex.length===1?"0"+hex:hex}function is(object,space){for(let i=space.length;i--;){if(object[space[i]]==null){return false}}return true}function getParameters(a,b){const params=is(a,"rgb")?{_a:a.r,_b:a.g,_c:a.b,_d:0,space:"rgb"}:is(a,"xyz")?{_a:a.x,_b:a.y,_c:a.z,_d:0,space:"xyz"}:is(a,"hsl")?{_a:a.h,_b:a.s,_c:a.l,_d:0,space:"hsl"}:is(a,"lab")?{_a:a.l,_b:a.a,_c:a.b,_d:0,space:"lab"}:is(a,"lch")?{_a:a.l,_b:a.c,_c:a.h,_d:0,space:"lch"}:is(a,"cmyk")?{_a:a.c,_b:a.m,_c:a.y,_d:a.k,space:"cmyk"}:{_a:0,_b:0,_c:0,space:"rgb"};params.space=b||params.space;return params}function cieSpace(space){if(space==="lab"||space==="xyz"||space==="lch"){return true}else{return false}}function hueToRgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p}class Color{constructor(...inputs){this.init(...inputs)}static isColor(color){return color&&(color instanceof Color||this.isRgb(color)||this.test(color))}static isRgb(color){return color&&typeof color.r==="number"&&typeof color.g==="number"&&typeof color.b==="number"}static random(mode="vibrant",t,u){const{random,round,sin,PI:pi}=Math;if(mode==="vibrant"){const l=(81-57)*random()+57;const c=(83-45)*random()+45;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="sine"){t=t==null?random():t;const r=round(80*sin(2*pi*t/.5+.01)+150);const g=round(50*sin(2*pi*t/.5+4.6)+200);const b=round(100*sin(2*pi*t/.5+2.3)+150);const color=new Color(r,g,b);return color}else if(mode==="pastel"){const l=(94-86)*random()+86;const c=(26-9)*random()+9;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="dark"){const l=10+10*random();const c=(125-75)*random()+86;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="rgb"){const r=255*random();const g=255*random();const b=255*random();const color=new Color(r,g,b);return color}else if(mode==="lab"){const l=100*random();const a=256*random()-128;const b=256*random()-128;const color=new Color(l,a,b,"lab");return color}else if(mode==="grey"){const grey=255*random();const color=new Color(grey,grey,grey);return color}else{throw new Error("Unsupported random color mode")}}static test(color){return typeof color==="string"&&(isHex.test(color)||isRgb.test(color))}cmyk(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const k=Math.min(1-r,1-g,1-b);if(k===1){return new Color(0,0,0,1,"cmyk")}const c=(1-r-k)/(1-k);const m=(1-g-k)/(1-k);const y=(1-b-k)/(1-k);const color=new Color(c,m,y,k,"cmyk");return color}hsl(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const max=Math.max(r,g,b);const min=Math.min(r,g,b);const l=(max+min)/2;const isGrey=max===min;const delta=max-min;const s=isGrey?0:l>.5?delta/(2-max-min):delta/(max+min);const h=isGrey?0:max===r?((g-b)/delta+(gparseInt(v));Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else if(isHex.test(a)){const hexParse=v=>parseInt(v,16);const[,_a,_b,_c]=hex.exec(sixDigitHex(a)).map(hexParse);Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else throw Error("Unsupported string format, can't construct Color")}const{_a,_b,_c,_d}=this;const components=this.space==="rgb"?{r:_a,g:_b,b:_c}:this.space==="xyz"?{x:_a,y:_b,z:_c}:this.space==="hsl"?{h:_a,s:_b,l:_c}:this.space==="lab"?{l:_a,a:_b,b:_c}:this.space==="lch"?{l:_a,c:_b,h:_c}:this.space==="cmyk"?{c:_a,m:_b,y:_c,k:_d}:{};Object.assign(this,components)}lab(){const{x,y,z}=this.xyz();const l=116*y-16;const a=500*(x-y);const b=200*(y-z);const color=new Color(l,a,b,"lab");return color}lch(){const{l,a,b}=this.lab();const c=Math.sqrt(a**2+b**2);let h=180*Math.atan2(b,a)/Math.PI;if(h<0){h*=-1;h=360-h}const color=new Color(l,c,h,"lch");return color}rgb(){if(this.space==="rgb"){return this}else if(cieSpace(this.space)){let{x,y,z}=this;if(this.space==="lab"||this.space==="lch"){let{l,a,b}=this;if(this.space==="lch"){const{c,h}=this;const dToR=Math.PI/180;a=c*Math.cos(dToR*h);b=c*Math.sin(dToR*h)}const yL=(l+16)/116;const xL=a/500+yL;const zL=yL-b/200;const ct=16/116;const mx=.008856;const nm=7.787;x=.95047*(xL**3>mx?xL**3:(xL-ct)/nm);y=1*(yL**3>mx?yL**3:(yL-ct)/nm);z=1.08883*(zL**3>mx?zL**3:(zL-ct)/nm)}const rU=x*3.2406+y*-1.5372+z*-.4986;const gU=x*-.9689+y*1.8758+z*.0415;const bU=x*.0557+y*-.204+z*1.057;const pow=Math.pow;const bd=.0031308;const r=rU>bd?1.055*pow(rU,1/2.4)-.055:12.92*rU;const g=gU>bd?1.055*pow(gU,1/2.4)-.055:12.92*gU;const b=bU>bd?1.055*pow(bU,1/2.4)-.055:12.92*bU;const color=new Color(255*r,255*g,255*b);return color}else if(this.space==="hsl"){let{h,s,l}=this;h/=360;s/=100;l/=100;if(s===0){l*=255;const color=new Color(l,l,l);return color}const q=l<.5?l*(1+s):l+s-l*s;const p=2*l-q;const r=255*hueToRgb(p,q,h+1/3);const g=255*hueToRgb(p,q,h);const b=255*hueToRgb(p,q,h-1/3);const color=new Color(r,g,b);return color}else if(this.space==="cmyk"){const{c,m,y,k}=this;const r=255*(1-Math.min(1,c*(1-k)+k));const g=255*(1-Math.min(1,m*(1-k)+k));const b=255*(1-Math.min(1,y*(1-k)+k));const color=new Color(r,g,b);return color}else{return this}}toArray(){const{_a,_b,_c,_d,space}=this;return[_a,_b,_c,_d,space]}toHex(){const[r,g,b]=this._clamped().map(componentHex);return`#${r}${g}${b}`}toRgb(){const[rV,gV,bV]=this._clamped();const string=`rgb(${rV},${gV},${bV})`;return string}toString(){return this.toHex()}xyz(){const{_a:r255,_b:g255,_c:b255}=this.rgb();const[r,g,b]=[r255,g255,b255].map(v=>v/255);const rL=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92;const gL=g>.04045?Math.pow((g+.055)/1.055,2.4):g/12.92;const bL=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92;const xU=(rL*.4124+gL*.3576+bL*.1805)/.95047;const yU=(rL*.2126+gL*.7152+bL*.0722)/1;const zU=(rL*.0193+gL*.1192+bL*.9505)/1.08883;const x=xU>.008856?Math.pow(xU,1/3):7.787*xU+16/116;const y=yU>.008856?Math.pow(yU,1/3):7.787*yU+16/116;const z=zU>.008856?Math.pow(zU,1/3):7.787*zU+16/116;const color=new Color(x,y,z,"xyz");return color}_clamped(){const{_a,_b,_c}=this.rgb();const{max,min,round}=Math;const format=v=>max(0,min(round(v),255));return[_a,_b,_c].map(format)}}class Point{constructor(...args){this.init(...args)}clone(){return new Point(this)}init(x,y){const base={x:0,y:0};const source=Array.isArray(x)?{x:x[0],y:x[1]}:typeof x==="object"?{x:x.x,y:x.y}:{x:x,y:y};this.x=source.x==null?base.x:source.x;this.y=source.y==null?base.y:source.y;return this}toArray(){return[this.x,this.y]}transform(m){return this.clone().transformO(m)}transformO(m){if(!Matrix.isMatrixLike(m)){m=new Matrix(m)}const{x,y}=this;this.x=m.a*x+m.c*y+m.e;this.y=m.b*x+m.d*y+m.f;return this}}function point(x,y){return new Point(x,y).transform(this.screenCTM().inverse())}function closeEnough(a,b,threshold){return Math.abs(b-a)<(threshold||1e-6)}class Matrix{constructor(...args){this.init(...args)}static formatTransforms(o){const flipBoth=o.flip==="both"||o.flip===true;const flipX=o.flip&&(flipBoth||o.flip==="x")?-1:1;const flipY=o.flip&&(flipBoth||o.flip==="y")?-1:1;const skewX=o.skew&&o.skew.length?o.skew[0]:isFinite(o.skew)?o.skew:isFinite(o.skewX)?o.skewX:0;const skewY=o.skew&&o.skew.length?o.skew[1]:isFinite(o.skew)?o.skew:isFinite(o.skewY)?o.skewY:0;const scaleX=o.scale&&o.scale.length?o.scale[0]*flipX:isFinite(o.scale)?o.scale*flipX:isFinite(o.scaleX)?o.scaleX*flipX:flipX;const scaleY=o.scale&&o.scale.length?o.scale[1]*flipY:isFinite(o.scale)?o.scale*flipY:isFinite(o.scaleY)?o.scaleY*flipY:flipY;const shear=o.shear||0;const theta=o.rotate||o.theta||0;const origin=new Point(o.origin||o.around||o.ox||o.originX,o.oy||o.originY);const ox=origin.x;const oy=origin.y;const position=new Point(o.position||o.px||o.positionX||NaN,o.py||o.positionY||NaN);const px=position.x;const py=position.y;const translate=new Point(o.translate||o.tx||o.translateX,o.ty||o.translateY);const tx=translate.x;const ty=translate.y;const relative=new Point(o.relative||o.rx||o.relativeX,o.ry||o.relativeY);const rx=relative.x;const ry=relative.y;return{scaleX:scaleX,scaleY:scaleY,skewX:skewX,skewY:skewY,shear:shear,theta:theta,rx:rx,ry:ry,tx:tx,ty:ty,ox:ox,oy:oy,px:px,py:py}}static fromArray(a){return{a:a[0],b:a[1],c:a[2],d:a[3],e:a[4],f:a[5]}}static isMatrixLike(o){return o.a!=null||o.b!=null||o.c!=null||o.d!=null||o.e!=null||o.f!=null}static matrixMultiply(l,r,o){const a=l.a*r.a+l.c*r.b;const b=l.b*r.a+l.d*r.b;const c=l.a*r.c+l.c*r.d;const d=l.b*r.c+l.d*r.d;const e=l.e+l.a*r.e+l.c*r.f;const f=l.f+l.b*r.e+l.d*r.f;o.a=a;o.b=b;o.c=c;o.d=d;o.e=e;o.f=f;return o}around(cx,cy,matrix){return this.clone().aroundO(cx,cy,matrix)}aroundO(cx,cy,matrix){const dx=cx||0;const dy=cy||0;return this.translateO(-dx,-dy).lmultiplyO(matrix).translateO(dx,dy)}clone(){return new Matrix(this)}decompose(cx=0,cy=0){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const determinant=a*d-b*c;const ccw=determinant>0?1:-1;const sx=ccw*Math.sqrt(a*a+b*b);const thetaRad=Math.atan2(ccw*b,ccw*a);const theta=180/Math.PI*thetaRad;const ct=Math.cos(thetaRad);const st=Math.sin(thetaRad);const lam=(a*c+b*d)/determinant;const sy=c*sx/(lam*a-b)||d*sx/(lam*b+a);const tx=e-cx+cx*ct*sx+cy*(lam*ct*sx-st*sy);const ty=f-cy+cx*st*sx+cy*(lam*st*sx+ct*sy);return{scaleX:sx,scaleY:sy,shear:lam,rotate:theta,translateX:tx,translateY:ty,originX:cx,originY:cy,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}equals(other){if(other===this)return true;const comp=new Matrix(other);return closeEnough(this.a,comp.a)&&closeEnough(this.b,comp.b)&&closeEnough(this.c,comp.c)&&closeEnough(this.d,comp.d)&&closeEnough(this.e,comp.e)&&closeEnough(this.f,comp.f)}flip(axis,around){return this.clone().flipO(axis,around)}flipO(axis,around){return axis==="x"?this.scaleO(-1,1,around,0):axis==="y"?this.scaleO(1,-1,0,around):this.scaleO(-1,-1,axis,around||axis)}init(source){const base=Matrix.fromArray([1,0,0,1,0,0]);source=source instanceof Element?source.matrixify():typeof source==="string"?Matrix.fromArray(source.split(delimiter).map(parseFloat)):Array.isArray(source)?Matrix.fromArray(source):typeof source==="object"&&Matrix.isMatrixLike(source)?source:typeof source==="object"?(new Matrix).transform(source):arguments.length===6?Matrix.fromArray([].slice.call(arguments)):base;this.a=source.a!=null?source.a:base.a;this.b=source.b!=null?source.b:base.b;this.c=source.c!=null?source.c:base.c;this.d=source.d!=null?source.d:base.d;this.e=source.e!=null?source.e:base.e;this.f=source.f!=null?source.f:base.f;return this}inverse(){return this.clone().inverseO()}inverseO(){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const det=a*d-b*c;if(!det)throw new Error("Cannot invert "+this);const na=d/det;const nb=-b/det;const nc=-c/det;const nd=a/det;const ne=-(na*e+nc*f);const nf=-(nb*e+nd*f);this.a=na;this.b=nb;this.c=nc;this.d=nd;this.e=ne;this.f=nf;return this}lmultiply(matrix){return this.clone().lmultiplyO(matrix)}lmultiplyO(matrix){const r=this;const l=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}multiply(matrix){return this.clone().multiplyO(matrix)}multiplyO(matrix){const l=this;const r=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}rotate(r,cx,cy){return this.clone().rotateO(r,cx,cy)}rotateO(r,cx=0,cy=0){r=radians(r);const cos=Math.cos(r);const sin=Math.sin(r);const{a,b,c,d,e,f}=this;this.a=a*cos-b*sin;this.b=b*cos+a*sin;this.c=c*cos-d*sin;this.d=d*cos+c*sin;this.e=e*cos-f*sin+cy*sin-cx*cos+cx;this.f=f*cos+e*sin-cx*sin-cy*cos+cy;return this}scale(x,y,cx,cy){return this.clone().scaleO(...arguments)}scaleO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}const{a,b,c,d,e,f}=this;this.a=a*x;this.b=b*y;this.c=c*x;this.d=d*y;this.e=e*x-cx*x+cx;this.f=f*y-cy*y+cy;return this}shear(a,cx,cy){return this.clone().shearO(a,cx,cy)}shearO(lx,cx=0,cy=0){const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.c=c+d*lx;this.e=e+f*lx-cy*lx;return this}skew(x,y,cx,cy){return this.clone().skewO(...arguments)}skewO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}x=radians(x);y=radians(y);const lx=Math.tan(x);const ly=Math.tan(y);const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.b=b+a*ly;this.c=c+d*lx;this.d=d+c*ly;this.e=e+f*lx-cy*lx;this.f=f+e*ly-cx*ly;return this}skewX(x,cx,cy){return this.skew(x,0,cx,cy)}skewY(y,cx,cy){return this.skew(0,y,cx,cy)}toArray(){return[this.a,this.b,this.c,this.d,this.e,this.f]}toString(){return"matrix("+this.a+","+this.b+","+this.c+","+this.d+","+this.e+","+this.f+")"}transform(o){if(Matrix.isMatrixLike(o)){const matrix=new Matrix(o);return matrix.multiplyO(this)}const t=Matrix.formatTransforms(o);const current=this;const{x:ox,y:oy}=new Point(t.ox,t.oy).transform(current);const transformer=(new Matrix).translateO(t.rx,t.ry).lmultiplyO(current).translateO(-ox,-oy).scaleO(t.scaleX,t.scaleY).skewO(t.skewX,t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox,oy);if(isFinite(t.px)||isFinite(t.py)){const origin=new Point(ox,oy).transform(transformer);const dx=isFinite(t.px)?t.px-origin.x:0;const dy=isFinite(t.py)?t.py-origin.y:0;transformer.translateO(dx,dy)}transformer.translateO(t.tx,t.ty);return transformer}translate(x,y){return this.clone().translateO(x,y)}translateO(x,y){this.e+=x||0;this.f+=y||0;return this}valueOf(){return{a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}}function ctm(){return new Matrix(this.node.getCTM())}function screenCTM(){if(typeof this.isRoot==="function"&&!this.isRoot()){const rect=this.rect(1,1);const m=rect.node.getScreenCTM();rect.remove();return new Matrix(m)}return new Matrix(this.node.getScreenCTM())}register(Matrix,"Matrix");function parser(){if(!parser.nodes){const svg=makeInstance().size(2,0);svg.node.style.cssText=["opacity: 0","position: absolute","left: -100%","top: -100%","overflow: hidden"].join(";");svg.attr("focusable","false");svg.attr("aria-hidden","true");const path=svg.path().node;parser.nodes={svg:svg,path:path}}if(!parser.nodes.svg.node.parentNode){const b=globals.document.body||globals.document.documentElement;parser.nodes.svg.addTo(b)}return parser.nodes}function isNulledBox(box){return!box.width&&!box.height&&!box.x&&!box.y}function domContains(node){return node===globals.document||(globals.document.documentElement.contains||function(node){while(node.parentNode){node=node.parentNode}return node===globals.document}).call(globals.document.documentElement,node)}class Box{constructor(...args){this.init(...args)}addOffset(){this.x+=globals.window.pageXOffset;this.y+=globals.window.pageYOffset;return new Box(this)}init(source){const base=[0,0,0,0];source=typeof source==="string"?source.split(delimiter).map(parseFloat):Array.isArray(source)?source:typeof source==="object"?[source.left!=null?source.left:source.x,source.top!=null?source.top:source.y,source.width,source.height]:arguments.length===4?[].slice.call(arguments):base;this.x=source[0]||0;this.y=source[1]||0;this.width=this.w=source[2]||0;this.height=this.h=source[3]||0;this.x2=this.x+this.w;this.y2=this.y+this.h;this.cx=this.x+this.w/2;this.cy=this.y+this.h/2;return this}isNulled(){return isNulledBox(this)}merge(box){const x=Math.min(this.x,box.x);const y=Math.min(this.y,box.y);const width=Math.max(this.x+this.width,box.x+box.width)-x;const height=Math.max(this.y+this.height,box.y+box.height)-y;return new Box(x,y,width,height)}toArray(){return[this.x,this.y,this.width,this.height]}toString(){return this.x+" "+this.y+" "+this.width+" "+this.height}transform(m){if(!(m instanceof Matrix)){m=new Matrix(m)}let xMin=Infinity;let xMax=-Infinity;let yMin=Infinity;let yMax=-Infinity;const pts=[new Point(this.x,this.y),new Point(this.x2,this.y),new Point(this.x,this.y2),new Point(this.x2,this.y2)];pts.forEach(function(p){p=p.transform(m);xMin=Math.min(xMin,p.x);xMax=Math.max(xMax,p.x);yMin=Math.min(yMin,p.y);yMax=Math.max(yMax,p.y)});return new Box(xMin,yMin,xMax-xMin,yMax-yMin)}}function getBox(el,getBBoxFn,retry){let box;try{box=getBBoxFn(el.node);if(isNulledBox(box)&&!domContains(el.node)){throw new Error("Element not in the dom")}}catch(e){box=retry(el)}return box}function bbox(){const getBBox=node=>node.getBBox();const retry=el=>{try{const clone=el.clone().addTo(parser().svg).show();const box=clone.node.getBBox();clone.remove();return box}catch(e){throw new Error(`Getting bbox of element "${el.node.nodeName}" is not possible: ${e.toString()}`)}};const box=getBox(this,getBBox,retry);const bbox=new Box(box);return bbox}function rbox(el){const getRBox=node=>node.getBoundingClientRect();const retry=el=>{throw new Error(`Getting rbox of element "${el.node.nodeName}" is not possible`)};const box=getBox(this,getRBox,retry);const rbox=new Box(box);if(el){return rbox.transform(el.screenCTM().inverseO())}return rbox.addOffset()}function inside(x,y){const box=this.bbox();return x>box.x&&y>box.y&&x{return fnOrMethodName.call(el,el,i,arr)})}else{return this.map(el=>{return el[fnOrMethodName](...args)})}},toArray(){return Array.prototype.concat.apply([],this)}});const reserved=["toArray","constructor","each"];List.extend=function(methods){methods=methods.reduce((obj,name)=>{if(reserved.includes(name))return obj;if(name[0]==="_")return obj;obj[name]=function(...attrs){return this.each(name,...attrs)};return obj},{});extend([List],methods)};function baseFind(query,parent){return new List(map((parent||globals.document).querySelectorAll(query),function(node){return adopt(node)}))}function find(query){return baseFind(query,this.node)}function findOne(query){return adopt(this.node.querySelector(query))}let listenerId=0;const windowEvents={};function getEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(!n.events)n.events={};return n.events}function getEventTarget(instance){return instance.getEventTarget()}function clearEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(n.events)n.events={}}function on(node,events,listener,binding,options){const l=listener.bind(binding||node);const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);events=Array.isArray(events)?events:events.split(delimiter);if(!listener._svgjsListenerId){listener._svgjsListenerId=++listenerId}events.forEach(function(event){const ev=event.split(".")[0];const ns=event.split(".")[1]||"*";bag[ev]=bag[ev]||{};bag[ev][ns]=bag[ev][ns]||{};bag[ev][ns][listener._svgjsListenerId]=l;n.addEventListener(ev,l,options||false)})}function off(node,events,listener,options){const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);if(typeof listener==="function"){listener=listener._svgjsListenerId;if(!listener)return}events=Array.isArray(events)?events:(events||"").split(delimiter);events.forEach(function(event){const ev=event&&event.split(".")[0];const ns=event&&event.split(".")[1];let namespace,l;if(listener){if(bag[ev]&&bag[ev][ns||"*"]){n.removeEventListener(ev,bag[ev][ns||"*"][listener],options||false);delete bag[ev][ns||"*"][listener]}}else if(ev&&ns){if(bag[ev]&&bag[ev][ns]){for(l in bag[ev][ns]){off(n,[ev,ns].join("."),l)}delete bag[ev][ns]}}else if(ns){for(event in bag){for(namespace in bag[event]){if(ns===namespace){off(n,[event,ns].join("."))}}}}else if(ev){if(bag[ev]){for(namespace in bag[ev]){off(n,[ev,namespace].join("."))}delete bag[ev]}}else{for(event in bag){off(n,event)}clearEvents(instance)}})}function dispatch(node,event,data,options){const n=getEventTarget(node);if(event instanceof globals.window.Event){n.dispatchEvent(event)}else{event=new globals.window.CustomEvent(event,{detail:data,cancelable:true,...options});n.dispatchEvent(event)}return event}class EventTarget extends Base{addEventListener(){}dispatch(event,data,options){return dispatch(this,event,data,options)}dispatchEvent(event){const bag=this.getEventHolder().events;if(!bag)return true;const events=bag[event.type];for(const i in events){for(const j in events[i]){events[i][j](event)}}return!event.defaultPrevented}fire(event,data,options){this.dispatch(event,data,options);return this}getEventHolder(){return this}getEventTarget(){return this}off(event,listener,options){off(this,event,listener,options);return this}on(event,listener,binding,options){on(this,event,listener,binding,options);return this}removeEventListener(){}}register(EventTarget,"EventTarget");function noop(){}const timeline={duration:400,ease:">",delay:0};const attrs={"fill-opacity":1,"stroke-opacity":1,"stroke-width":0,"stroke-linejoin":"miter","stroke-linecap":"butt",fill:"#000000",stroke:"#000000",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,"stop-opacity":1,"stop-color":"#000000","text-anchor":"start"};var defaults={__proto__:null,noop:noop,timeline:timeline,attrs:attrs};class SVGArray extends Array{constructor(...args){super(...args);this.init(...args)}clone(){return new this.constructor(this)}init(arr){if(typeof arr==="number")return this;this.length=0;this.push(...this.parse(arr));return this}parse(array=[]){if(array instanceof Array)return array;return array.trim().split(delimiter).map(parseFloat)}toArray(){return Array.prototype.concat.apply([],this)}toSet(){return new Set(this)}toString(){return this.join(" ")}valueOf(){const ret=[];ret.push(...this);return ret}}class SVGNumber{constructor(...args){this.init(...args)}convert(unit){return new SVGNumber(this.value,unit)}divide(number){number=new SVGNumber(number);return new SVGNumber(this/number,this.unit||number.unit)}init(value,unit){unit=Array.isArray(value)?value[1]:unit;value=Array.isArray(value)?value[0]:value;this.value=0;this.unit=unit||"";if(typeof value==="number"){this.value=isNaN(value)?0:!isFinite(value)?value<0?-34e37:+34e37:value}else if(typeof value==="string"){unit=value.match(numberAndUnit);if(unit){this.value=parseFloat(unit[1]);if(unit[5]==="%"){this.value/=100}else if(unit[5]==="s"){this.value*=1e3}this.unit=unit[5]}}else{if(value instanceof SVGNumber){this.value=value.valueOf();this.unit=value.unit}}return this}minus(number){number=new SVGNumber(number);return new SVGNumber(this-number,this.unit||number.unit)}plus(number){number=new SVGNumber(number);return new SVGNumber(this+number,this.unit||number.unit)}times(number){number=new SVGNumber(number);return new SVGNumber(this*number,this.unit||number.unit)}toArray(){return[this.value,this.unit]}toJSON(){return this.toString()}toString(){return(this.unit==="%"?~~(this.value*1e8)/1e6:this.unit==="s"?this.value/1e3:this.value)+this.unit}valueOf(){return this.value}}const hooks=[];function registerAttrHook(fn){hooks.push(fn)}function attr(attr,val,ns){if(attr==null){attr={};val=this.node.attributes;for(const node of val){attr[node.nodeName]=isNumber.test(node.nodeValue)?parseFloat(node.nodeValue):node.nodeValue}return attr}else if(attr instanceof Array){return attr.reduce((last,curr)=>{last[curr]=this.attr(curr);return last},{})}else if(typeof attr==="object"&&attr.constructor===Object){for(val in attr)this.attr(val,attr[val])}else if(val===null){this.node.removeAttribute(attr)}else if(val==null){val=this.node.getAttribute(attr);return val==null?attrs[attr]:isNumber.test(val)?parseFloat(val):val}else{val=hooks.reduce((_val,hook)=>{return hook(attr,_val,this)},val);if(typeof val==="number"){val=new SVGNumber(val)}else if(Color.isColor(val)){val=new Color(val)}else if(val.constructor===Array){val=new SVGArray(val)}if(attr==="leading"){if(this.leading){this.leading(val)}}else{typeof ns==="string"?this.node.setAttributeNS(ns,attr,val.toString()):this.node.setAttribute(attr,val.toString())}if(this.rebuild&&(attr==="font-size"||attr==="x")){this.rebuild()}}return this}class Dom extends EventTarget{constructor(node,attrs){super();this.node=node;this.type=node.nodeName;if(attrs&&node!==attrs){this.attr(attrs)}}add(element,i){element=makeInstance(element);if(element.removeNamespace&&this.node instanceof globals.window.SVGElement){element.removeNamespace()}if(i==null){this.node.appendChild(element.node)}else if(element.node!==this.node.childNodes[i]){this.node.insertBefore(element.node,this.node.childNodes[i])}return this}addTo(parent,i){return makeInstance(parent).put(this,i)}children(){return new List(map(this.node.children,function(node){return adopt(node)}))}clear(){while(this.node.hasChildNodes()){this.node.removeChild(this.node.lastChild)}return this}clone(deep=true){this.writeDataToDom();return new this.constructor(assignNewId(this.node.cloneNode(deep)))}each(block,deep){const children=this.children();let i,il;for(i=0,il=children.length;i=0}html(htmlOrFn,outerHTML){return this.xml(htmlOrFn,outerHTML,html)}id(id){if(typeof id==="undefined"&&!this.node.id){this.node.id=eid(this.type)}return this.attr("id",id)}index(element){return[].slice.call(this.node.childNodes).indexOf(element.node)}last(){return adopt(this.node.lastChild)}matches(selector){const el=this.node;const matcher=el.matches||el.matchesSelector||el.msMatchesSelector||el.mozMatchesSelector||el.webkitMatchesSelector||el.oMatchesSelector||null;return matcher&&matcher.call(el,selector)}parent(type){let parent=this;if(!parent.node.parentNode)return null;parent=adopt(parent.node.parentNode);if(!type)return parent;do{if(typeof type==="string"?parent.matches(type):parent instanceof type)return parent}while(parent=adopt(parent.node.parentNode));return parent}put(element,i){element=makeInstance(element);this.add(element,i);return element}putIn(parent,i){return makeInstance(parent).add(this,i)}remove(){if(this.parent()){this.parent().removeElement(this)}return this}removeElement(element){this.node.removeChild(element.node);return this}replace(element){element=makeInstance(element);if(this.node.parentNode){this.node.parentNode.replaceChild(element.node,this.node)}return element}round(precision=2,map=null){const factor=10**precision;const attrs=this.attr(map);for(const i in attrs){if(typeof attrs[i]==="number"){attrs[i]=Math.round(attrs[i]*factor)/factor}}this.attr(attrs);return this}svg(svgOrFn,outerSVG){return this.xml(svgOrFn,outerSVG,svg)}toString(){return this.id()}words(text){this.node.textContent=text;return this}wrap(node){const parent=this.parent();if(!parent){return this.addTo(node)}const position=parent.index(this);return parent.put(node,position).put(this)}writeDataToDom(){this.each(function(){this.writeDataToDom()});return this}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){outerXML=outerXML==null?true:outerXML;this.writeDataToDom();let current=this;if(xmlOrFn!=null){current=adopt(current.node.cloneNode(true));if(outerXML){const result=xmlOrFn(current);current=result||current;if(result===false)return""}current.each(function(){const result=xmlOrFn(this);const _this=result||this;if(result===false){this.remove()}else if(result&&this!==_this){this.replace(_this)}},true)}return outerXML?current.node.outerHTML:current.node.innerHTML}outerXML=outerXML==null?false:outerXML;const well=create("wrapper",ns);const fragment=globals.document.createDocumentFragment();well.innerHTML=xmlOrFn;for(let len=well.children.length;len--;){fragment.appendChild(well.firstElementChild)}const parent=this.parent();return outerXML?this.replace(fragment)&&parent:this.add(fragment)}}extend(Dom,{attr:attr,find:find,findOne:findOne});register(Dom,"Dom");class Element extends Dom{constructor(node,attrs){super(node,attrs);this.dom={};this.node.instance=this;if(node.hasAttribute("svgjs:data")){this.setData(JSON.parse(node.getAttribute("svgjs:data"))||{})}}center(x,y){return this.cx(x).cy(y)}cx(x){return x==null?this.x()+this.width()/2:this.x(x-this.width()/2)}cy(y){return y==null?this.y()+this.height()/2:this.y(y-this.height()/2)}defs(){const root=this.root();return root&&root.defs()}dmove(x,y){return this.dx(x).dy(y)}dx(x=0){return this.x(new SVGNumber(x).plus(this.x()))}dy(y=0){return this.y(new SVGNumber(y).plus(this.y()))}getEventHolder(){return this}height(height){return this.attr("height",height)}move(x,y){return this.x(x).y(y)}parents(until=this.root()){const isSelector=typeof until==="string";if(!isSelector){until=makeInstance(until)}const parents=new List;let parent=this;while((parent=parent.parent())&&parent.node!==globals.document&&parent.nodeName!=="#document-fragment"){parents.push(parent);if(!isSelector&&parent.node===until.node){break}if(isSelector&&parent.matches(until)){break}if(parent.node===this.root().node){return null}}return parents}reference(attr){attr=this.attr(attr);if(!attr)return null;const m=(attr+"").match(reference);return m?makeInstance(m[1]):null}root(){const p=this.parent(getClass(root));return p&&p.root()}setData(o){this.dom=o;return this}size(width,height){const p=proportionalSize(this,width,height);return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height))}width(width){return this.attr("width",width)}writeDataToDom(){this.node.removeAttribute("svgjs:data");if(Object.keys(this.dom).length){this.node.setAttribute("svgjs:data",JSON.stringify(this.dom))}return super.writeDataToDom()}x(x){return this.attr("x",x)}y(y){return this.attr("y",y)}}extend(Element,{bbox:bbox,rbox:rbox,inside:inside,point:point,ctm:ctm,screenCTM:screenCTM});register(Element,"Element");const sugar={stroke:["color","width","opacity","linecap","linejoin","miterlimit","dasharray","dashoffset"],fill:["color","opacity","rule"],prefix:function(t,a){return a==="color"?t:t+"-"+a}};["fill","stroke"].forEach(function(m){const extension={};let i;extension[m]=function(o){if(typeof o==="undefined"){return this.attr(m)}if(typeof o==="string"||o instanceof Color||Color.isRgb(o)||o instanceof Element){this.attr(m,o)}else{for(i=sugar[m].length-1;i>=0;i--){if(o[sugar[m][i]]!=null){this.attr(sugar.prefix(m,sugar[m][i]),o[sugar[m][i]])}}}return this};registerMethods(["Element","Runner"],extension)});registerMethods(["Element","Runner"],{matrix:function(mat,b,c,d,e,f){if(mat==null){return new Matrix(this)}return this.attr("transform",new Matrix(mat,b,c,d,e,f))},rotate:function(angle,cx,cy){return this.transform({rotate:angle,ox:cx,oy:cy},true)},skew:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({skew:x,ox:y,oy:cx},true):this.transform({skew:[x,y],ox:cx,oy:cy},true)},shear:function(lam,cx,cy){return this.transform({shear:lam,ox:cx,oy:cy},true)},scale:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({scale:x,ox:y,oy:cx},true):this.transform({scale:[x,y],ox:cx,oy:cy},true)},translate:function(x,y){return this.transform({translate:[x,y]},true)},relative:function(x,y){return this.transform({relative:[x,y]},true)},flip:function(direction="both",origin="center"){if("xybothtrue".indexOf(direction)===-1){origin=direction;direction="both"}return this.transform({flip:direction,origin:origin},true)},opacity:function(value){return this.attr("opacity",value)}});registerMethods("radius",{radius:function(x,y=x){const type=(this._element||this).type;return type==="radialGradient"?this.attr("r",new SVGNumber(x)):this.rx(x).ry(y)}});registerMethods("Path",{length:function(){return this.node.getTotalLength()},pointAt:function(length){return new Point(this.node.getPointAtLength(length))}});registerMethods(["Element","Runner"],{font:function(a,v){if(typeof a==="object"){for(v in a)this.font(v,a[v]);return this}return a==="leading"?this.leading(v):a==="anchor"?this.attr("text-anchor",v):a==="size"||a==="family"||a==="weight"||a==="stretch"||a==="variant"||a==="style"?this.attr("font-"+a,v):this.attr(a,v)}});const methods=["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","mouseenter","mouseleave","touchstart","touchmove","touchleave","touchend","touchcancel"].reduce(function(last,event){const fn=function(f){if(f===null){this.off(event)}else{this.on(event,f)}return this};last[event]=fn;return last},{});registerMethods("Element",methods);function untransform(){return this.attr("transform",null)}function matrixify(){const matrix=(this.attr("transform")||"").split(transforms).slice(0,-1).map(function(str){const kv=str.trim().split("(");return[kv[0],kv[1].split(delimiter).map(function(str){return parseFloat(str)})]}).reverse().reduce(function(matrix,transform){if(transform[0]==="matrix"){return matrix.lmultiply(Matrix.fromArray(transform[1]))}return matrix[transform[0]].apply(matrix,transform[1])},new Matrix);return matrix}function toParent(parent,i){if(this===parent)return this;const ctm=this.screenCTM();const pCtm=parent.screenCTM().inverse();this.addTo(parent,i).untransform().transform(pCtm.multiply(ctm));return this}function toRoot(i){return this.toParent(this.root(),i)}function transform(o,relative){if(o==null||typeof o==="string"){const decomposed=new Matrix(this).decompose();return o==null?decomposed:decomposed[o]}if(!Matrix.isMatrixLike(o)){o={...o,origin:getOrigin(o,this)}}const cleanRelative=relative===true?this:relative||false;const result=new Matrix(cleanRelative).transform(o);return this.attr("transform",result)}registerMethods("Element",{untransform:untransform,matrixify:matrixify,toParent:toParent,toRoot:toRoot,transform:transform});class Container extends Element{flatten(parent=this,index){this.each(function(){if(this instanceof Container){return this.flatten().ungroup()}});return this}ungroup(parent=this.parent(),index=parent.index(this)){index=index===-1?parent.children().length:index;this.each(function(i,children){return children[children.length-i-1].toParent(parent,index)});return this.remove()}}register(Container,"Container");class Defs extends Container{constructor(node,attrs=node){super(nodeOrNew("defs",node),attrs)}flatten(){return this}ungroup(){return this}}register(Defs,"Defs");class Shape extends Element{}register(Shape,"Shape");function rx(rx){return this.attr("rx",rx)}function ry(ry){return this.attr("ry",ry)}function x$3(x){return x==null?this.cx()-this.rx():this.cx(x+this.rx())}function y$3(y){return y==null?this.cy()-this.ry():this.cy(y+this.ry())}function cx$1(x){return this.attr("cx",x)}function cy$1(y){return this.attr("cy",y)}function width$2(width){return width==null?this.rx()*2:this.rx(new SVGNumber(width).divide(2))}function height$2(height){return height==null?this.ry()*2:this.ry(new SVGNumber(height).divide(2))}var circled={__proto__:null,rx:rx,ry:ry,x:x$3,y:y$3,cx:cx$1,cy:cy$1,width:width$2,height:height$2};class Ellipse extends Shape{constructor(node,attrs=node){super(nodeOrNew("ellipse",node),attrs)}size(width,height){const p=proportionalSize(this,width,height);return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2))}}extend(Ellipse,circled);registerMethods("Container",{ellipse:wrapWithAttrCheck(function(width=0,height=width){return this.put(new Ellipse).size(width,height).move(0,0)})});register(Ellipse,"Ellipse");class Fragment extends Dom{constructor(node=globals.document.createDocumentFragment()){super(node)}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){const wrapper=new Dom(create("wrapper",ns));wrapper.add(this.node.cloneNode(true));return wrapper.xml(false,ns)}return super.xml(xmlOrFn,false,ns)}}register(Fragment,"Fragment");function from(x,y){return(this._element||this).type==="radialGradient"?this.attr({fx:new SVGNumber(x),fy:new SVGNumber(y)}):this.attr({x1:new SVGNumber(x),y1:new SVGNumber(y)})}function to(x,y){return(this._element||this).type==="radialGradient"?this.attr({cx:new SVGNumber(x),cy:new SVGNumber(y)}):this.attr({x2:new SVGNumber(x),y2:new SVGNumber(y)})}var gradiented={__proto__:null,from:from,to:to};class Gradient extends Container{constructor(type,attrs){super(nodeOrNew(type+"Gradient",typeof type==="string"?null:type),attrs)}attr(a,b,c){if(a==="transform")a="gradientTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}extend(Gradient,gradiented);registerMethods({Container:{gradient(...args){return this.defs().gradient(...args)}},Defs:{gradient:wrapWithAttrCheck(function(type,block){return this.put(new Gradient(type)).update(block)})}});register(Gradient,"Gradient");class Pattern extends Container{constructor(node,attrs=node){super(nodeOrNew("pattern",node),attrs)}attr(a,b,c){if(a==="transform")a="patternTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}registerMethods({Container:{pattern(...args){return this.defs().pattern(...args)}},Defs:{pattern:wrapWithAttrCheck(function(width,height,block){return this.put(new Pattern).update(block).attr({x:0,y:0,width:width,height:height,patternUnits:"userSpaceOnUse"})})}});register(Pattern,"Pattern");class Image extends Shape{constructor(node,attrs=node){super(nodeOrNew("image",node),attrs)}load(url,callback){if(!url)return this;const img=new globals.window.Image;on(img,"load",function(e){const p=this.parent(Pattern);if(this.width()===0&&this.height()===0){this.size(img.width,img.height)}if(p instanceof Pattern){if(p.width()===0&&p.height()===0){p.size(this.width(),this.height())}}if(typeof callback==="function"){callback.call(this,e)}},this);on(img,"load error",function(){off(img)});return this.attr("href",img.src=url,xlink)}}registerAttrHook(function(attr,val,_this){if(attr==="fill"||attr==="stroke"){if(isImage.test(val)){val=_this.root().defs().image(val)}}if(val instanceof Image){val=_this.root().defs().pattern(0,0,pattern=>{pattern.add(val)})}return val});registerMethods({Container:{image:wrapWithAttrCheck(function(source,callback){return this.put(new Image).size(0,0).load(source,callback)})}});register(Image,"Image");class PointArray extends SVGArray{bbox(){let maxX=-Infinity;let maxY=-Infinity;let minX=Infinity;let minY=Infinity;this.forEach(function(el){maxX=Math.max(el[0],maxX);maxY=Math.max(el[1],maxY);minX=Math.min(el[0],minX);minY=Math.min(el[1],minY)});return new Box(minX,minY,maxX-minX,maxY-minY)}move(x,y){const box=this.bbox();x-=box.x;y-=box.y;if(!isNaN(x)&&!isNaN(y)){for(let i=this.length-1;i>=0;i--){this[i]=[this[i][0]+x,this[i][1]+y]}}return this}parse(array=[0,0]){const points=[];if(array instanceof Array){array=Array.prototype.concat.apply([],array)}else{array=array.trim().split(delimiter).map(parseFloat)}if(array.length%2!==0)array.pop();for(let i=0,len=array.length;i=0;i--){if(box.width)this[i][0]=(this[i][0]-box.x)*width/box.width+box.x;if(box.height)this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}return this}toLine(){return{x1:this[0][0],y1:this[0][1],x2:this[1][0],y2:this[1][1]}}toString(){const array=[];for(let i=0,il=this.length;i":function(pos){return-Math.cos(pos*Math.PI)/2+.5},">":function(pos){return Math.sin(pos*Math.PI/2)},"<":function(pos){return-Math.cos(pos*Math.PI/2)+1},bezier:function(x1,y1,x2,y2){return function(t){if(t<0){if(x1>0){return y1/x1*t}else if(x2>0){return y2/x2*t}else{return 0}}else if(t>1){if(x2<1){return(1-y2)/(1-x2)*t+(y2-x2)/(1-x2)}else if(x1<1){return(1-y1)/(1-x1)*t+(y1-x1)/(1-x1)}else{return 1}}else{return 3*t*(1-t)**2*y1+3*t**2*(1-t)*y2+t**3}}},steps:function(steps,stepPosition="end"){stepPosition=stepPosition.split("-").reverse()[0];let jumps=steps;if(stepPosition==="none"){--jumps}else if(stepPosition==="both"){++jumps}return(t,beforeFlag=false)=>{let step=Math.floor(t*steps);const jumping=t*step%1===0;if(stepPosition==="start"||stepPosition==="both"){++step}if(beforeFlag&&jumping){--step}if(t>=0&&step<0){step=0}if(t<=1&&step>jumps){step=jumps}return step/jumps}}};class Stepper{done(){return false}}class Ease extends Stepper{constructor(fn=timeline.ease){super();this.ease=easing[fn]||fn}step(from,to,pos){if(typeof from!=="number"){return pos<1?from:to}return from+(to-from)*this.ease(pos)}}class Controller extends Stepper{constructor(fn){super();this.stepper=fn}done(c){return c.done}step(current,target,dt,c){return this.stepper(current,target,dt,c)}}function recalculate(){const duration=(this._duration||500)/1e3;const overshoot=this._overshoot||0;const eps=1e-10;const pi=Math.PI;const os=Math.log(overshoot/100+eps);const zeta=-os/Math.sqrt(pi*pi+os*os);const wn=3.9/(zeta*duration);this.d=2*zeta*wn;this.k=wn*wn}class Spring extends Controller{constructor(duration=500,overshoot=0){super();this.duration(duration).overshoot(overshoot)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;if(dt>100)dt=16;dt/=1e3;const velocity=c.velocity||0;const acceleration=-this.d*velocity-this.k*(current-target);const newPosition=current+velocity*dt+acceleration*dt*dt/2;c.velocity=velocity+acceleration*dt;c.done=Math.abs(target-newPosition)+Math.abs(velocity)<.002;return c.done?target:newPosition}}extend(Spring,{duration:makeSetterGetter("_duration",recalculate),overshoot:makeSetterGetter("_overshoot",recalculate)});class PID extends Controller{constructor(p=.1,i=.01,d=0,windup=1e3){super();this.p(p).i(i).d(d).windup(windup)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;const p=target-current;let i=(c.integral||0)+p*dt;const d=(p-(c.error||0))/dt;const windup=this._windup;if(windup!==false){i=Math.max(-windup,Math.min(i,windup))}c.error=p;c.integral=i;c.done=Math.abs(p)<.001;return c.done?target:current+(this.P*p+this.I*i+this.D*d)}}extend(PID,{windup:makeSetterGetter("_windup"),p:makeSetterGetter("P"),i:makeSetterGetter("I"),d:makeSetterGetter("D")});const segmentParameters={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};const pathHandlers={M:function(c,p,p0){p.x=p0.x=c[0];p.y=p0.y=c[1];return["M",p.x,p.y]},L:function(c,p){p.x=c[0];p.y=c[1];return["L",c[0],c[1]]},H:function(c,p){p.x=c[0];return["H",c[0]]},V:function(c,p){p.y=c[0];return["V",c[0]]},C:function(c,p){p.x=c[4];p.y=c[5];return["C",c[0],c[1],c[2],c[3],c[4],c[5]]},S:function(c,p){p.x=c[2];p.y=c[3];return["S",c[0],c[1],c[2],c[3]]},Q:function(c,p){p.x=c[2];p.y=c[3];return["Q",c[0],c[1],c[2],c[3]]},T:function(c,p){p.x=c[0];p.y=c[1];return["T",c[0],c[1]]},Z:function(c,p,p0){p.x=p0.x;p.y=p0.y;return["Z"]},A:function(c,p){p.x=c[5];p.y=c[6];return["A",c[0],c[1],c[2],c[3],c[4],c[5],c[6]]}};const mlhvqtcsaz="mlhvqtcsaz".split("");for(let i=0,il=mlhvqtcsaz.length;i=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]+=x;this[i][2]+=y}else if(l==="H"){this[i][1]+=x}else if(l==="V"){this[i][1]+=y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]+=x;this[i][2]+=y;this[i][3]+=x;this[i][4]+=y;if(l==="C"){this[i][5]+=x;this[i][6]+=y}}else if(l==="A"){this[i][6]+=x;this[i][7]+=y}}}return this}parse(d="M0 0"){if(Array.isArray(d)){d=Array.prototype.concat.apply([],d).toString()}return pathParser(d)}size(width,height){const box=this.bbox();let i,l;box.width=box.width===0?1:box.width;box.height=box.height===0?1:box.height;for(i=this.length-1;i>=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y}else if(l==="H"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x}else if(l==="V"){this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y;this[i][3]=(this[i][3]-box.x)*width/box.width+box.x;this[i][4]=(this[i][4]-box.y)*height/box.height+box.y;if(l==="C"){this[i][5]=(this[i][5]-box.x)*width/box.width+box.x;this[i][6]=(this[i][6]-box.y)*height/box.height+box.y}}else if(l==="A"){this[i][1]=this[i][1]*width/box.width;this[i][2]=this[i][2]*height/box.height;this[i][6]=(this[i][6]-box.x)*width/box.width+box.x;this[i][7]=(this[i][7]-box.y)*height/box.height+box.y}}return this}toString(){return arrayToString(this)}}const getClassForType=value=>{const type=typeof value;if(type==="number"){return SVGNumber}else if(type==="string"){if(Color.isColor(value)){return Color}else if(delimiter.test(value)){return isPathLetter.test(value)?PathArray:SVGArray}else if(numberAndUnit.test(value)){return SVGNumber}else{return NonMorphable}}else if(morphableTypes.indexOf(value.constructor)>-1){return value.constructor}else if(Array.isArray(value)){return SVGArray}else if(type==="object"){return ObjectBag}else{return NonMorphable}};class Morphable{constructor(stepper){this._stepper=stepper||new Ease("-");this._from=null;this._to=null;this._type=null;this._context=null;this._morphObj=null}at(pos){return this._morphObj.morph(this._from,this._to,pos,this._stepper,this._context)}done(){const complete=this._context.map(this._stepper.done).reduce(function(last,curr){return last&&curr},true);return complete}from(val){if(val==null){return this._from}this._from=this._set(val);return this}stepper(stepper){if(stepper==null)return this._stepper;this._stepper=stepper;return this}to(val){if(val==null){return this._to}this._to=this._set(val);return this}type(type){if(type==null){return this._type}this._type=type;return this}_set(value){if(!this._type){this.type(getClassForType(value))}let result=new this._type(value);if(this._type===Color){result=this._to?result[this._to[4]]():this._from?result[this._from[4]]():result}if(this._type===ObjectBag){result=this._to?result.align(this._to):this._from?result.align(this._from):result}result=result.toConsumable();this._morphObj=this._morphObj||new this._type;this._context=this._context||Array.apply(null,Array(result.length)).map(Object).map(function(o){o.done=true;return o});return result}}class NonMorphable{constructor(...args){this.init(...args)}init(val){val=Array.isArray(val)?val[0]:val;this.value=val;return this}toArray(){return[this.value]}valueOf(){return this.value}}class TransformBag{constructor(...args){this.init(...args)}init(obj){if(Array.isArray(obj)){obj={scaleX:obj[0],scaleY:obj[1],shear:obj[2],rotate:obj[3],translateX:obj[4],translateY:obj[5],originX:obj[6],originY:obj[7]}}Object.assign(this,TransformBag.defaults,obj);return this}toArray(){const v=this;return[v.scaleX,v.scaleY,v.shear,v.rotate,v.translateX,v.translateY,v.originX,v.originY]}}TransformBag.defaults={scaleX:1,scaleY:1,shear:0,rotate:0,translateX:0,translateY:0,originX:0,originY:0};const sortByKey=(a,b)=>{return a[0]b[0]?1:0};class ObjectBag{constructor(...args){this.init(...args)}align(other){const values=this.values;for(let i=0,il=values.length;ilast.concat(curr),[]);return this}toArray(){return this.values}valueOf(){const obj={};const arr=this.values;while(arr.length){const key=arr.shift();const Type=arr.shift();const num=arr.shift();const values=arr.splice(0,num);obj[key]=new Type(values)}return obj}}const morphableTypes=[NonMorphable,TransformBag,ObjectBag];function registerMorphableType(type=[]){morphableTypes.push(...[].concat(type))}function makeMorphable(){extend(morphableTypes,{to(val){return(new Morphable).type(this.constructor).from(this.toArray()).to(val)},fromArray(arr){this.init(arr);return this},toConsumable(){return this.toArray()},morph(from,to,pos,stepper,context){const mapper=function(i,index){return stepper.step(i,to[index],pos,context[index],context)};return this.fromArray(from.map(mapper))}})}class Path extends Shape{constructor(node,attrs=node){super(nodeOrNew("path",node),attrs)}array(){return this._array||(this._array=new PathArray(this.attr("d")))}clear(){delete this._array;return this}height(height){return height==null?this.bbox().height:this.size(this.bbox().width,height)}move(x,y){return this.attr("d",this.array().move(x,y))}plot(d){return d==null?this.array():this.clear().attr("d",typeof d==="string"?d:this._array=new PathArray(d))}size(width,height){const p=proportionalSize(this,width,height);return this.attr("d",this.array().size(p.width,p.height))}width(width){return width==null?this.bbox().width:this.size(width,this.bbox().height)}x(x){return x==null?this.bbox().x:this.move(x,this.bbox().y)}y(y){return y==null?this.bbox().y:this.move(this.bbox().x,y)}}Path.prototype.MorphArray=PathArray;registerMethods({Container:{path:wrapWithAttrCheck(function(d){return this.put(new Path).plot(d||new PathArray)})}});register(Path,"Path");function array(){return this._array||(this._array=new PointArray(this.attr("points")))}function clear(){delete this._array;return this}function move$2(x,y){return this.attr("points",this.array().move(x,y))}function plot(p){return p==null?this.array():this.clear().attr("points",typeof p==="string"?p:this._array=new PointArray(p))}function size$1(width,height){const p=proportionalSize(this,width,height);return this.attr("points",this.array().size(p.width,p.height))}var poly={__proto__:null,array:array,clear:clear,move:move$2,plot:plot,size:size$1};class Polygon extends Shape{constructor(node,attrs=node){super(nodeOrNew("polygon",node),attrs)}}registerMethods({Container:{polygon:wrapWithAttrCheck(function(p){return this.put(new Polygon).plot(p||new PointArray)})}});extend(Polygon,pointed);extend(Polygon,poly);register(Polygon,"Polygon");class Polyline extends Shape{constructor(node,attrs=node){super(nodeOrNew("polyline",node),attrs)}}registerMethods({Container:{polyline:wrapWithAttrCheck(function(p){return this.put(new Polyline).plot(p||new PointArray)})}});extend(Polyline,pointed);extend(Polyline,poly);register(Polyline,"Polyline");class Rect extends Shape{constructor(node,attrs=node){super(nodeOrNew("rect",node),attrs)}}extend(Rect,{rx:rx,ry:ry});registerMethods({Container:{rect:wrapWithAttrCheck(function(width,height){return this.put(new Rect).size(width,height)})}});register(Rect,"Rect");class Queue{constructor(){this._first=null;this._last=null}first(){return this._first&&this._first.value}last(){return this._last&&this._last.value}push(value){const item=typeof value.next!=="undefined"?value:{value:value,next:null,prev:null};if(this._last){item.prev=this._last;this._last.next=item;this._last=item}else{this._last=item;this._first=item}return item}remove(item){if(item.prev)item.prev.next=item.next;if(item.next)item.next.prev=item.prev;if(item===this._last)this._last=item.prev;if(item===this._first)this._first=item.next;item.prev=null;item.next=null}shift(){const remove=this._first;if(!remove)return null;this._first=remove.next;if(this._first)this._first.prev=null;this._last=this._first?this._last:null;return remove.value}}const Animator={nextDraw:null,frames:new Queue,timeouts:new Queue,immediates:new Queue,timer:()=>globals.window.performance||globals.window.Date,transforms:[],frame(fn){const node=Animator.frames.push({run:fn});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},timeout(fn,delay){delay=delay||0;const time=Animator.timer().now()+delay;const node=Animator.timeouts.push({run:fn,time:time});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},immediate(fn){const node=Animator.immediates.push(fn);if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},cancelFrame(node){node!=null&&Animator.frames.remove(node)},clearTimeout(node){node!=null&&Animator.timeouts.remove(node)},cancelImmediate(node){node!=null&&Animator.immediates.remove(node)},_draw(now){let nextTimeout=null;const lastTimeout=Animator.timeouts.last();while(nextTimeout=Animator.timeouts.shift()){if(now>=nextTimeout.time){nextTimeout.run()}else{Animator.timeouts.push(nextTimeout)}if(nextTimeout===lastTimeout)break}let nextFrame=null;const lastFrame=Animator.frames.last();while(nextFrame!==lastFrame&&(nextFrame=Animator.frames.shift())){nextFrame.run(now)}let nextImmediate=null;while(nextImmediate=Animator.immediates.shift()){nextImmediate()}Animator.nextDraw=Animator.timeouts.first()||Animator.frames.first()?globals.window.requestAnimationFrame(Animator._draw):null}};const makeSchedule=function(runnerInfo){const start=runnerInfo.start;const duration=runnerInfo.runner.duration();const end=start+duration;return{start:start,duration:duration,end:end,runner:runnerInfo.runner}};const defaultSource=function(){const w=globals.window;return(w.performance||w.Date).now()};class Timeline extends EventTarget{constructor(timeSource=defaultSource){super();this._timeSource=timeSource;this._startTime=0;this._speed=1;this._persist=0;this._nextFrame=null;this._paused=true;this._runners=[];this._runnerIds=[];this._lastRunnerId=-1;this._time=0;this._lastSourceTime=0;this._lastStepTime=0;this._step=this._stepFn.bind(this,false);this._stepImmediate=this._stepFn.bind(this,true)}active(){return!!this._nextFrame}finish(){this.time(this.getEndTimeOfTimeline()+1);return this.pause()}getEndTime(){const lastRunnerInfo=this.getLastRunnerInfo();const lastDuration=lastRunnerInfo?lastRunnerInfo.runner.duration():0;const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;return lastStartTime+lastDuration}getEndTimeOfTimeline(){const endTimes=this._runners.map(i=>i.start+i.runner.duration());return Math.max(0,...endTimes)}getLastRunnerInfo(){return this.getRunnerInfoById(this._lastRunnerId)}getRunnerInfoById(id){return this._runners[this._runnerIds.indexOf(id)]||null}pause(){this._paused=true;return this._continue()}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}play(){this._paused=false;return this.updateTime()._continue()}reverse(yes){const currentSpeed=this.speed();if(yes==null)return this.speed(-currentSpeed);const positive=Math.abs(currentSpeed);return this.speed(yes?-positive:positive)}schedule(runner,delay,when){if(runner==null){return this._runners.map(makeSchedule)}let absoluteStartTime=0;const endTime=this.getEndTime();delay=delay||0;if(when==null||when==="last"||when==="after"){absoluteStartTime=endTime}else if(when==="absolute"||when==="start"){absoluteStartTime=delay;delay=0}else if(when==="now"){absoluteStartTime=this._time}else if(when==="relative"){const runnerInfo=this.getRunnerInfoById(runner.id);if(runnerInfo){absoluteStartTime=runnerInfo.start+delay;delay=0}}else if(when==="with-last"){const lastRunnerInfo=this.getLastRunnerInfo();const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;absoluteStartTime=lastStartTime}else{throw new Error('Invalid value for the "when" parameter')}runner.unschedule();runner.timeline(this);const persist=runner.persist();const runnerInfo={persist:persist===null?this._persist:persist,start:absoluteStartTime+delay,runner:runner};this._lastRunnerId=runner.id;this._runners.push(runnerInfo);this._runners.sort((a,b)=>a.start-b.start);this._runnerIds=this._runners.map(info=>info.runner.id);this.updateTime()._continue();return this}seek(dt){return this.time(this._time+dt)}source(fn){if(fn==null)return this._timeSource;this._timeSource=fn;return this}speed(speed){if(speed==null)return this._speed;this._speed=speed;return this}stop(){this.time(0);return this.pause()}time(time){if(time==null)return this._time;this._time=time;return this._continue(true)}unschedule(runner){const index=this._runnerIds.indexOf(runner.id);if(index<0)return this;this._runners.splice(index,1);this._runnerIds.splice(index,1);runner.timeline(null);return this}updateTime(){if(!this.active()){this._lastSourceTime=this._timeSource()}return this}_continue(immediateStep=false){Animator.cancelFrame(this._nextFrame);this._nextFrame=null;if(immediateStep)return this._stepImmediate();if(this._paused)return this;this._nextFrame=Animator.frame(this._step);return this}_stepFn(immediateStep=false){const time=this._timeSource();let dtSource=time-this._lastSourceTime;if(immediateStep)dtSource=0;const dtTime=this._speed*dtSource+(this._time-this._lastStepTime);this._lastSourceTime=time;if(!immediateStep){this._time+=dtTime;this._time=this._time<0?0:this._time}this._lastStepTime=this._time;this.fire("time",this._time);for(let k=this._runners.length;k--;){const runnerInfo=this._runners[k];const runner=runnerInfo.runner;const dtToStart=this._time-runnerInfo.start;if(dtToStart<=0){runner.reset()}}let runnersLeft=false;for(let i=0,len=this._runners.length;i0){this._continue()}else{this.pause();this.fire("finished")}return this}}registerMethods({Element:{timeline:function(timeline){if(timeline==null){this._timeline=this._timeline||new Timeline;return this._timeline}else{this._timeline=timeline;return this}}}});class Runner extends EventTarget{constructor(options){super();this.id=Runner.id++;options=options==null?timeline.duration:options;options=typeof options==="function"?new Controller(options):options;this._element=null;this._timeline=null;this.done=false;this._queue=[];this._duration=typeof options==="number"&&options;this._isDeclarative=options instanceof Controller;this._stepper=this._isDeclarative?options:new Ease;this._history={};this.enabled=true;this._time=0;this._lastTime=0;this._reseted=true;this.transforms=new Matrix;this.transformId=1;this._haveReversed=false;this._reverse=false;this._loopsDone=0;this._swing=false;this._wait=0;this._times=1;this._frameId=null;this._persist=this._isDeclarative?true:null}static sanitise(duration,delay,when){let times=1;let swing=false;let wait=0;duration=duration||timeline.duration;delay=delay||timeline.delay;when=when||"last";if(typeof duration==="object"&&!(duration instanceof Stepper)){delay=duration.delay||delay;when=duration.when||when;swing=duration.swing||swing;times=duration.times||times;wait=duration.wait||wait;duration=duration.duration||timeline.duration}return{duration:duration,delay:delay,swing:swing,times:times,wait:wait,when:when}}active(enabled){if(enabled==null)return this.enabled;this.enabled=enabled;return this}addTransform(transform,index){this.transforms.lmultiplyO(transform);return this}after(fn){return this.on("finished",fn)}animate(duration,delay,when){const o=Runner.sanitise(duration,delay,when);const runner=new Runner(o.duration);if(this._timeline)runner.timeline(this._timeline);if(this._element)runner.element(this._element);return runner.loop(o).schedule(o.delay,o.when)}clearTransform(){this.transforms=new Matrix;return this}clearTransformsFromQueue(){if(!this.done||!this._timeline||!this._timeline._runnerIds.includes(this.id)){this._queue=this._queue.filter(item=>{return!item.isTransform})}}delay(delay){return this.animate(0,delay)}duration(){return this._times*(this._wait+this._duration)-this._wait}during(fn){return this.queue(null,fn)}ease(fn){this._stepper=new Ease(fn);return this}element(element){if(element==null)return this._element;this._element=element;element._prepareRunner();return this}finish(){return this.step(Infinity)}loop(times,swing,wait){if(typeof times==="object"){swing=times.swing;wait=times.wait;times=times.times}this._times=times||Infinity;this._swing=swing||false;this._wait=wait||0;if(this._times===true){this._times=Infinity}return this}loops(p){const loopDuration=this._duration+this._wait;if(p==null){const loopsDone=Math.floor(this._time/loopDuration);const relativeTime=this._time-loopsDone*loopDuration;const position=relativeTime/this._duration;return Math.min(loopsDone+position,this._times)}const whole=Math.floor(p);const partial=p%1;const time=loopDuration*whole+this._duration*partial;return this.time(time)}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}position(p){const x=this._time;const d=this._duration;const w=this._wait;const t=this._times;const s=this._swing;const r=this._reverse;let position;if(p==null){const f=function(x){const swinging=s*Math.floor(x%(2*(w+d))/(w+d));const backwards=swinging&&!r||!swinging&&r;const uncliped=Math.pow(-1,backwards)*(x%(w+d))/d+backwards;const clipped=Math.max(Math.min(uncliped,1),0);return clipped};const endTime=t*(w+d)-w;position=x<=0?Math.round(f(1e-5)):x=0;this._lastPosition=position;const duration=this.duration();const justStarted=this._lastTime<=0&&this._time>0;const justFinished=this._lastTime=duration;this._lastTime=this._time;if(justStarted){this.fire("start",this)}const declarative=this._isDeclarative;this.done=!declarative&&!justFinished&&this._time>=duration;this._reseted=false;let converged=false;if(running||declarative){this._initialise(running);this.transforms=new Matrix;converged=this._run(declarative?dt:position);this.fire("step",this)}this.done=this.done||converged&&declarative;if(justFinished){this.fire("finished",this)}return this}time(time){if(time==null){return this._time}const dt=time-this._time;this.step(dt);return this}timeline(timeline){if(typeof timeline==="undefined")return this._timeline;this._timeline=timeline;return this}unschedule(){const timeline=this.timeline();timeline&&timeline.unschedule(this);return this}_initialise(running){if(!running&&!this._isDeclarative)return;for(let i=0,len=this._queue.length;ilast.lmultiplyO(curr);const getRunnerTransform=runner=>runner.transforms;function mergeTransforms(){const runners=this._transformationRunners.runners;const netTransform=runners.map(getRunnerTransform).reduce(lmultiply,new Matrix);this.transform(netTransform);this._transformationRunners.merge();if(this._transformationRunners.length()===1){this._frameId=null}}class RunnerArray{constructor(){this.runners=[];this.ids=[]}add(runner){if(this.runners.includes(runner))return;const id=runner.id+1;this.runners.push(runner);this.ids.push(id);return this}clearBefore(id){const deleteCnt=this.ids.indexOf(id+1)||1;this.ids.splice(0,deleteCnt,0);this.runners.splice(0,deleteCnt,new FakeRunner).forEach(r=>r.clearTransformsFromQueue());return this}edit(id,newRunner){const index=this.ids.indexOf(id+1);this.ids.splice(index,1,id+1);this.runners.splice(index,1,newRunner);return this}getByID(id){return this.runners[this.ids.indexOf(id+1)]}length(){return this.ids.length}merge(){let lastRunner=null;for(let i=0;irunner.id<=current.id).map(getRunnerTransform).reduce(lmultiply,new Matrix)},_addRunner(runner){this._transformationRunners.add(runner);Animator.cancelImmediate(this._frameId);this._frameId=Animator.immediate(mergeTransforms.bind(this))},_prepareRunner(){if(this._frameId==null){this._transformationRunners=(new RunnerArray).add(new FakeRunner(new Matrix(this)))}}}});const difference=(a,b)=>a.filter(x=>!b.includes(x));extend(Runner,{attr(a,v){return this.styleAttr("attr",a,v)},css(s,v){return this.styleAttr("css",s,v)},styleAttr(type,nameOrAttrs,val){if(typeof nameOrAttrs==="string"){return this.styleAttr(type,{[nameOrAttrs]:val})}let attrs=nameOrAttrs;if(this._tryRetarget(type,attrs))return this;let morpher=new Morphable(this._stepper).to(attrs);let keys=Object.keys(attrs);this.queue(function(){morpher=morpher.from(this.element()[type](keys))},function(pos){this.element()[type](morpher.at(pos).valueOf());return morpher.done()},function(newToAttrs){const newKeys=Object.keys(newToAttrs);const differences=difference(newKeys,keys);if(differences.length){const addedFromAttrs=this.element()[type](differences);const oldFromAttrs=new ObjectBag(morpher.from()).valueOf();Object.assign(oldFromAttrs,addedFromAttrs);morpher.from(oldFromAttrs)}const oldToAttrs=new ObjectBag(morpher.to()).valueOf();Object.assign(oldToAttrs,newToAttrs);morpher.to(oldToAttrs);keys=newKeys;attrs=newToAttrs});this._rememberMorpher(type,morpher);return this},zoom(level,point){if(this._tryRetarget("zoom",level,point))return this;let morpher=new Morphable(this._stepper).to(new SVGNumber(level));this.queue(function(){morpher=morpher.from(this.element().zoom())},function(pos){this.element().zoom(morpher.at(pos),point);return morpher.done()},function(newLevel,newPoint){point=newPoint;morpher.to(newLevel)});this._rememberMorpher("zoom",morpher);return this},transform(transforms,relative,affine){relative=transforms.relative||relative;if(this._isDeclarative&&!relative&&this._tryRetarget("transform",transforms)){return this}const isMatrix=Matrix.isMatrixLike(transforms);affine=transforms.affine!=null?transforms.affine:affine!=null?affine:!isMatrix;const morpher=new Morphable(this._stepper).type(affine?TransformBag:Matrix);let origin;let element;let current;let currentAngle;let startTransform;function setup(){element=element||this.element();origin=origin||getOrigin(transforms,element);startTransform=new Matrix(relative?undefined:element);element._addRunner(this);if(!relative){element._clearTransformRunnersBefore(this)}}function run(pos){if(!relative)this.clearTransform();const{x,y}=new Point(origin).transform(element._currentTransform(this));let target=new Matrix({...transforms,origin:[x,y]});let start=this._isDeclarative&¤t?current:startTransform;if(affine){target=target.decompose(x,y);start=start.decompose(x,y);const rTarget=target.rotate;const rCurrent=start.rotate;const possibilities=[rTarget-360,rTarget,rTarget+360];const distances=possibilities.map(a=>Math.abs(a-rCurrent));const shortest=Math.min(...distances);const index=distances.indexOf(shortest);target.rotate=possibilities[index]}if(relative){if(!isMatrix){target.rotate=transforms.rotate||0}if(this._isDeclarative&¤tAngle){start.rotate=currentAngle}}morpher.from(start);morpher.to(target);const affineParameters=morpher.at(pos);currentAngle=affineParameters.rotate;current=new Matrix(affineParameters);this.addTransform(current);element._addRunner(this);return morpher.done()}function retarget(newTransforms){if((newTransforms.origin||"center").toString()!==(transforms.origin||"center").toString()){origin=getOrigin(newTransforms,element)}transforms={...newTransforms,origin:origin}}this.queue(setup,run,retarget,true);this._isDeclarative&&this._rememberMorpher("transform",morpher);return this},x(x,relative){return this._queueNumber("x",x)},y(y){return this._queueNumber("y",y)},dx(x=0){return this._queueNumberDelta("x",x)},dy(y=0){return this._queueNumberDelta("y",y)},dmove(x,y){return this.dx(x).dy(y)},_queueNumberDelta(method,to){to=new SVGNumber(to);if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);let from=null;this.queue(function(){from=this.element()[method]();morpher.from(from);morpher.to(from+to)},function(pos){this.element()[method](morpher.at(pos));return morpher.done()},function(newTo){morpher.to(from+new SVGNumber(newTo))});this._rememberMorpher(method,morpher);return this},_queueObject(method,to){if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);this.queue(function(){morpher.from(this.element()[method]())},function(pos){this.element()[method](morpher.at(pos));return morpher.done()});this._rememberMorpher(method,morpher);return this},_queueNumber(method,value){return this._queueObject(method,new SVGNumber(value))},cx(x){return this._queueNumber("cx",x)},cy(y){return this._queueNumber("cy",y)},move(x,y){return this.x(x).y(y)},center(x,y){return this.cx(x).cy(y)},size(width,height){let box;if(!width||!height){box=this._element.bbox()}if(!width){width=box.width/box.height*height}if(!height){height=box.height/box.width*width}return this.width(width).height(height)},width(width){return this._queueNumber("width",width)},height(height){return this._queueNumber("height",height)},plot(a,b,c,d){if(arguments.length===4){return this.plot([a,b,c,d])}if(this._tryRetarget("plot",a))return this;const morpher=new Morphable(this._stepper).type(this._element.MorphArray).to(a);this.queue(function(){morpher.from(this._element.array())},function(pos){this._element.plot(morpher.at(pos));return morpher.done()});this._rememberMorpher("plot",morpher);return this},leading(value){return this._queueNumber("leading",value)},viewbox(x,y,width,height){return this._queueObject("viewbox",new Box(x,y,width,height))},update(o){if(typeof o!=="object"){return this.update({offset:arguments[0],color:arguments[1],opacity:arguments[2]})}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",o.offset);return this}});extend(Runner,{rx:rx,ry:ry,from:from,to:to});register(Runner,"Runner");class Svg extends Container{constructor(node,attrs=node){super(nodeOrNew("svg",node),attrs);this.namespace()}defs(){if(!this.isRoot())return this.root().defs();return adopt(this.node.querySelector("defs"))||this.put(new Defs)}isRoot(){return!this.node.parentNode||!(this.node.parentNode instanceof globals.window.SVGElement)&&this.node.parentNode.nodeName!=="#document-fragment"}namespace(){if(!this.isRoot())return this.root().namespace();return this.attr({xmlns:svg,version:"1.1"}).attr("xmlns:xlink",xlink,xmlns).attr("xmlns:svgjs",svgjs,xmlns)}removeNamespace(){return this.attr({xmlns:null,version:null}).attr("xmlns:xlink",null,xmlns).attr("xmlns:svgjs",null,xmlns)}root(){if(this.isRoot())return this;return super.root()}}registerMethods({Container:{nested:wrapWithAttrCheck(function(){return this.put(new Svg)})}});register(Svg,"Svg",true);class Symbol extends Container{constructor(node,attrs=node){super(nodeOrNew("symbol",node),attrs)}}registerMethods({Container:{symbol:wrapWithAttrCheck(function(){return this.put(new Symbol)})}});register(Symbol,"Symbol");function plain(text){if(this._build===false){this.clear()}this.node.appendChild(globals.document.createTextNode(text));return this}function length(){return this.node.getComputedTextLength()}function x$1(x,box=this.bbox()){if(x==null){return box.x}return this.attr("x",this.attr("x")+x-box.x)}function y$1(y,box=this.bbox()){if(y==null){return box.y}return this.attr("y",this.attr("y")+y-box.y)}function move$1(x,y,box=this.bbox()){return this.x(x,box).y(y,box)}function cx(x,box=this.bbox()){if(x==null){return box.cx}return this.attr("x",this.attr("x")+x-box.cx)}function cy(y,box=this.bbox()){if(y==null){return box.cy}return this.attr("y",this.attr("y")+y-box.cy)}function center(x,y,box=this.bbox()){return this.cx(x,box).cy(y,box)}function ax(x){return this.attr("x",x)}function ay(y){return this.attr("y",y)}function amove(x,y){return this.ax(x).ay(y)}function build(build){this._build=!!build;return this}var textable={__proto__:null,plain:plain,length:length,x:x$1,y:y$1,move:move$1,cx:cx,cy:cy,center:center,ax:ax,ay:ay,amove:amove,build:build};class Text extends Shape{constructor(node,attrs=node){super(nodeOrNew("text",node),attrs);this.dom.leading=new SVGNumber(1.3);this._rebuild=true;this._build=false}leading(value){if(value==null){return this.dom.leading}this.dom.leading=new SVGNumber(value);return this.rebuild()}rebuild(rebuild){if(typeof rebuild==="boolean"){this._rebuild=rebuild}if(this._rebuild){const self=this;let blankLineOffset=0;const leading=this.dom.leading;this.each(function(i){const fontSize=globals.window.getComputedStyle(this.node).getPropertyValue("font-size");const dy=leading*new SVGNumber(fontSize);if(this.dom.newLined){this.attr("x",self.attr("x"));if(this.text()==="\n"){blankLineOffset+=dy}else{this.attr("dy",i?dy+blankLineOffset:0);blankLineOffset=0}}});this.fire("rebuild")}return this}setData(o){this.dom=o;this.dom.leading=new SVGNumber(o.leading||1.3);return this}text(text){if(text===undefined){const children=this.node.childNodes;let firstLine=0;text="";for(let i=0,len=children.length;i{let bbox;try{bbox=child.bbox()}catch(e){return}const m=new Matrix(child);const matrix=m.translate(dx,dy).transform(m.inverse());const p=new Point(bbox.x,bbox.y).transform(matrix);child.move(p.x,p.y)});return this}function dx(dx){return this.dmove(dx,0)}function dy(dy){return this.dmove(0,dy)}function height(height,box=this.bbox()){if(height==null)return box.height;return this.size(box.width,height,box)}function move(x=0,y=0,box=this.bbox()){const dx=x-box.x;const dy=y-box.y;return this.dmove(dx,dy)}function size(width,height,box=this.bbox()){const p=proportionalSize(this,width,height,box);const scaleX=p.width/box.width;const scaleY=p.height/box.height;this.children().forEach((child,i)=>{const o=new Point(box).transform(new Matrix(child).inverse());child.scale(scaleX,scaleY,o.x,o.y)});return this}function width(width,box=this.bbox()){if(width==null)return box.width;return this.size(width,box.height,box)}function x(x,box=this.bbox()){if(x==null)return box.x;return this.move(x,box.y,box)}function y(y,box=this.bbox()){if(y==null)return box.y;return this.move(box.x,y,box)}var containerGeometry={__proto__:null,dmove:dmove,dx:dx,dy:dy,height:height,move:move,size:size,width:width,x:x,y:y};class G extends Container{constructor(node,attrs=node){super(nodeOrNew("g",node),attrs)}}extend(G,containerGeometry);registerMethods({Container:{group:wrapWithAttrCheck(function(){return this.put(new G)})}});register(G,"G");class A extends Container{constructor(node,attrs=node){super(nodeOrNew("a",node),attrs)}target(target){return this.attr("target",target)}to(url){return this.attr("href",url,xlink)}}extend(A,containerGeometry);registerMethods({Container:{link:wrapWithAttrCheck(function(url){return this.put(new A).to(url)})},Element:{unlink(){const link=this.linker();if(!link)return this;const parent=link.parent();if(!parent){return this.remove()}const index=parent.index(link);parent.add(this,index);link.remove();return this},linkTo(url){let link=this.linker();if(!link){link=new A;this.wrap(link)}if(typeof url==="function"){url.call(link,link)}else{link.to(url)}return this},linker(){const link=this.parent();if(link&&link.node.nodeName.toLowerCase()==="a"){return link}return null}}});register(A,"A");class Mask extends Container{constructor(node,attrs=node){super(nodeOrNew("mask",node),attrs)}remove(){this.targets().forEach(function(el){el.unmask()});return super.remove()}targets(){return baseFind('svg [mask*="'+this.id()+'"]')}}registerMethods({Container:{mask:wrapWithAttrCheck(function(){return this.defs().put(new Mask)})},Element:{masker(){return this.reference("mask")},maskWith(element){const masker=element instanceof Mask?element:this.parent().mask().add(element);return this.attr("mask",'url("#'+masker.id()+'")')},unmask(){return this.attr("mask",null)}}});register(Mask,"Mask");class Stop extends Element{constructor(node,attrs=node){super(nodeOrNew("stop",node),attrs)}update(o){if(typeof o==="number"||o instanceof SVGNumber){o={offset:arguments[0],color:arguments[1],opacity:arguments[2]}}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",new SVGNumber(o.offset));return this}}registerMethods({Gradient:{stop:function(offset,color,opacity){return this.put(new Stop).update(offset,color,opacity)}}});register(Stop,"Stop");function cssRule(selector,rule){if(!selector)return"";if(!rule)return selector;let ret=selector+"{";for(const i in rule){ret+=unCamelCase(i)+":"+rule[i]+";"}ret+="}";return ret}class Style extends Element{constructor(node,attrs=node){super(nodeOrNew("style",node),attrs)}addText(w=""){this.node.textContent+=w;return this}font(name,src,params={}){return this.rule("@font-face",{fontFamily:name,src:src,...params})}rule(selector,obj){return this.addText(cssRule(selector,obj))}}registerMethods("Dom",{style(selector,obj){return this.put(new Style).rule(selector,obj)},fontface(name,src,params){return this.put(new Style).font(name,src,params)}});register(Style,"Style");class TextPath extends Text{constructor(node,attrs=node){super(nodeOrNew("textPath",node),attrs)}array(){const track=this.track();return track?track.array():null}plot(d){const track=this.track();let pathArray=null;if(track){pathArray=track.plot(d)}return d==null?pathArray:this}track(){return this.reference("href")}}registerMethods({Container:{textPath:wrapWithAttrCheck(function(text,path){if(!(text instanceof Text)){text=this.text(text)}return text.path(path)})},Text:{path:wrapWithAttrCheck(function(track,importNodes=true){const textPath=new TextPath;if(!(track instanceof Path)){track=this.defs().path(track)}textPath.attr("href","#"+track,xlink);let node;if(importNodes){while(node=this.node.firstChild){textPath.node.appendChild(node)}}return this.put(textPath)}),textPath(){return this.findOne("textPath")}},Path:{text:wrapWithAttrCheck(function(text){if(!(text instanceof Text)){text=(new Text).addTo(this.parent()).text(text)}return text.path(this)}),targets(){return baseFind("svg textPath").filter(node=>{return(node.attr("href")||"").includes(this.id())})}}});TextPath.prototype.MorphArray=PathArray;register(TextPath,"TextPath");class Use extends Shape{constructor(node,attrs=node){super(nodeOrNew("use",node),attrs)}use(element,file){return this.attr("href",(file||"")+"#"+element,xlink)}}registerMethods({Container:{use:wrapWithAttrCheck(function(element,file){return this.put(new Use).use(element,file)})}});register(Use,"Use");const SVG$1=makeInstance;extend([Svg,Symbol,Image,Pattern,Marker],getMethodsFor("viewbox"));extend([Line,Polyline,Polygon,Path],getMethodsFor("marker"));extend(Text,getMethodsFor("Text"));extend(Path,getMethodsFor("Path"));extend(Defs,getMethodsFor("Defs"));extend([Text,Tspan],getMethodsFor("Tspan"));extend([Rect,Ellipse,Gradient,Runner],getMethodsFor("radius"));extend(EventTarget,getMethodsFor("EventTarget"));extend(Dom,getMethodsFor("Dom"));extend(Element,getMethodsFor("Element"));extend(Shape,getMethodsFor("Shape"));extend([Container,Fragment],getMethodsFor("Container"));extend(Gradient,getMethodsFor("Gradient"));extend(Runner,getMethodsFor("Runner"));List.extend(getMethodNames());registerMorphableType([SVGNumber,Color,Box,Matrix,SVGArray,PointArray,PathArray,Point]);makeMorphable();var svgMembers={__proto__:null,Morphable:Morphable,registerMorphableType:registerMorphableType,makeMorphable:makeMorphable,TransformBag:TransformBag,ObjectBag:ObjectBag,NonMorphable:NonMorphable,defaults:defaults,utils:utils,namespaces:namespaces,regex:regex,SVG:SVG$1,parser:parser,find:baseFind,getWindow:getWindow,registerWindow:registerWindow,restoreWindow:restoreWindow,saveWindow:saveWindow,withWindow:withWindow,Animator:Animator,Controller:Controller,Ease:Ease,PID:PID,Spring:Spring,easing:easing,Queue:Queue,Runner:Runner,Timeline:Timeline,Array:SVGArray,Box:Box,Color:Color,EventTarget:EventTarget,Matrix:Matrix,Number:SVGNumber,PathArray:PathArray,Point:Point,PointArray:PointArray,List:List,Circle:Circle,ClipPath:ClipPath,Container:Container,Defs:Defs,Dom:Dom,Element:Element,Ellipse:Ellipse,ForeignObject:ForeignObject,Fragment:Fragment,Gradient:Gradient,G:G,A:A,Image:Image,Line:Line,Marker:Marker,Mask:Mask,Path:Path,Pattern:Pattern,Polygon:Polygon,Polyline:Polyline,Rect:Rect,Shape:Shape,Stop:Stop,Style:Style,Svg:Svg,Symbol:Symbol,Text:Text,TextPath:TextPath,Tspan:Tspan,Use:Use,windowEvents:windowEvents,getEvents:getEvents,getEventTarget:getEventTarget,clearEvents:clearEvents,on:on,off:off,dispatch:dispatch,root:root,create:create,makeInstance:makeInstance,nodeOrNew:nodeOrNew,adopt:adopt,mockAdopt:mockAdopt,register:register,getClass:getClass,eid:eid,assignNewId:assignNewId,extend:extend,wrapWithAttrCheck:wrapWithAttrCheck};function SVG(element,isHTML){return makeInstance(element,isHTML)}Object.assign(SVG,svgMembers);return SVG}(); +/*! + @licstart The following is the entire license notice for the JavaScript code in this file. + The code below is based on SVGPan Library 1.2 and was modified for doxygen + to support both zooming and panning via the mouse and via embedded buttons. + + This code is licensed under the following BSD license: + + Copyright 2009-2010 Andrea Leofreddi . All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + The views and conclusions contained in the software and documentation are those of the + authors and should not be interpreted as representing official policies, either expressed + or implied, of Andrea Leofreddi. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var root=document.documentElement;var state="none";var stateOrigin;var stateTf=root.createSVGMatrix();var cursorGrab=' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';var zoomSteps=10;var zoomInFactor;var zoomOutFactor;var windowWidth;var windowHeight;var svgDoc;var minZoom;var maxZoom;if(!window)window=this;function show(){if(window.innerHeight){windowWidth=window.innerWidth;windowHeight=window.innerHeight}else if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}if(!windowWidth||!windowHeight){windowWidth=800;windowHeight=600}minZoom=Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);maxZoom=minZoom+1.5;zoomInFactor=Math.pow(maxZoom/minZoom,1/zoomSteps);zoomOutFactor=1/zoomInFactor;var g=svgDoc.getElementById("viewport");try{var bb=g.getBBox();var tx=(windowWidth-viewWidth*minZoom+8)/(2*minZoom);var ty=viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);var a="scale("+minZoom+") rotate(0) translate("+tx+" "+ty+")";g.setAttribute("transform",a)}catch(e){}}function init(evt){svgDoc=evt.target.ownerDocument;try{if(top.window&&top.window.registerShow){top.window.registerShow(sectionId,show)}}catch(e){}show();setAttributes(root,{onmousedown:"handleMouseDown(evt)",onmousemove:"handleMouseMove(evt)",onmouseup:"handleMouseUp(evt)"});if(window.addEventListener){if(navigator.userAgent.toLowerCase().indexOf("webkit")>=0||navigator.userAgent.toLowerCase().indexOf("opera")>=0||navigator.appVersion.indexOf("MSIE")!=-1){window.addEventListener("mousewheel",handleMouseWheel,false)}else{window.addEventListener("DOMMouseScroll",handleMouseWheel,false)}}}window.onresize=function(){if(svgDoc){show()}};function getEventPoint(evt){var p=root.createSVGPoint();p.x=evt.clientX;p.y=evt.clientY;return p}function setCTM(element,matrix){var s="matrix("+matrix.a+","+matrix.b+","+matrix.c+","+matrix.d+","+matrix.e+","+matrix.f+")";element.setAttribute("transform",s)}function setAttributes(element,attributes){for(i in attributes)element.setAttributeNS(null,i,attributes[i])}function doZoom(g,point,zoomFactor){var p=point.matrixTransform(g.getCTM().inverse());var k=root.createSVGMatrix().translate(p.x,p.y).scale(zoomFactor).translate(-p.x,-p.y);var n=g.getCTM().multiply(k);var s=Math.max(n.a,n.d);if(s>maxZoom)n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);else if(s');d.write("Print SVG");d.write('');d.write('
    '+xs+"
    ");d.write("");d.write("");d.close()}catch(e){alert("Failed to open popup window needed for printing!\n"+e.message)}}function highlightEdges(){var elems=document.getElementsByTagName("g");if(elems){for(var i=0;i g");function findEnclosingG(domEl){let curEl=domEl;while(curEl.nodeName!="g"||curEl.id.substr(0,4)!="Node"){curEl=curEl.parentElement}return curEl}function onMouseOverElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>{if(SVG(e)!=s)SVG(e).attr("data-mouse-over-selected","false")});walk(e,e=>SVG(e).attr("data-mouse-over-selected","true"));let{nodes,edges}=getEdgesAndDistance1Nodes(SVG(e),s);for(let node of nodes){walk(node,e=>SVG(e).attr("data-mouse-over-selected","true"))}for(let edge of edges){walk(edge,e=>SVG(e).attr("data-mouse-over-selected","true"))}}function onMouseOutElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>e.attr("data-mouse-over-selected",null))}let gs=s.find("g[id^=Node]");for(let g of gs){g.on("mouseover",onMouseOverElem);g.on("mouseout",onMouseOutElem)}} diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/docs/html/tab_ad.png b/docs/html/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/docs/html/tab_sd.png b/docs/html/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/docs/html/tabs.css b/docs/html/tabs.css new file mode 100644 index 0000000..edbb424 --- /dev/null +++ b/docs/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} diff --git a/docs/html/test__commit__commands_8py.html b/docs/html/test__commit__commands_8py.html new file mode 100644 index 0000000..12128c6 --- /dev/null +++ b/docs/html/test__commit__commands_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/test_commit_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_commit_commands.py File Reference
    +
    +
    + + + + +

    +Classes

    class  tests.test_commit_commands.TestCommitCommands
     
    + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_commit_commands
     
    +
    +
    + + + + + diff --git a/docs/html/test__commit__commands_8py.js b/docs/html/test__commit__commands_8py.js new file mode 100644 index 0000000..1aa1dc7 --- /dev/null +++ b/docs/html/test__commit__commands_8py.js @@ -0,0 +1,4 @@ +var test__commit__commands_8py = +[ + [ "tests.test_commit_commands.TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", "classtests_1_1test__commit__commands_1_1TestCommitCommands" ] +]; \ No newline at end of file diff --git a/docs/html/test__config__commands_8py.html b/docs/html/test__config__commands_8py.html new file mode 100644 index 0000000..7f565fe --- /dev/null +++ b/docs/html/test__config__commands_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/test_config_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_config_commands.py File Reference
    +
    +
    + + + + +

    +Classes

    class  tests.test_config_commands.TestConfigCommands
     
    + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_config_commands
     
    +
    +
    + + + + + diff --git a/docs/html/test__config__commands_8py.js b/docs/html/test__config__commands_8py.js new file mode 100644 index 0000000..2eebb0e --- /dev/null +++ b/docs/html/test__config__commands_8py.js @@ -0,0 +1,4 @@ +var test__config__commands_8py = +[ + [ "tests.test_config_commands.TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", "classtests_1_1test__config__commands_1_1TestConfigCommands" ] +]; \ No newline at end of file diff --git a/docs/html/test__doc__commands_8py.html b/docs/html/test__doc__commands_8py.html new file mode 100644 index 0000000..b06792b --- /dev/null +++ b/docs/html/test__doc__commands_8py.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/test_doc_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_doc_commands.py File Reference
    +
    +
    + + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_doc_commands
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     tests.test_doc_commands.test_generate_doc_no_location (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     tests.test_doc_commands.test_generate_doc_file_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     tests.test_doc_commands.test_generate_doc_folder_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     tests.test_doc_commands.test_generate_doc_error_handling (mock_api_client, mock_git_analyzer, mock_exit)
     
     tests.test_doc_commands.test_setup_docgen_parser ()
     
     tests.test_doc_commands.test_handle_docgen_install_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     tests.test_doc_commands.test_handle_docgen_uninstall_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     tests.test_doc_commands.test_handle_docgen_generate (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     tests.test_doc_commands.test_handle_docgen_no_token (mock_exit, mock_get_token)
     
     tests.test_doc_commands.test_generate_doc_with_file_exception (mock_api_client, mock_getcwd)
     
     tests.test_doc_commands.test_generate_doc_with_folder_exception (mock_api_client, mock_getcwd)
     
    +
    +
    + + + + + diff --git a/docs/html/test__doc__commands_8py.js b/docs/html/test__doc__commands_8py.js new file mode 100644 index 0000000..c68cfaf --- /dev/null +++ b/docs/html/test__doc__commands_8py.js @@ -0,0 +1,14 @@ +var test__doc__commands_8py = +[ + [ "tests.test_doc_commands.test_generate_doc_error_handling", "namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6", null ], + [ "tests.test_doc_commands.test_generate_doc_file_location", "namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16", null ], + [ "tests.test_doc_commands.test_generate_doc_folder_location", "namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d", null ], + [ "tests.test_doc_commands.test_generate_doc_no_location", "namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b", null ], + [ "tests.test_doc_commands.test_generate_doc_with_file_exception", "namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68", null ], + [ "tests.test_doc_commands.test_generate_doc_with_folder_exception", "namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee", null ], + [ "tests.test_doc_commands.test_handle_docgen_generate", "namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5", null ], + [ "tests.test_doc_commands.test_handle_docgen_install_hook", "namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9", null ], + [ "tests.test_doc_commands.test_handle_docgen_no_token", "namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c", null ], + [ "tests.test_doc_commands.test_handle_docgen_uninstall_hook", "namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b", null ], + [ "tests.test_doc_commands.test_setup_docgen_parser", "namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042", null ] +]; \ No newline at end of file diff --git a/docs/html/test__web__config_8py.html b/docs/html/test__web__config_8py.html new file mode 100644 index 0000000..a94ee0b --- /dev/null +++ b/docs/html/test__web__config_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/test_web_config.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_web_config.py File Reference
    +
    +
    + + + + +

    +Classes

    class  tests.test_web_config.TestWebConfig
     
    + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_web_config
     
    +
    +
    + + + + + diff --git a/docs/html/test__web__config_8py.js b/docs/html/test__web__config_8py.js new file mode 100644 index 0000000..d691683 --- /dev/null +++ b/docs/html/test__web__config_8py.js @@ -0,0 +1,4 @@ +var test__web__config_8py = +[ + [ "tests.test_web_config.TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", "classtests_1_1test__web__config_1_1TestWebConfig" ] +]; \ No newline at end of file diff --git a/docs/html/tests_2____init_____8py.html b/docs/html/tests_2____init_____8py.html new file mode 100644 index 0000000..752c1e5 --- /dev/null +++ b/docs/html/tests_2____init_____8py.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/tests/__init__.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    __init__.py File Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  tests
     
    +
    +
    + + + + + diff --git a/docs/html/toggle-alternative-theme.js b/docs/html/toggle-alternative-theme.js new file mode 100644 index 0000000..dc822e1 --- /dev/null +++ b/docs/html/toggle-alternative-theme.js @@ -0,0 +1,11 @@ +let original_theme_active = true; + +function toggle_alternative_theme() { + if(original_theme_active) { + document.documentElement.classList.add("alternative") + original_theme_active = false; + } else { + document.documentElement.classList.remove("alternative") + original_theme_active = true; + } +} \ No newline at end of file diff --git a/docs/html/ui__utils_8py.html b/docs/html/ui__utils_8py.html new file mode 100644 index 0000000..df37193 --- /dev/null +++ b/docs/html/ui__utils_8py.html @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/ui_utils.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ui_utils.py File Reference
    +
    +
    + + + + + + +

    +Namespaces

    namespace  penify_hook
     
    namespace  penify_hook.ui_utils
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     penify_hook.ui_utils.format_info (message)
     
     penify_hook.ui_utils.format_success (message)
     
     penify_hook.ui_utils.format_warning (message)
     
     penify_hook.ui_utils.format_error (message)
     
     penify_hook.ui_utils.format_highlight (message)
     
     penify_hook.ui_utils.format_file_path (file_path)
     
     penify_hook.ui_utils.print_info (message)
     
     penify_hook.ui_utils.print_success (message)
     
     penify_hook.ui_utils.print_warning (message)
     
     penify_hook.ui_utils.print_error (message)
     
     penify_hook.ui_utils.print_processing (file_path)
     
     penify_hook.ui_utils.print_status (status, message)
     
     penify_hook.ui_utils.create_progress_bar (total, desc="Processing", unit="item")
     
     penify_hook.ui_utils.create_stage_progress_bar (stages, desc="Processing")
     
     penify_hook.ui_utils.update_stage (pbar, stage_name)
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     penify_hook.ui_utils.autoreset
     
     penify_hook.ui_utils.INFO_COLOR = Fore.CYAN
     
     penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN
     
     penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW
     
     penify_hook.ui_utils.ERROR_COLOR = Fore.RED
     
     penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE
     
     penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE
     
    str penify_hook.ui_utils.SUCCESS_SYMBOL = "✓"
     
    str penify_hook.ui_utils.WARNING_SYMBOL = "○"
     
    str penify_hook.ui_utils.ERROR_SYMBOL = "✗"
     
    str penify_hook.ui_utils.PROCESSING_SYMBOL = "⟳"
     
    +
    +
    + + + + + diff --git a/docs/html/ui__utils_8py.js b/docs/html/ui__utils_8py.js new file mode 100644 index 0000000..12b6017 --- /dev/null +++ b/docs/html/ui__utils_8py.js @@ -0,0 +1,29 @@ +var ui__utils_8py = +[ + [ "penify_hook.ui_utils.create_progress_bar", "namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5", null ], + [ "penify_hook.ui_utils.create_stage_progress_bar", "namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405", null ], + [ "penify_hook.ui_utils.format_error", "namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca", null ], + [ "penify_hook.ui_utils.format_file_path", "namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41", null ], + [ "penify_hook.ui_utils.format_highlight", "namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7", null ], + [ "penify_hook.ui_utils.format_info", "namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2", null ], + [ "penify_hook.ui_utils.format_success", "namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e", null ], + [ "penify_hook.ui_utils.format_warning", "namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797", null ], + [ "penify_hook.ui_utils.print_error", "namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598", null ], + [ "penify_hook.ui_utils.print_info", "namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c", null ], + [ "penify_hook.ui_utils.print_processing", "namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb", null ], + [ "penify_hook.ui_utils.print_status", "namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7", null ], + [ "penify_hook.ui_utils.print_success", "namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b", null ], + [ "penify_hook.ui_utils.print_warning", "namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45", null ], + [ "penify_hook.ui_utils.update_stage", "namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd", null ], + [ "penify_hook.ui_utils.autoreset", "namespacepenify__hook_1_1ui__utils.html#ab560cfade398ac1e0bd47befb52d9f71", null ], + [ "penify_hook.ui_utils.ERROR_COLOR", "namespacepenify__hook_1_1ui__utils.html#a4ab4e61dfab7973c87bef59c6e1977fe", null ], + [ "penify_hook.ui_utils.ERROR_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ae941d124e4d3aa294314d73fb47c6432", null ], + [ "penify_hook.ui_utils.HIGHLIGHT_COLOR", "namespacepenify__hook_1_1ui__utils.html#aba01b8259f0d66cdc2b4a1b58f9736fc", null ], + [ "penify_hook.ui_utils.INFO_COLOR", "namespacepenify__hook_1_1ui__utils.html#a9fdcb180915696f5d217032a62c3857c", null ], + [ "penify_hook.ui_utils.NEUTRAL_COLOR", "namespacepenify__hook_1_1ui__utils.html#aca0fcee81606857497520ae4290bc9f5", null ], + [ "penify_hook.ui_utils.PROCESSING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ad7cc8eaf7a660ff195f4366d792ab155", null ], + [ "penify_hook.ui_utils.SUCCESS_COLOR", "namespacepenify__hook_1_1ui__utils.html#a22c450c5e2b5394618ecf9b636560df4", null ], + [ "penify_hook.ui_utils.SUCCESS_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a7d3cc992aaeb0a01c536c9a48e801ff3", null ], + [ "penify_hook.ui_utils.WARNING_COLOR", "namespacepenify__hook_1_1ui__utils.html#a177bc9b44157844c999e0c1c2c6936ff", null ], + [ "penify_hook.ui_utils.WARNING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a9ee7a42eeca5b12429cb97bf89007be8", null ] +]; \ No newline at end of file diff --git a/docs/html/utils_8py.html b/docs/html/utils_8py.html new file mode 100644 index 0000000..8142e74 --- /dev/null +++ b/docs/html/utils_8py.html @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/SingularityX-ai/penify-cli/penify_hook/utils.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    utils.py File Reference
    +
    +
    + + + + +

    +Classes

    class  penify_hook.utils.GitRepoNotFoundError
     
    + + + + + +

    +Namespaces

    namespace  penify_hook
     
    namespace  penify_hook.utils
     
    + + + + + + + +

    +Functions

     penify_hook.utils.get_repo_details (Repo repo)
     
     penify_hook.utils.recursive_search_git_folder (folder_path)
     
     penify_hook.utils.find_git_parent (path)
     
    + + + +

    +Variables

     penify_hook.utils.logger = logging.getLogger(__name__)
     
    +
    +
    + + + + + diff --git a/docs/html/utils_8py.js b/docs/html/utils_8py.js new file mode 100644 index 0000000..dd69e0e --- /dev/null +++ b/docs/html/utils_8py.js @@ -0,0 +1,8 @@ +var utils_8py = +[ + [ "penify_hook.utils.GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ], + [ "penify_hook.utils.find_git_parent", "namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2", null ], + [ "penify_hook.utils.get_repo_details", "namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19", null ], + [ "penify_hook.utils.recursive_search_git_folder", "namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a", null ], + [ "penify_hook.utils.logger", "namespacepenify__hook_1_1utils.html#a0c0c1ed6b197038085c94a90ceedfb01", null ] +]; \ No newline at end of file diff --git a/docs/penify-cli-SingularityX-ai-g.tar.gz b/docs/penify-cli-SingularityX-ai-g.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..34f3b069463c48d8f163e787c202b066e637e0f8 GIT binary patch literal 440857 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ⅈP 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

    U)#)_b5zHd)O*HX4AZ}`Vrj1!Fk{!2#D%&0tLN* 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

      r>c0DM@3!b{a_WyJ5)ifm69c(eBGp6Hg~E7%!Y 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%0Aiykz&SGHVL)FTmwX7rGa_VhVy^X22arHLQ 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