Skip to content

Commit 4b30cdb

Browse files
committed
feat(sdk): propagate approval metadata
1 parent f60c474 commit 4b30cdb

30 files changed

Lines changed: 694 additions & 282 deletions

File tree

internal/agent/local_handler.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -713,22 +713,24 @@ func (h *LocalHandler) handleProviderConnect(ctx context.Context, data []byte) (
713713
continue
714714
}
715715
funcs = append(funcs, &sdkv1.ProviderFunctionDescriptor{
716-
Id: fn.GetId(),
717-
Version: fn.GetVersion(),
718-
Tags: fn.GetTags(),
719-
Summary: fn.GetSummary(),
720-
Description: fn.GetDescription(),
721-
OperationId: fn.GetOperationId(),
722-
Deprecated: fn.GetDeprecated(),
723-
InputSchema: fn.GetInputSchema(),
724-
OutputSchema: fn.GetOutputSchema(),
725-
Resource: fn.GetResource(),
726-
Operation: fn.GetOperation(),
727-
Capability: fn.GetCapability(),
728-
Execution: fn.GetExecution(),
729-
Risk: fn.GetRisk(),
730-
Enabled: fn.GetEnabled(),
731-
Permission: fn.GetPermission(),
716+
Id: fn.GetId(),
717+
Version: fn.GetVersion(),
718+
Tags: fn.GetTags(),
719+
Summary: fn.GetSummary(),
720+
Description: fn.GetDescription(),
721+
OperationId: fn.GetOperationId(),
722+
Deprecated: fn.GetDeprecated(),
723+
InputSchema: fn.GetInputSchema(),
724+
OutputSchema: fn.GetOutputSchema(),
725+
Resource: fn.GetResource(),
726+
Operation: fn.GetOperation(),
727+
Capability: fn.GetCapability(),
728+
Execution: fn.GetExecution(),
729+
ApprovalRequired: fn.GetApprovalRequired(),
730+
ApprovalPolicyKey: fn.GetApprovalPolicyKey(),
731+
Risk: fn.GetRisk(),
732+
Enabled: fn.GetEnabled(),
733+
Permission: fn.GetPermission(),
732734
})
733735
}
734736
// 提取元数据(参考 Nacos metadata)

