forked from router-for-me/CLIProxyAPIPlus
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsdk-usage.html
More file actions
98 lines (96 loc) · 80.1 KB
/
sdk-usage.html
File metadata and controls
98 lines (96 loc) · 80.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>CLI Proxy SDK Guide | cliproxy++</title>
<meta name="description" content="cliproxyapi-plusplus documentation">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.Cv8KQT_A.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.DAWI9Mei.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.npqyt1PR.js">
<link rel="modulepreload" href="/assets/chunks/framework.DM0yugQT.js">
<link rel="modulepreload" href="/assets/sdk-usage.md.CxV176R2.lean.js">
<link rel="icon" href="/favicon.ico">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-fcbfc0e0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-fcbfc0e0>Skip to content</a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/" data-v-9f43907a><!--[--><!--]--><!----><span data-v-9f43907a>cliproxy++</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/start-here" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Start Here</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tutorials/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Tutorials</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/how-to/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>How-to</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/explanation/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Explanation</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/getting-started" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Getting Started</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/provider-usage" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Providers</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/provider-catalog" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Provider Catalog</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/operations/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Operations</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/routing-reference" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Reference</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/api/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docsets/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Docsets</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/kooshapari/cliproxyapi-plusplus" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/kooshapari/cliproxyapi-plusplus" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-6b867909><button data-v-6b867909>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Guide</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/getting-started" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/install" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Install</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/provider-usage" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Provider Usage</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/provider-catalog" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Provider Catalog</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/provider-operations" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Provider Operations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/troubleshooting" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Troubleshooting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/planning/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Planning Boards</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Reference</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/routing-reference" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Routing and Models</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/features/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Feature Guides</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/docsets/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Docsets</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>API</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>API Index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/openai-compatible" data-v-0009425e><!--[--><p class="text" data-v-0009425e>OpenAI-Compatible API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/management" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Management API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/api/operations" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Operations API</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _sdk-usage" data-v-e6f2a212><div><h1 id="cli-proxy-sdk-guide" tabindex="-1">CLI Proxy SDK Guide <a class="header-anchor" href="#cli-proxy-sdk-guide" aria-label="Permalink to "CLI Proxy SDK Guide""></a></h1><p>The <code>sdk/cliproxy</code> module exposes the proxy as a reusable Go library so external programs can embed the routing, authentication, hot‑reload, and translation layers without depending on the CLI binary.</p><h2 id="install-import" tabindex="-1">Install & Import <a class="header-anchor" href="#install-import" aria-label="Permalink to "Install & Import""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">go</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy</span></span></code></pre></div><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">context</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">errors</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">time</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">github.com/router-for-me/CLIProxyAPI/v6/internal/config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div><p>Note the <code>/v6</code> module path.</p><h2 id="minimal-embed" tabindex="-1">Minimal Embed <a class="header-anchor" href="#minimal-embed" aria-label="Permalink to "Minimal Embed""></a></h2><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">cfg, err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">LoadConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config.yaml"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">panic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(err) }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">svc, err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfg).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfigPath</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config.yaml"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">). </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// absolute or working-dir relative</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">panic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(err) }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ctx, cancel </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> context.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithCancel</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(context.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Background</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">())</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">defer</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> cancel</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> svc.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Run</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ctx); err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> nil</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &&</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> !</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">errors.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Is</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(err, context.Canceled) {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> panic</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(err)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>The service manages config/auth watching, background token refresh, and graceful shutdown. Cancel the context to stop it.</p><h2 id="server-options-middleware-routes-logs" tabindex="-1">Server Options (middleware, routes, logs) <a class="header-anchor" href="#server-options-middleware-routes-logs" aria-label="Permalink to "Server Options (middleware, routes, logs)""></a></h2><p>The server accepts options via <code>WithServerOptions</code>:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">svc, _ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfg).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfigPath</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config.yaml"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithServerOptions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Add global middleware</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithMiddleware</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">c</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">gin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Context</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) { c.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Header</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"X-Embed"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"1"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">); c.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Next</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() }),</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Tweak gin engine early (CORS, trusted proxies, etc.)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithEngineConfigurator</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">gin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Engine</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) { e.ForwardedByClientIP </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }),</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Add your own routes after defaults</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithRouterConfigurator</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">gin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Engine</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">_</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">handlers</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">BaseAPIHandler</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">_</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> e.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">GET</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/healthz"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">c</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">gin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Context</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) { c.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">200</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"ok"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) })</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }),</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Override request log writer/dir</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithRequestLoggerFactory</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">cfg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">cfgPath</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">logging</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">RequestLogger</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> logging.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewFileRequestLogger</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"logs"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, filepath.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Dir</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfgPath))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }),</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span></code></pre></div><p>These options mirror the internals used by the CLI server.</p><h2 id="management-api-when-embedded" tabindex="-1">Management API (when embedded) <a class="header-anchor" href="#management-api-when-embedded" aria-label="Permalink to "Management API (when embedded)""></a></h2><ul><li>Management endpoints are mounted only when <code>remote-management.secret-key</code> is set in <code>config.yaml</code>.</li><li>Remote access additionally requires <code>remote-management.allow-remote: true</code>.</li><li>See MANAGEMENT_API.md for endpoints. Your embedded server exposes them under <code>/v0/management</code> on the configured port.</li></ul><h2 id="using-the-core-auth-manager" tabindex="-1">Using the Core Auth Manager <a class="header-anchor" href="#using-the-core-auth-manager" aria-label="Permalink to "Using the Core Auth Manager""></a></h2><p>The service uses a core <code>auth.Manager</code> for selection, execution, and auto‑refresh. When embedding, you can provide your own manager to customize transports or hooks:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">core </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> coreauth.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewManager</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(coreauth.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewFileStore</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfg.AuthDir), </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">core.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">SetRoundTripperProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(myRTProvider) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// per‑auth *http.Transport</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">svc, _ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfg).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfigPath</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config.yaml"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithCoreAuthManager</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(core).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span></code></pre></div><p>Implement a custom per‑auth transport:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myRTProvider</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> struct</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{}</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">myRTProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">RoundTripperFor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">a</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">coreauth</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Auth</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">http</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">RoundTripper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> a </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> nil</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> a.ProxyURL </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> u, _ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> url.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Parse</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(a.ProxyURL)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">http</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Transport</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{ Proxy: http.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ProxyURL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(u) }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>Programmatic execution is available on the manager:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// Non‑streaming</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">resp, err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> core.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Execute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ctx, []</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}, req, opts)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// Streaming</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">chunks, err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> core.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ExecuteStream</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ctx, []</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"gemini"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}, req, opts)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ch </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> range</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> chunks { </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">/* ... */</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span></code></pre></div><p>Note: Built‑in provider executors are wired automatically when you run the <code>Service</code>. If you want to use <code>Manager</code> stand‑alone without the HTTP server, you must register your own executors that implement <code>auth.ProviderExecutor</code>.</p><h2 id="custom-client-sources" tabindex="-1">Custom Client Sources <a class="header-anchor" href="#custom-client-sources" aria-label="Permalink to "Custom Client Sources""></a></h2><p>Replace the default loaders if your creds live outside the local filesystem:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> memoryTokenProvider</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> struct</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{}</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">p </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">memoryTokenProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Load</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ctx</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> context</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Context</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">cfg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">TokenClientResult</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Populate from memory/remote store and return counts</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">TokenClientResult</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{}, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">nil</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">svc, _ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfg).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithConfigPath</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config.yaml"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithTokenClientProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">memoryTokenProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{}).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> WithAPIKeyClientProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewAPIKeyClientProvider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()).</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span></code></pre></div><h2 id="hooks" tabindex="-1">Hooks <a class="header-anchor" href="#hooks" aria-label="Permalink to "Hooks""></a></h2><p>Observe lifecycle without patching internals:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">hooks </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> cliproxy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Hooks</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OnBeforeStart: </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">cfg</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) { log.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Infof</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"starting on :</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, cfg.Port) },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OnAfterStart: </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">s</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cliproxy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Service</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) { log.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Info</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"ready"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">svc, _ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cliproxy.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">NewBuilder</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithConfig</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(cfg).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithConfigPath</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config.yaml"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithHooks</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(hooks).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span></code></pre></div><h2 id="shutdown" tabindex="-1">Shutdown <a class="header-anchor" href="#shutdown" aria-label="Permalink to "Shutdown""></a></h2><p><code>Run</code> defers <code>Shutdown</code>, so cancelling the parent context is enough. To stop manually:</p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ctx, cancel </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> context.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">WithTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(context.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Background</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(), </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">time.Second)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">defer</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> cancel</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">_ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> svc.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Shutdown</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ctx)</span></span></code></pre></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to "Notes""></a></h2><ul><li>Hot reload: changes to <code>config.yaml</code> and <code>auths/</code> are picked up automatically.</li><li>Request logging can be toggled at runtime via the Management API.</li><li>Gemini Web features (<code>gemini-web.*</code>) are honored in the embedded server.</li></ul></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><div class="edit-link" data-v-1bcd8184><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/kooshapari/cliproxyapi-plusplus/edit/main/docs/sdk-usage.md" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="vpi-square-pen edit-link-icon" data-v-1bcd8184></span> Edit this page on GitHub<!--]--></a></div><div class="last-updated" data-v-1bcd8184><p class="VPLastUpdated" data-v-1bcd8184 data-v-1bb0c8a8>Last updated: <time datetime="2026-02-23T19:30:03.000Z" data-v-1bb0c8a8></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><!----></div><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link next" href="/" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Next page</span><span class="title" data-v-1bcd8184>Overview</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>MIT Licensed</p><p class="copyright" data-v-566314d4>Copyright © KooshaPari</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_index.md\":\"ImrqiJgr\",\"api_management.md\":\"lGGkN-0C\",\"api_openai-compatible.md\":\"Dhu44ytv\",\"api_operations.md\":\"9Qla852d\",\"changelog.md\":\"Cc6QY3br\",\"docsets_agent_index.md\":\"CxN-_8SL\",\"docsets_agent_operating-model.md\":\"CYYY60ot\",\"docsets_developer_external_index.md\":\"B69TCsc8\",\"docsets_developer_external_integration-quickstart.md\":\"BGItAi6b\",\"docsets_developer_internal_architecture.md\":\"BwBu7YTK\",\"docsets_developer_internal_index.md\":\"C2tqXsI_\",\"docsets_index.md\":\"CU2OxJch\",\"docsets_user_index.md\":\"vyTQrykk\",\"docsets_user_quickstart.md\":\"BFPqrbuL\",\"explanation_index.md\":\"BEHIMD2E\",\"fa-latn_index.md\":\"D-x2KJWe\",\"fa_index.md\":\"CKTYSxdB\",\"feature_changes_plusplus.md\":\"Upjze_uT\",\"features_architecture_dev.md\":\"BleYaY8C\",\"features_architecture_fragemented_dev.md\":\"FClrr7kh\",\"features_architecture_fragemented_explanation.md\":\"CqMvGe1x\",\"features_architecture_fragemented_index.md\":\"BZSwbl5P\",\"features_architecture_fragemented_merged.md\":\"9Fe0IB0f\",\"features_architecture_fragemented_readme.md\":\"BaeSeE74\",\"features_architecture_fragemented_spec.md\":\"Dj96mGpc\",\"features_architecture_fragemented_user.md\":\"DiIY5f3S\",\"features_architecture_spec.md\":\"FkdurEmc\",\"features_architecture_user.md\":\"DrFQnjSR\",\"features_auth_dev.md\":\"6KaG4NWf\",\"features_auth_index.md\":\"CIWeGGHR\",\"features_auth_spec.md\":\"BWcPcd5W\",\"features_auth_user.md\":\"D-T6l7qu\",\"features_index.md\":\"CBCLnxOR\",\"features_operations_index.md\":\"1ZyZSTPT\",\"features_operations_spec.md\":\"DjgJMF_x\",\"features_operations_user.md\":\"DCjF3cjx\",\"features_providers_cpb-0782-opus-4-5-quickstart.md\":\"TBbi64Hn\",\"features_providers_cpb-0786-nano-banana-quickstart.md\":\"DSgIfjjW\",\"features_providers_fragemented_explanation.md\":\"C8Ic-hm-\",\"features_providers_fragemented_index.md\":\"CzWjP81k\",\"features_providers_fragemented_merged.md\":\"D6JUiY_n\",\"features_providers_fragemented_readme.md\":\"OrNypMgw\",\"features_providers_fragemented_spec.md\":\"YXL6s0P2\",\"features_providers_fragemented_user.md\":\"DZlqq6tE\",\"features_providers_spec.md\":\"nziW2bAK\",\"features_providers_user.md\":\"BgI_CAAo\",\"features_security_index.md\":\"txR9tRVd\",\"features_security_spec.md\":\"uSw1u2Ag\",\"features_security_user.md\":\"t3NIHGY9\",\"getting-started.md\":\"PuI7pHY9\",\"guides_changelog_entry_template.md\":\"BCmLEHv7\",\"guides_changelog_process.md\":\"D3GQPR-S\",\"guides_cpb-0701-0710-lane-e3-notes.md\":\"YXsbmv0a\",\"guides_cpb-0711-0720-lane-e4-notes.md\":\"DZ31y_fG\",\"guides_cpb-0721-0730-lane-d4-notes.md\":\"BHXHCmF_\",\"guides_cpb-0721-0730-lane-e5-notes.md\":\"Ttx_2FI0\",\"guides_project_setup_style.md\":\"Cll19vtq\",\"guides_quick-start_arm64_docker_provider_quickstart.md\":\"DfhW8tk6\",\"guides_release-batching.md\":\"CvbSAiVR\",\"how-to_index.md\":\"B6zNMS4d\",\"index.md\":\"CS04zCJ3\",\"install.md\":\"jl1-fBL5\",\"operations_auth-refresh-failure-symptom-fix.md\":\"BNffTl5J\",\"operations_checks-owner-responder-map.md\":\"C4JcFFgR\",\"operations_cpb-0783-gemini-3-pro-preview-hmr.md\":\"IMVbKucA\",\"operations_critical-endpoints-curl-pack.md\":\"BPbXRuul\",\"operations_distributed-fs-compute-status.md\":\"DPDO7Pb4\",\"operations_index.md\":\"mulfDN8D\",\"operations_kiro-idc-refresh-rollout.md\":\"BD3bRH7i\",\"operations_provider-outage-triage-quick-guide.md\":\"DL2H-TPt\",\"operations_release-governance.md\":\"BL3o7W1p\",\"operations_required-branch-check-ownership.md\":\"ByL2VfAw\",\"optimization_plan_2026-02-23.md\":\"Dk6KdPbt\",\"planning_agentapi-cliproxy-integration-research-2026-02-22.md\":\"B-06U1N3\",\"planning_board-workflow.md\":\"VnaMui1z\",\"planning_cliproxyapi_1000_item_board_2026-02-22.md\":\"DSlp_J8R\",\"planning_cliproxyapi_2000_item_execution_board_2026-02-22.md\":\"D0xvUGu3\",\"planning_coder-org-plus-relative-300-inventory-2026-02-22.md\":\"DvvIl2qT\",\"planning_coverage-gaps.md\":\"C_glORxB\",\"planning_docs_parity_p1_p2_plan_2026-02-23.md\":\"C2RDN_jr\",\"planning_index.md\":\"DTXn_2gw\",\"planning_issue-lanes-cliproxy-1000-2026-02-22.md\":\"BQy14v_o\",\"planning_issue-wave-codescan-0139-2026-02-23.md\":\"6oC46oFM\",\"planning_issue-wave-codescan-progress-2026-02-23.md\":\"BpfVFz9F\",\"planning_issue-wave-cpb-0001-0035-2026-02-22.md\":\"cytXPgg7\",\"planning_issue-wave-cpb-0036-0105-2026-02-22.md\":\"CtA7w5v_\",\"planning_issue-wave-cpb-0106-0175-2026-02-22.md\":\"BwnDAVVy\",\"planning_issue-wave-cpb-0176-0245-2026-02-22.md\":\"Ta48Sh7j\",\"planning_issue-wave-cpb-0246-0280-2026-02-22.md\":\"CD-k7yja\",\"planning_issue-wave-cpb-0281-0315-2026-02-22.md\":\"-u1qmiFk\",\"planning_issue-wave-cpb-0316-0350-2026-02-22.md\":\"CZhBsAaT\",\"planning_issue-wave-cpb-0351-0385-2026-02-22.md\":\"p0KR3l_L\",\"planning_issue-wave-cpb-0386-0420-2026-02-22.md\":\"DFol-ERm\",\"planning_issue-wave-cpb-0421-0455-2026-02-22.md\":\"CB_xFU0u\",\"planning_issue-wave-cpb-0456-0490-2026-02-22.md\":\"Ij0XRnk9\",\"planning_issue-wave-gh-35-2026-02-22.md\":\"BhNy4Jp1\",\"planning_issue-wave-gh-next21-2026-02-22.md\":\"DZJFfVyE\",\"planning_issue-wave-gh-next32-2026-02-22.md\":\"DIkXmxpU\",\"planning_readme.md\":\"BOzIPdcE\",\"planning_reports_fragemented_explanation.md\":\"CgCUuHzD\",\"planning_reports_fragemented_index.md\":\"BaweTIi6\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-1.md\":\"BaCA2Dn4\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-2.md\":\"DY5tGqIC\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-3.md\":\"BTCj0flT\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-4.md\":\"DEUUlEsl\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-5.md\":\"DHA_vryO\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-6.md\":\"HDh7asA5\",\"planning_reports_fragemented_issue-wave-cpb-0001-0035-lane-7.md\":\"DL65VYVI\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-1.md\":\"1--JMXis\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-2.md\":\"C1NEkcty\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-3.md\":\"9qaH7GY_\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-4.md\":\"DVwKtv96\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-5.md\":\"CIJ3jwoI\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-6.md\":\"633STijE\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-lane-7.md\":\"hlcrB-gZ\",\"planning_reports_fragemented_issue-wave-cpb-0036-0105-next-70-summary.md\":\"DFzY_O-F\",\"planning_reports_fragemented_issue-wave-gh-35-integration-summary-2026-02-22.md\":\"Bxq01nm4\",\"planning_reports_fragemented_issue-wave-gh-35-lane-1-self.md\":\"B_QVcMyq\",\"planning_reports_fragemented_issue-wave-gh-35-lane-1.md\":\"CVlXGf8o\",\"planning_reports_fragemented_issue-wave-gh-35-lane-2.md\":\"BrBTKj1L\",\"planning_reports_fragemented_issue-wave-gh-35-lane-3.md\":\"K_mYFfeW\",\"planning_reports_fragemented_issue-wave-gh-35-lane-4.md\":\"kTMNTfI6\",\"planning_reports_fragemented_issue-wave-gh-35-lane-5.md\":\"Qhut3FI4\",\"planning_reports_fragemented_issue-wave-gh-35-lane-6.md\":\"Nc9tQ9lP\",\"planning_reports_fragemented_issue-wave-gh-35-lane-7.md\":\"DOMMXX6r\",\"planning_reports_fragemented_merged.md\":\"CfzJZ6Ul\",\"planning_reports_fragemented_readme.md\":\"DfMtEHU8\",\"planning_reports_issue-wave-cp2k-0040-0050-lane-4-2026-02-23.md\":\"DhW5GZjA\",\"planning_reports_issue-wave-cp2k-next30-execution-summary-2026-02-23.md\":\"B3gIvzD0\",\"planning_reports_issue-wave-cp2k-next50-lane-2-2026-02-23.md\":\"CkmYfdvj\",\"planning_reports_issue-wave-cpb-0001-0035-lane-1.md\":\"Cp3Y1aHQ\",\"planning_reports_issue-wave-cpb-0001-0035-lane-2.md\":\"BmDYfEqO\",\"planning_reports_issue-wave-cpb-0001-0035-lane-3.md\":\"BIgKyIxp\",\"planning_reports_issue-wave-cpb-0001-0035-lane-4.md\":\"DrWUPi4A\",\"planning_reports_issue-wave-cpb-0001-0035-lane-5.md\":\"CUI7OxMy\",\"planning_reports_issue-wave-cpb-0001-0035-lane-6.md\":\"WIjHaO-h\",\"planning_reports_issue-wave-cpb-0001-0035-lane-7.md\":\"DDfJZp0H\",\"planning_reports_issue-wave-cpb-0036-0105-lane-1.md\":\"Bnkxfjzg\",\"planning_reports_issue-wave-cpb-0036-0105-lane-2.md\":\"jCPRg-fp\",\"planning_reports_issue-wave-cpb-0036-0105-lane-3.md\":\"CrXU1bR-\",\"planning_reports_issue-wave-cpb-0036-0105-lane-4.md\":\"CTbJxC6G\",\"planning_reports_issue-wave-cpb-0036-0105-lane-5.md\":\"DrtvrKSZ\",\"planning_reports_issue-wave-cpb-0036-0105-lane-6.md\":\"y5xfHXhM\",\"planning_reports_issue-wave-cpb-0036-0105-lane-7.md\":\"DoNtnN-F\",\"planning_reports_issue-wave-cpb-0036-0105-next-70-summary.md\":\"ZkbaBJg2\",\"planning_reports_issue-wave-cpb-0106-0175-lane-1.md\":\"BBxJ9y4y\",\"planning_reports_issue-wave-cpb-0106-0175-lane-2.md\":\"CnHehFRj\",\"planning_reports_issue-wave-cpb-0106-0175-lane-3.md\":\"CBx9LBJa\",\"planning_reports_issue-wave-cpb-0106-0175-lane-4.md\":\"pgwSsqgF\",\"planning_reports_issue-wave-cpb-0106-0175-lane-5.md\":\"QkeyKfUL\",\"planning_reports_issue-wave-cpb-0106-0175-lane-6.md\":\"xHfEiA96\",\"planning_reports_issue-wave-cpb-0106-0175-lane-7.md\":\"CjcqWjrn\",\"planning_reports_issue-wave-cpb-0106-0175-next-70-summary.md\":\"D4H_AsX4\",\"planning_reports_issue-wave-cpb-0138-0147-lane-1.md\":\"kkMP98GU\",\"planning_reports_issue-wave-cpb-0176-0245-lane-1.md\":\"bCreyPO7\",\"planning_reports_issue-wave-cpb-0176-0245-lane-2.md\":\"CUmP9Nux\",\"planning_reports_issue-wave-cpb-0176-0245-lane-3.md\":\"DvOdqrVe\",\"planning_reports_issue-wave-cpb-0176-0245-lane-4.md\":\"BV-_COVF\",\"planning_reports_issue-wave-cpb-0176-0245-lane-5.md\":\"DmMCfLyF\",\"planning_reports_issue-wave-cpb-0176-0245-lane-6.md\":\"C_jS6iez\",\"planning_reports_issue-wave-cpb-0176-0245-lane-7.md\":\"Diq-_qg8\",\"planning_reports_issue-wave-cpb-0176-0245-next-70-summary.md\":\"B-wwwLqS\",\"planning_reports_issue-wave-cpb-0246-0280-lane-1.md\":\"987gMsNB\",\"planning_reports_issue-wave-cpb-0246-0280-lane-2.md\":\"CiqwdfBK\",\"planning_reports_issue-wave-cpb-0246-0280-lane-3.md\":\"SNATAYxC\",\"planning_reports_issue-wave-cpb-0246-0280-lane-4.md\":\"BfO9yUSO\",\"planning_reports_issue-wave-cpb-0246-0280-lane-5.md\":\"d6uf1Ubc\",\"planning_reports_issue-wave-cpb-0246-0280-lane-6.md\":\"bJT_bGPi\",\"planning_reports_issue-wave-cpb-0246-0280-lane-7.md\":\"DXkDqLIH\",\"planning_reports_issue-wave-cpb-0246-0280-next-35-summary.md\":\"C23BTF6R\",\"planning_reports_issue-wave-cpb-0281-0315-lane-1.md\":\"CkpmkoC6\",\"planning_reports_issue-wave-cpb-0281-0315-lane-2.md\":\"CL8LE50h\",\"planning_reports_issue-wave-cpb-0281-0315-lane-3.md\":\"m1uri2TJ\",\"planning_reports_issue-wave-cpb-0281-0315-lane-4.md\":\"CDhi2Gt0\",\"planning_reports_issue-wave-cpb-0281-0315-lane-5.md\":\"Q9V8Pt1y\",\"planning_reports_issue-wave-cpb-0281-0315-lane-6.md\":\"DH38F4k0\",\"planning_reports_issue-wave-cpb-0281-0315-lane-7.md\":\"BnbNNy0M\",\"planning_reports_issue-wave-cpb-0281-0315-next-35-summary.md\":\"Cy5kcWX-\",\"planning_reports_issue-wave-cpb-0316-0350-lane-1.md\":\"DWkYQ3H1\",\"planning_reports_issue-wave-cpb-0316-0350-lane-2.md\":\"BzMzQdOB\",\"planning_reports_issue-wave-cpb-0316-0350-lane-3.md\":\"DgxDo7Lk\",\"planning_reports_issue-wave-cpb-0316-0350-lane-4.md\":\"BvEyJ096\",\"planning_reports_issue-wave-cpb-0316-0350-lane-5.md\":\"DfV0iijL\",\"planning_reports_issue-wave-cpb-0316-0350-lane-6.md\":\"Bsku0T-T\",\"planning_reports_issue-wave-cpb-0316-0350-lane-7.md\":\"BS3z-J5X\",\"planning_reports_issue-wave-cpb-0316-0350-next-35-summary.md\":\"CjiS80zK\",\"planning_reports_issue-wave-cpb-0327-0376-next-50-summary.md\":\"410jfk_2\",\"planning_reports_issue-wave-cpb-0351-0385-lane-1.md\":\"8RFbd2tO\",\"planning_reports_issue-wave-cpb-0351-0385-lane-2.md\":\"CUhUA8VV\",\"planning_reports_issue-wave-cpb-0351-0385-lane-3.md\":\"DCYCG9LE\",\"planning_reports_issue-wave-cpb-0351-0385-lane-4.md\":\"C5fEESOx\",\"planning_reports_issue-wave-cpb-0351-0385-lane-5.md\":\"DfA-s6Mx\",\"planning_reports_issue-wave-cpb-0351-0385-lane-6.md\":\"EgUYUHwF\",\"planning_reports_issue-wave-cpb-0351-0385-lane-7.md\":\"CtQ7ypdg\",\"planning_reports_issue-wave-cpb-0351-0385-next-35-summary.md\":\"UDHE_2hj\",\"planning_reports_issue-wave-cpb-0386-0420-lane-1.md\":\"OYzfmNfE\",\"planning_reports_issue-wave-cpb-0386-0420-lane-2.md\":\"3IPRnkwc\",\"planning_reports_issue-wave-cpb-0386-0420-lane-3.md\":\"BRc5k_5h\",\"planning_reports_issue-wave-cpb-0386-0420-lane-4.md\":\"xwLTvuIn\",\"planning_reports_issue-wave-cpb-0386-0420-lane-5.md\":\"CFEkMCVB\",\"planning_reports_issue-wave-cpb-0386-0420-lane-6.md\":\"C8PoPDJa\",\"planning_reports_issue-wave-cpb-0386-0420-lane-7.md\":\"atWmURZk\",\"planning_reports_issue-wave-cpb-0386-0420-next-35-summary.md\":\"C2ARgQ25\",\"planning_reports_issue-wave-cpb-0421-0455-lane-1.md\":\"jzg0BXrF\",\"planning_reports_issue-wave-cpb-0421-0455-lane-2.md\":\"D3QjYlSO\",\"planning_reports_issue-wave-cpb-0421-0455-lane-3.md\":\"CxvDqouL\",\"planning_reports_issue-wave-cpb-0421-0455-lane-4.md\":\"Da58bRsN\",\"planning_reports_issue-wave-cpb-0421-0455-lane-5.md\":\"CjXnkBjq\",\"planning_reports_issue-wave-cpb-0421-0455-lane-6.md\":\"CSq6llN5\",\"planning_reports_issue-wave-cpb-0421-0455-lane-7.md\":\"DEta9zTo\",\"planning_reports_issue-wave-cpb-0421-0455-next-35-summary.md\":\"DdshkDjI\",\"planning_reports_issue-wave-cpb-0456-0490-lane-1.md\":\"BhW57VVL\",\"planning_reports_issue-wave-cpb-0456-0490-lane-2.md\":\"DkOXnuCf\",\"planning_reports_issue-wave-cpb-0456-0490-lane-3.md\":\"KSVgTNmT\",\"planning_reports_issue-wave-cpb-0456-0490-lane-4.md\":\"CIM2izXS\",\"planning_reports_issue-wave-cpb-0456-0490-lane-5.md\":\"Cdes0-kt\",\"planning_reports_issue-wave-cpb-0456-0490-lane-6.md\":\"BOsCLWDM\",\"planning_reports_issue-wave-cpb-0456-0490-lane-7.md\":\"DcOgXSUc\",\"planning_reports_issue-wave-cpb-0456-0490-next-35-summary.md\":\"UgHJJK9v\",\"planning_reports_issue-wave-cpb-0491-0540-lane-1.md\":\"vEQ3xC8q\",\"planning_reports_issue-wave-cpb-0491-0540-lane-2.md\":\"Bp8RKAiq\",\"planning_reports_issue-wave-cpb-0491-0540-lane-3.md\":\"DupmSEoV\",\"planning_reports_issue-wave-cpb-0491-0540-lane-4.md\":\"BlvFGfC9\",\"planning_reports_issue-wave-cpb-0491-0540-lane-5.md\":\"BPAUSI6J\",\"planning_reports_issue-wave-cpb-0491-0540-lane-6.md\":\"XAg7Kbaw\",\"planning_reports_issue-wave-cpb-0491-0540-lane-7.md\":\"BOtIWc5I\",\"planning_reports_issue-wave-cpb-0491-0540-lane-8.md\":\"C85Dq_XV\",\"planning_reports_issue-wave-cpb-0541-0590-lane-1.md\":\"UisJnuG-\",\"planning_reports_issue-wave-cpb-0541-0590-lane-10.md\":\"DtxVQvFu\",\"planning_reports_issue-wave-cpb-0541-0590-lane-2.md\":\"i8SFguNH\",\"planning_reports_issue-wave-cpb-0541-0590-lane-3.md\":\"BigPN3CX\",\"planning_reports_issue-wave-cpb-0541-0590-lane-4.md\":\"D3LuPTk9\",\"planning_reports_issue-wave-cpb-0541-0590-lane-5.md\":\"BbmJmKar\",\"planning_reports_issue-wave-cpb-0541-0590-lane-6.md\":\"kW1gYw0q\",\"planning_reports_issue-wave-cpb-0541-0590-lane-7.md\":\"B6ibyz7N\",\"planning_reports_issue-wave-cpb-0541-0590-lane-8.md\":\"CqgVz_gC\",\"planning_reports_issue-wave-cpb-0541-0590-lane-9.md\":\"vEwHKO3T\",\"planning_reports_issue-wave-cpb-0541-0590-next-50-summary.md\":\"CwNHocVt\",\"planning_reports_issue-wave-cpb-0546-0555-lane-f-implementation-2026-02-23.md\":\"qHkbsbsI\",\"planning_reports_issue-wave-cpb-0556-0610-lane-d-implementation-2026-02-23.md\":\"CsIUkBV6\",\"planning_reports_issue-wave-cpb-0581-0590-lane-e-implementation-2026-02-23.md\":\"RoArpSmD\",\"planning_reports_issue-wave-cpb-0591-0640-lane-1.md\":\"CUei2vrs\",\"planning_reports_issue-wave-cpb-0591-0640-lane-10.md\":\"A7qkaf-w\",\"planning_reports_issue-wave-cpb-0591-0640-lane-2.md\":\"iVprr5_q\",\"planning_reports_issue-wave-cpb-0591-0640-lane-3.md\":\"B7OskrYl\",\"planning_reports_issue-wave-cpb-0591-0640-lane-4.md\":\"DDIHp0s5\",\"planning_reports_issue-wave-cpb-0591-0640-lane-5.md\":\"D4bBval6\",\"planning_reports_issue-wave-cpb-0591-0640-lane-6.md\":\"1qrTUwQ_\",\"planning_reports_issue-wave-cpb-0591-0640-lane-7.md\":\"D1Za5qQN\",\"planning_reports_issue-wave-cpb-0591-0640-lane-8.md\":\"Di4pPXat\",\"planning_reports_issue-wave-cpb-0591-0640-lane-9.md\":\"D5M8sKYB\",\"planning_reports_issue-wave-cpb-0591-0640-next-50-summary.md\":\"GfclWLN2\",\"planning_reports_issue-wave-cpb-0641-0690-lane-1.md\":\"BWjIgRJW\",\"planning_reports_issue-wave-cpb-0641-0690-lane-10.md\":\"CsadUCw0\",\"planning_reports_issue-wave-cpb-0641-0690-lane-2.md\":\"DyvTYSdP\",\"planning_reports_issue-wave-cpb-0641-0690-lane-3.md\":\"CgMw2pAu\",\"planning_reports_issue-wave-cpb-0641-0690-lane-4.md\":\"BAHF6v4B\",\"planning_reports_issue-wave-cpb-0641-0690-lane-5.md\":\"tJhXbhXA\",\"planning_reports_issue-wave-cpb-0641-0690-lane-6.md\":\"BNnXFS6h\",\"planning_reports_issue-wave-cpb-0641-0690-lane-7.md\":\"DGPhH1ti\",\"planning_reports_issue-wave-cpb-0641-0690-lane-8.md\":\"Bargda68\",\"planning_reports_issue-wave-cpb-0641-0690-lane-9.md\":\"CtXRcDrr\",\"planning_reports_issue-wave-cpb-0641-0690-next-50-summary.md\":\"DNQGhQdt\",\"planning_reports_issue-wave-cpb-0691-0700-lane-f2-implementation-2026-02-23.md\":\"7awOpRaH\",\"planning_reports_issue-wave-cpb-0701-0710-lane-e3.md\":\"C_Q9VSoO\",\"planning_reports_issue-wave-cpb-0711-0720-lane-e4.md\":\"dhztHtT_\",\"planning_reports_issue-wave-cpb-0721-0730-lane-e5.md\":\"6MmY3TpF\",\"planning_reports_issue-wave-cpb-0731-0780-lane-a.md\":\"CDg9mtRM\",\"planning_reports_issue-wave-cpb-0731-0780-lane-b.md\":\"BhLeRGoL\",\"planning_reports_issue-wave-cpb-0731-0780-lane-c.md\":\"-Q9J5hbo\",\"planning_reports_issue-wave-cpb-0731-0780-lane-d.md\":\"dP996xjD\",\"planning_reports_issue-wave-cpb-0731-0780-lane-e.md\":\"EfWrVuU7\",\"planning_reports_issue-wave-cpb-0731-0780-lane-f.md\":\"D96QriwK\",\"planning_reports_issue-wave-cpb-0731-0780-next-50-summary.md\":\"CAaGmIIR\",\"planning_reports_issue-wave-cpb-0741-0750-lane-d8.md\":\"B0-P1WCe\",\"planning_reports_issue-wave-cpb-0745-0754-lane-d7.md\":\"SwMiKzpN\",\"planning_reports_issue-wave-cpb-0781-0790-lane-d9.md\":\"wt0jgaF-\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-1.md\":\"BUxNw-mA\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-2.md\":\"CkXCV3sW\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-3.md\":\"jmjsPnW5\",\"planning_reports_issue-wave-cpb-0781-0830-implementation-batch-4-code.md\":\"BV5gU6XA\",\"planning_reports_issue-wave-cpb-0781-0830-lane-a.md\":\"d0IIl9Bu\",\"planning_reports_issue-wave-cpb-0781-0830-lane-b.md\":\"CTYMg8Iw\",\"planning_reports_issue-wave-cpb-0781-0830-lane-c.md\":\"BT2R7I_D\",\"planning_reports_issue-wave-cpb-0781-0830-lane-d.md\":\"XCSxbOqw\",\"planning_reports_issue-wave-cpb-0781-0830-lane-e.md\":\"Cwin3iXB\",\"planning_reports_issue-wave-cpb-0781-0830-lane-e10-implementation-2026-02-23.md\":\"BiE-Symc\",\"planning_reports_issue-wave-cpb-0781-0830-lane-f.md\":\"BPFQECLS\",\"planning_reports_issue-wave-cpb-0781-0830-next-50-summary.md\":\"DqcZypC8\",\"planning_reports_issue-wave-cpb-0784-0785-lane-d10.md\":\"xlQ1IETx\",\"planning_reports_issue-wave-cpb-0981-1000-next-20-summary.md\":\"BgU5VnNR\",\"planning_reports_issue-wave-gh-35-integration-summary-2026-02-22.md\":\"CBKk1zIk\",\"planning_reports_issue-wave-gh-35-lane-1-self.md\":\"DfhtPtl2\",\"planning_reports_issue-wave-gh-35-lane-1.md\":\"D5nErqVG\",\"planning_reports_issue-wave-gh-35-lane-2.md\":\"CcNGRvFL\",\"planning_reports_issue-wave-gh-35-lane-3.md\":\"DAQgaCKe\",\"planning_reports_issue-wave-gh-35-lane-4.md\":\"B12RFh86\",\"planning_reports_issue-wave-gh-35-lane-5.md\":\"BD8OH8gI\",\"planning_reports_issue-wave-gh-35-lane-6.md\":\"nRD_HGSO\",\"planning_reports_issue-wave-gh-35-lane-7.md\":\"DxxhBIAG\",\"planning_reports_issue-wave-gh-next20-lane-f7.md\":\"N9DAWS8Q\",\"planning_reports_issue-wave-gh-next21-lane-1.md\":\"75i6yJDq\",\"planning_reports_issue-wave-gh-next21-lane-2.md\":\"DUrM9pQd\",\"planning_reports_issue-wave-gh-next21-lane-3.md\":\"CopjXRED\",\"planning_reports_issue-wave-gh-next21-lane-4.md\":\"CjHeHuTN\",\"planning_reports_issue-wave-gh-next21-lane-5.md\":\"CqVRPNUn\",\"planning_reports_issue-wave-gh-next21-lane-6.md\":\"C438_6JP\",\"planning_reports_issue-wave-gh-next21-lane-7.md\":\"DTcmOMBk\",\"planning_reports_issue-wave-gh-next32-lane-2.md\":\"ZD5oOf3G\",\"planning_reports_issue-wave-gh-next32-lane-3.md\":\"LxHtuy60\",\"planning_reports_issue-wave-gh-next32-lane-4.md\":\"CtyGhGkg\",\"planning_reports_issue-wave-gh-next32-lane-5.md\":\"CeBXhVqs\",\"planning_reports_issue-wave-gh-next32-lane-6.md\":\"jdmIezy7\",\"planning_reports_issue-wave-gh-next32-lane-7.md\":\"DfDxztub\",\"planning_reports_issue-wave-gh-next32-merge-2026-02-23.md\":\"EHBmEKUY\",\"planning_reports_issue-wave-gh-next32-merge-wave2-2026-02-23.md\":\"BTHFS68W\",\"planning_reports_lane-b-quality-governance-doc-parity-2026-02-23.md\":\"DtLwg33o\",\"planning_reports_next-50-wave1-execution-2026-02-23.md\":\"Dt17zylC\",\"planning_reports_next-50-wave2-execution-2026-02-23.md\":\"HiNJQ0zI\",\"planning_reports_next-50-wave3-execution-2026-02-23.md\":\"bbtdXM_K\",\"planning_reports_next-50-wave4-execution-2026-02-23.md\":\"DXJp55L-\",\"planning_reports_next-50-wave5-execution-2026-02-23.md\":\"B-AVm7G2\",\"planning_reports_next-50-work-items-2026-02-23.md\":\"C6CJFBE_\",\"prd.md\":\"BMTE8K32\",\"provider-catalog.md\":\"B964qiaQ\",\"provider-operations.md\":\"D5ZF3hib\",\"provider-quickstarts.md\":\"C051m4Fo\",\"provider-usage.md\":\"CXJJ-jkb\",\"readme.md\":\"Dj28aGZX\",\"reference_changelog_entry_template.md\":\"Cj1hkkNl\",\"reference_docs_ia_contract.md\":\"BjVwUZt1\",\"reference_docs_migration_matrix.md\":\"DDc-QnaQ\",\"reports_fragemented_explanation.md\":\"CvCEqZfc\",\"reports_fragemented_index.md\":\"1rd9A5eK\",\"reports_fragemented_merged.md\":\"DhTtvTtQ\",\"reports_fragemented_open_items_validation_2026-02-22.md\":\"CDAi-pKU\",\"reports_fragemented_readme.md\":\"DDR_hWRY\",\"reports_open_items_validation_2026-02-22.md\":\"Bi1fZycI\",\"reports_open_items_validation_fork_2026-02-22.md\":\"9oz5QZyI\",\"routing-reference.md\":\"Cm1uQgdF\",\"sdk-access.md\":\"R1OmYGl1\",\"sdk-access_cn.md\":\"C4HDi2HV\",\"sdk-access_fa.md\":\"CewhlDh6\",\"sdk-advanced.md\":\"D-UkRBT3\",\"sdk-advanced_cn.md\":\"DlxV9RMB\",\"sdk-advanced_fa.md\":\"BERu-0Es\",\"sdk-usage.md\":\"CxV176R2\",\"sdk-usage_cn.md\":\"Ct_kjhJx\",\"sdk-usage_fa.md\":\"BLR81jKC\",\"sdk-watcher.md\":\"ivt7FeWG\",\"sdk-watcher_cn.md\":\"D5F7iFnL\",\"sdk-watcher_fa.md\":\"BPSSoX3E\",\"spec.md\":\"CCwohbF1\",\"start-here.md\":\"CkRxFJyh\",\"troubleshooting.md\":\"B2HQYNGa\",\"tutorials_index.md\":\"Bpo6-08b\",\"worklog.md\":\"B-uMnQEw\",\"zh-cn_index.md\":\"zP9zk4aR\",\"zh-tw_index.md\":\"ByOwnU7A\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"cliproxy++\",\"description\":\"cliproxyapi-plusplus documentation\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Start Here\",\"link\":\"/start-here\"},{\"text\":\"Tutorials\",\"link\":\"/tutorials/\"},{\"text\":\"How-to\",\"link\":\"/how-to/\"},{\"text\":\"Explanation\",\"link\":\"/explanation/\"},{\"text\":\"Getting Started\",\"link\":\"/getting-started\"},{\"text\":\"Providers\",\"link\":\"/provider-usage\"},{\"text\":\"Provider Catalog\",\"link\":\"/provider-catalog\"},{\"text\":\"Operations\",\"link\":\"/operations/\"},{\"text\":\"Reference\",\"link\":\"/routing-reference\"},{\"text\":\"API\",\"link\":\"/api/\"},{\"text\":\"Docsets\",\"link\":\"/docsets/\"}],\"sidebar\":[{\"text\":\"Guide\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Getting Started\",\"link\":\"/getting-started\"},{\"text\":\"Install\",\"link\":\"/install\"},{\"text\":\"Provider Usage\",\"link\":\"/provider-usage\"},{\"text\":\"Provider Catalog\",\"link\":\"/provider-catalog\"},{\"text\":\"Provider Operations\",\"link\":\"/provider-operations\"},{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"},{\"text\":\"Planning Boards\",\"link\":\"/planning/\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Routing and Models\",\"link\":\"/routing-reference\"},{\"text\":\"Feature Guides\",\"link\":\"/features/\"},{\"text\":\"Docsets\",\"link\":\"/docsets/\"}]},{\"text\":\"API\",\"items\":[{\"text\":\"API Index\",\"link\":\"/api/\"},{\"text\":\"OpenAI-Compatible API\",\"link\":\"/api/openai-compatible\"},{\"text\":\"Management API\",\"link\":\"/api/management\"},{\"text\":\"Operations API\",\"link\":\"/api/operations\"}]}],\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"MIT Licensed\",\"copyright\":\"Copyright © KooshaPari\"},\"editLink\":{\"pattern\":\"https://github.com/kooshapari/cliproxyapi-plusplus/edit/main/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"outline\":{\"level\":[2,3]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/kooshapari/cliproxyapi-plusplus\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>