mirror of
https://github.com/github/awesome-copilot.git
synced 2026-03-23 09:35:13 +00:00
Align Copilot SDK documentation with permission handling requirements (#1107)
* Apply permission handler requirements across Copilot SDK docs Co-authored-by: jamesmontemagno <1676321+jamesmontemagno@users.noreply.github.com> Agent-Logs-Url: https://github.com/jamesmontemagno/awesome-copilot/sessions/adf27a88-92f8-4ca6-b3fe-1204e3bb9963 * Polish permission update formatting in SDK examples Co-authored-by: jamesmontemagno <1676321+jamesmontemagno@users.noreply.github.com> Agent-Logs-Url: https://github.com/jamesmontemagno/awesome-copilot/sessions/adf27a88-92f8-4ca6-b3fe-1204e3bb9963 * Fix review comments on SDK permission handling PR Address 5 review comments from PR #1103: 1. Fix invalid object literal syntax (stray comma) in resumeSession example in copilot-sdk-nodejs.instructions.md 2. Replace unused PermissionHandler import with actual usage in cookbook/copilot-sdk/python/recipe/ralph_loop.py (was using inline lambda instead) 3. Replace unused approveAll import with actual usage in cookbook/copilot-sdk/nodejs/recipe/ralph-loop.ts (was using inline handler instead) 4. Add missing PermissionHandler import to 4 Python code snippets in skills/copilot-sdk/SKILL.md that reference it without importing 5. Add missing approveAll import to 3 TypeScript code snippets in skills/copilot-sdk/SKILL.md that reference it without importing * Refactor session creation to improve code formatting and consistency across SDK examples * Fix formatting: split multi-property lines and put closing braces on own lines Address review comments on PR #1107: - Split OnPermissionRequest + Model onto separate lines in Go, C#, TypeScript - Put closing }); on its own line consistently across all examples - Fix indentation in SKILL.md Quick Start, CLI URL, Error Handling sections - Fix cookbook Go multiple-sessions and error-handling formatting - Fix ralph-loop.md TypeScript indentation --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jamesmontemagno <1676321+jamesmontemagno@users.noreply.github.com>
This commit is contained in:
@@ -49,10 +49,13 @@ dotnet add package GitHub.Copilot.SDK
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
import { CopilotClient } from "@github/copilot-sdk";
|
||||
import { CopilotClient, approveAll } from "@github/copilot-sdk";
|
||||
|
||||
const client = new CopilotClient();
|
||||
const session = await client.createSession({ model: "gpt-4.1" });
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
});
|
||||
|
||||
const response = await session.sendAndWait({ prompt: "What is 2 + 2?" });
|
||||
console.log(response?.data.content);
|
||||
@@ -66,13 +69,16 @@ Run: `npx tsx index.ts`
|
||||
### Python
|
||||
```python
|
||||
import asyncio
|
||||
from copilot import CopilotClient
|
||||
from copilot import CopilotClient, PermissionHandler
|
||||
|
||||
async def main():
|
||||
client = CopilotClient()
|
||||
await client.start()
|
||||
|
||||
session = await client.create_session({"model": "gpt-4.1"})
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
})
|
||||
response = await session.send_and_wait({"prompt": "What is 2 + 2?"})
|
||||
|
||||
print(response.data.content)
|
||||
@@ -99,7 +105,10 @@ func main() {
|
||||
}
|
||||
defer client.Stop()
|
||||
|
||||
session, err := client.CreateSession(&copilot.SessionConfig{Model: "gpt-4.1"})
|
||||
session, err := client.CreateSession(&copilot.SessionConfig{
|
||||
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
|
||||
Model: "gpt-4.1",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -119,7 +128,11 @@ func main() {
|
||||
using GitHub.Copilot.SDK;
|
||||
|
||||
await using var client = new CopilotClient();
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig { Model = "gpt-4.1" });
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig
|
||||
{
|
||||
OnPermissionRequest = PermissionHandler.ApproveAll,
|
||||
Model = "gpt-4.1",
|
||||
});
|
||||
|
||||
var response = await session.SendAndWaitAsync(new MessageOptions { Prompt = "What is 2 + 2?" });
|
||||
Console.WriteLine(response?.Data.Content);
|
||||
@@ -133,10 +146,11 @@ Enable real-time output for better UX:
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
import { CopilotClient, SessionEvent } from "@github/copilot-sdk";
|
||||
import { CopilotClient, approveAll, SessionEvent } from "@github/copilot-sdk";
|
||||
|
||||
const client = new CopilotClient();
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
streaming: true,
|
||||
});
|
||||
@@ -160,7 +174,7 @@ process.exit(0);
|
||||
```python
|
||||
import asyncio
|
||||
import sys
|
||||
from copilot import CopilotClient
|
||||
from copilot import CopilotClient, PermissionHandler
|
||||
from copilot.generated.session_events import SessionEventType
|
||||
|
||||
async def main():
|
||||
@@ -168,6 +182,7 @@ async def main():
|
||||
await client.start()
|
||||
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
"streaming": True,
|
||||
})
|
||||
@@ -189,6 +204,7 @@ asyncio.run(main())
|
||||
### Go
|
||||
```go
|
||||
session, err := client.CreateSession(&copilot.SessionConfig{
|
||||
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
|
||||
Model: "gpt-4.1",
|
||||
Streaming: true,
|
||||
})
|
||||
@@ -209,6 +225,7 @@ _, err = session.SendAndWait(copilot.MessageOptions{Prompt: "Tell me a short jok
|
||||
```csharp
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig
|
||||
{
|
||||
OnPermissionRequest = PermissionHandler.ApproveAll,
|
||||
Model = "gpt-4.1",
|
||||
Streaming = true,
|
||||
});
|
||||
@@ -233,7 +250,7 @@ Define tools that Copilot can invoke during reasoning. When you define a tool, y
|
||||
|
||||
### TypeScript (JSON Schema)
|
||||
```typescript
|
||||
import { CopilotClient, defineTool, SessionEvent } from "@github/copilot-sdk";
|
||||
import { CopilotClient, approveAll, defineTool, SessionEvent } from "@github/copilot-sdk";
|
||||
|
||||
const getWeather = defineTool("get_weather", {
|
||||
description: "Get the current weather for a city",
|
||||
@@ -256,6 +273,7 @@ const getWeather = defineTool("get_weather", {
|
||||
|
||||
const client = new CopilotClient();
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
streaming: true,
|
||||
tools: [getWeather],
|
||||
@@ -280,7 +298,7 @@ process.exit(0);
|
||||
import asyncio
|
||||
import random
|
||||
import sys
|
||||
from copilot import CopilotClient
|
||||
from copilot import CopilotClient, PermissionHandler
|
||||
from copilot.tools import define_tool
|
||||
from copilot.generated.session_events import SessionEventType
|
||||
from pydantic import BaseModel, Field
|
||||
@@ -301,6 +319,7 @@ async def main():
|
||||
await client.start()
|
||||
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
"streaming": True,
|
||||
"tools": [get_weather],
|
||||
@@ -350,6 +369,7 @@ getWeather := copilot.DefineTool(
|
||||
)
|
||||
|
||||
session, _ := client.CreateSession(&copilot.SessionConfig{
|
||||
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
|
||||
Model: "gpt-4.1",
|
||||
Streaming: true,
|
||||
Tools: []copilot.Tool{getWeather},
|
||||
@@ -376,6 +396,7 @@ var getWeather = AIFunctionFactory.Create(
|
||||
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig
|
||||
{
|
||||
OnPermissionRequest = PermissionHandler.ApproveAll,
|
||||
Model = "gpt-4.1",
|
||||
Streaming = true,
|
||||
Tools = [getWeather],
|
||||
@@ -398,7 +419,7 @@ Build a complete interactive assistant:
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
import { CopilotClient, defineTool, SessionEvent } from "@github/copilot-sdk";
|
||||
import { CopilotClient, approveAll, defineTool, SessionEvent } from "@github/copilot-sdk";
|
||||
import * as readline from "readline";
|
||||
|
||||
const getWeather = defineTool("get_weather", {
|
||||
@@ -420,6 +441,7 @@ const getWeather = defineTool("get_weather", {
|
||||
|
||||
const client = new CopilotClient();
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
streaming: true,
|
||||
tools: [getWeather],
|
||||
@@ -462,7 +484,7 @@ prompt();
|
||||
import asyncio
|
||||
import random
|
||||
import sys
|
||||
from copilot import CopilotClient
|
||||
from copilot import CopilotClient, PermissionHandler
|
||||
from copilot.tools import define_tool
|
||||
from copilot.generated.session_events import SessionEventType
|
||||
from pydantic import BaseModel, Field
|
||||
@@ -482,6 +504,7 @@ async def main():
|
||||
await client.start()
|
||||
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
"streaming": True,
|
||||
"tools": [get_weather],
|
||||
@@ -522,6 +545,7 @@ Connect to MCP (Model Context Protocol) servers for pre-built tools. Connect to
|
||||
### TypeScript
|
||||
```typescript
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
mcpServers: {
|
||||
github: {
|
||||
@@ -535,6 +559,7 @@ const session = await client.createSession({
|
||||
### Python
|
||||
```python
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
"mcp_servers": {
|
||||
"github": {
|
||||
@@ -548,6 +573,7 @@ session = await client.create_session({
|
||||
### Go
|
||||
```go
|
||||
session, _ := client.CreateSession(&copilot.SessionConfig{
|
||||
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
|
||||
Model: "gpt-4.1",
|
||||
MCPServers: map[string]copilot.MCPServerConfig{
|
||||
"github": {
|
||||
@@ -562,6 +588,7 @@ session, _ := client.CreateSession(&copilot.SessionConfig{
|
||||
```csharp
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig
|
||||
{
|
||||
OnPermissionRequest = PermissionHandler.ApproveAll,
|
||||
Model = "gpt-4.1",
|
||||
McpServers = new Dictionary<string, McpServerConfig>
|
||||
{
|
||||
@@ -581,6 +608,7 @@ Define specialized AI personas for specific tasks:
|
||||
### TypeScript
|
||||
```typescript
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
customAgents: [{
|
||||
name: "pr-reviewer",
|
||||
@@ -594,6 +622,7 @@ const session = await client.createSession({
|
||||
### Python
|
||||
```python
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
"custom_agents": [{
|
||||
"name": "pr-reviewer",
|
||||
@@ -611,6 +640,7 @@ Customize the AI's behavior and personality:
|
||||
### TypeScript
|
||||
```typescript
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
systemMessage: {
|
||||
content: "You are a helpful assistant for our engineering team. Always be concise.",
|
||||
@@ -621,6 +651,7 @@ const session = await client.createSession({
|
||||
### Python
|
||||
```python
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
"system_message": {
|
||||
"content": "You are a helpful assistant for our engineering team. Always be concise.",
|
||||
@@ -645,7 +676,10 @@ const client = new CopilotClient({
|
||||
cliUrl: "localhost:4321"
|
||||
});
|
||||
|
||||
const session = await client.createSession({ model: "gpt-4.1" });
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
});
|
||||
```
|
||||
|
||||
#### Python
|
||||
@@ -655,7 +689,10 @@ client = CopilotClient({
|
||||
})
|
||||
await client.start()
|
||||
|
||||
session = await client.create_session({"model": "gpt-4.1"})
|
||||
session = await client.create_session({
|
||||
"on_permission_request": PermissionHandler.approve_all,
|
||||
"model": "gpt-4.1",
|
||||
})
|
||||
```
|
||||
|
||||
#### Go
|
||||
@@ -668,7 +705,10 @@ if err := client.Start(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
session, _ := client.CreateSession(&copilot.SessionConfig{Model: "gpt-4.1"})
|
||||
session, _ := client.CreateSession(&copilot.SessionConfig{
|
||||
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
|
||||
Model: "gpt-4.1",
|
||||
})
|
||||
```
|
||||
|
||||
#### .NET
|
||||
@@ -678,7 +718,11 @@ using var client = new CopilotClient(new CopilotClientOptions
|
||||
CliUrl = "localhost:4321"
|
||||
});
|
||||
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig { Model = "gpt-4.1" });
|
||||
await using var session = await client.CreateSessionAsync(new SessionConfig
|
||||
{
|
||||
OnPermissionRequest = PermissionHandler.ApproveAll,
|
||||
Model = "gpt-4.1",
|
||||
});
|
||||
```
|
||||
|
||||
**Note:** When `cliUrl` is provided, the SDK will not spawn or manage a CLI process - it only connects to the existing server.
|
||||
@@ -731,6 +775,7 @@ Save and resume conversations across restarts:
|
||||
### Create with Custom ID
|
||||
```typescript
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
sessionId: "user-123-conversation",
|
||||
model: "gpt-4.1"
|
||||
});
|
||||
@@ -738,7 +783,7 @@ const session = await client.createSession({
|
||||
|
||||
### Resume Session
|
||||
```typescript
|
||||
const session = await client.resumeSession("user-123-conversation");
|
||||
const session = await client.resumeSession("user-123-conversation", { onPermissionRequest: approveAll });
|
||||
await session.send({ prompt: "What did we discuss earlier?" });
|
||||
```
|
||||
|
||||
@@ -753,7 +798,10 @@ await client.deleteSession("old-session-id");
|
||||
```typescript
|
||||
try {
|
||||
const client = new CopilotClient();
|
||||
const session = await client.createSession({ model: "gpt-4.1" });
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
});
|
||||
const response = await session.sendAndWait(
|
||||
{ prompt: "Hello!" },
|
||||
30000 // timeout in ms
|
||||
@@ -785,7 +833,10 @@ process.on("SIGINT", async () => {
|
||||
|
||||
### Multi-turn Conversation
|
||||
```typescript
|
||||
const session = await client.createSession({ model: "gpt-4.1" });
|
||||
const session = await client.createSession({
|
||||
onPermissionRequest: approveAll,
|
||||
model: "gpt-4.1",
|
||||
});
|
||||
|
||||
await session.sendAndWait({ prompt: "My name is Alice" });
|
||||
await session.sendAndWait({ prompt: "What's my name?" });
|
||||
|
||||
Reference in New Issue
Block a user