Repository navigation
Expand file tree
/
Copy pathextension.cpp
More file actions
45 lines (39 loc) · 1.56 KB
/
Copy pathextension.cpp
File metadata and controls
45 lines (39 loc) · 1.56 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
// Copyright (c) 2025 Elias Bachaalany
// SPDX-License-Identifier: MIT
#include <copilot/extension.hpp>
#include <cstdlib>
namespace copilot
{
std::future<ExtensionSession> join_session(JoinSessionConfig config)
{
return std::async(
std::launch::async,
[config = std::move(config)]() mutable
{
const char* session_id = std::getenv("SESSION_ID");
if (!session_id || !*session_id)
throw std::runtime_error(
"join_session is only available in a Copilot extension child process");
config.session.disable_resume = true;
config.session.requested_environment_variables =
std::move(config.requested_environment_variables);
if (!config.factories.empty())
{
config.session.factories = std::vector<json>{};
for (const auto& factory : config.factories)
{
if (factory)
config.session.factories->push_back(factory->meta);
}
config.session.factory_objects = config.factories;
}
ClientOptions options;
options.connection = RuntimeConnection::for_parent_process();
auto client = std::make_shared<Client>(std::move(options));
client->start().get();
auto session =
client->resume_session(session_id, std::move(config.session)).get();
return ExtensionSession{std::move(client), std::move(session)};
});
}
} // namespace copilot