internal/app/agent/upstream.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,8 @@ func (c *UpstreamClient) syncOnce(ctx context.Context) error {
475475
desc.Operation = meta.Operation
476476
desc.Capability = meta.Capability
477477
desc.Execution = meta.Execution
478+
desc.ApprovalRequired = meta.ApprovalRequired
479+
desc.ApprovalPolicyKey = meta.ApprovalPolicyKey
478480
desc.Permission = meta.Permission
479481
desc.InputSchema = meta.InputSchema
480482
desc.OutputSchema = meta.OutputSchema

internal/platform/agentlocal/store.go

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@ type FunctionMeta struct {
4343
InputSchema string // JSON Schema for request body (OpenAPI 3.0.3)
4444
OutputSchema string // JSON Schema for response body (OpenAPI 3.0.3)
4545

46-
Resource string // x-resource extension
47-
Operation string // x-operation extension (business action key)
48-
Capability string // x-capability extension
49-
Execution string // x-execution extension
50-
Risk string // x-risk extension
51-
Permission string // x-permission extension
46+
Resource string // x-resource extension
47+
Operation string // x-operation extension (business action key)
48+
Capability string // x-capability extension
49+
Execution string // x-execution extension
50+
ApprovalRequired bool
51+
ApprovalPolicyKey string
52+
Risk string // x-risk extension
53+
Permission string // x-permission extension
5254

5355
// Full OpenAPI operation as JSON (optional, for advanced use cases)
5456
OpenAPIOperation string // Complete OpenAPI 3.0.3 Operation object as JSON string
@@ -137,21 +139,23 @@ func (s *LocalStore) Register(providerID, serviceID, addr, version string, funcs
137139
}
138140
// Store function metadata including OpenAPI schema
139141
meta := &FunctionMeta{
140-
ID: fid,
141-
Version: fn.GetVersion(),
142-
Tags: fn.GetTags(),
143-
Summary: fn.GetSummary(),
144-
Description: fn.GetDescription(),
145-
OperationID: fn.GetOperationId(),
146-
Deprecated: fn.GetDeprecated(),
147-
InputSchema: fn.GetInputSchema(),
148-
OutputSchema: fn.GetOutputSchema(),
149-
Resource: fn.GetResource(),
150-
Operation: fn.GetOperation(),
151-
Capability: fn.GetCapability(),
152-
Execution: fn.GetExecution(),
153-
Risk: fn.GetRisk(),
154-
Permission: fn.GetPermission(),
142+
ID: fid,
143+
Version: fn.GetVersion(),
144+
Tags: fn.GetTags(),
145+
Summary: fn.GetSummary(),
146+
Description: fn.GetDescription(),
147+
OperationID: fn.GetOperationId(),
148+
Deprecated: fn.GetDeprecated(),
149+
InputSchema: fn.GetInputSchema(),
150+
OutputSchema: fn.GetOutputSchema(),
151+
Resource: fn.GetResource(),
152+
Operation: fn.GetOperation(),
153+
Capability: fn.GetCapability(),
154+
Execution: fn.GetExecution(),
155+
ApprovalRequired: fn.GetApprovalRequired(),
156+
ApprovalPolicyKey: fn.GetApprovalPolicyKey(),
157+
Risk: fn.GetRisk(),
158+
Permission: fn.GetPermission(),
155159
}
156160
if op, err := converter.ToOpenAPIOperation(converter.ProviderFunctionDescriptorDesc{
157161
ID: meta.ID,
@@ -342,22 +346,24 @@ func (s *LocalStore) FunctionMetadata() map[string]*FunctionMeta {
342346
}
343347
// Copy to avoid data races
344348
cp := &FunctionMeta{
345-
ID: meta.ID,
346-
Version: meta.Version,
347-
Tags: append([]string(nil), meta.Tags...),
348-
Summary: meta.Summary,
349-
Description: meta.Description,
350-
OperationID: meta.OperationID,
351-
Deprecated: meta.Deprecated,
352-
InputSchema: meta.InputSchema,
353-
OutputSchema: meta.OutputSchema,
354-
Resource: meta.Resource,
355-
Operation: meta.Operation,
356-
Capability: meta.Capability,
357-
Execution: meta.Execution,
358-
Risk: meta.Risk,
359-
Permission: meta.Permission,
360-
OpenAPIOperation: meta.OpenAPIOperation,
349+
ID: meta.ID,
350+
Version: meta.Version,
351+
Tags: append([]string(nil), meta.Tags...),
352+
Summary: meta.Summary,
353+
Description: meta.Description,
354+
OperationID: meta.OperationID,
355+
Deprecated: meta.Deprecated,
356+
InputSchema: meta.InputSchema,
357+
OutputSchema: meta.OutputSchema,
358+
Resource: meta.Resource,
359+
Operation: meta.Operation,
360+
Capability: meta.Capability,
361+
Execution: meta.Execution,
362+
ApprovalRequired: meta.ApprovalRequired,
363+
ApprovalPolicyKey: meta.ApprovalPolicyKey,
364+
Risk: meta.Risk,
365+
Permission: meta.Permission,
366+
OpenAPIOperation: meta.OpenAPIOperation,
361367
}
362368
out[fid] = cp
363369
}

pkg/pb/croupier/sdk/v1/provider.pb.go

Lines changed: 30 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/croupier/sdk/v1/provider.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ message ProviderFunctionDescriptor {
3232
string permission = 14; // x-permission: optional permission identifier
3333
string capability = 15; // x-capability: collection_query|item_query|create|update|delete|action|task|report
3434
string execution = 16; // x-execution: sync|task
35+
36+
// Approval policy is governance metadata independent of execution mode.
37+
bool approval_required = 17;
38+
string approval_policy_key = 18;
3539
}
3640

3741
// ProviderConnectRequest establishes a provider session on the current SDK-Agent connection.

0 commit comments

Comments
 (0)