@haaaiawd/second-nature 0.1.18 → 0.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +911 -855
- package/openclaw.plugin.json +29 -29
- package/package.json +52 -52
- package/runtime/cli/commands/index.d.ts +14 -14
- package/runtime/cli/commands/index.js +224 -193
- package/runtime/cli/explain/explain-surface-subject.d.ts +8 -8
- package/runtime/cli/explain/explain-surface-subject.js +9 -9
- package/runtime/cli/explain/format-explanation.d.ts +12 -12
- package/runtime/cli/explain/format-explanation.js +12 -12
- package/runtime/cli/explain/resolve-subject.js +41 -41
- package/runtime/cli/host-capability/classify-delivery.d.ts +14 -14
- package/runtime/cli/host-capability/classify-delivery.js +20 -20
- package/runtime/cli/host-capability/probe-host-capability.d.ts +2 -2
- package/runtime/cli/host-capability/probe-host-capability.js +58 -58
- package/runtime/cli/host-capability/record-host-capability.d.ts +6 -6
- package/runtime/cli/host-capability/record-host-capability.js +14 -14
- package/runtime/cli/host-capability/types.d.ts +71 -71
- package/runtime/cli/host-capability/types.js +6 -6
- package/runtime/cli/host-smoke/run-host-smoke.d.ts +2 -2
- package/runtime/cli/host-smoke/run-host-smoke.js +40 -40
- package/runtime/cli/host-smoke/types.d.ts +35 -35
- package/runtime/cli/host-smoke/types.js +6 -6
- package/runtime/cli/index.js +67 -58
- package/runtime/cli/ops/heartbeat-surface.d.ts +45 -38
- package/runtime/cli/ops/heartbeat-surface.js +79 -73
- package/runtime/cli/ops/ops-router.d.ts +32 -19
- package/runtime/cli/ops/ops-router.js +188 -89
- package/runtime/cli/ops/show-operator-fallback.d.ts +13 -13
- package/runtime/cli/ops/show-operator-fallback.js +22 -22
- package/runtime/cli/ops/workspace-heartbeat-runner.d.ts +40 -19
- package/runtime/cli/ops/workspace-heartbeat-runner.js +93 -39
- package/runtime/cli/read-models/index.d.ts +46 -29
- package/runtime/cli/read-models/index.js +391 -256
- package/runtime/cli/read-models/operator-explain-map.d.ts +6 -6
- package/runtime/cli/read-models/operator-explain-map.js +10 -10
- package/runtime/cli/read-models/types.d.ts +129 -79
- package/runtime/cli/runtime/runtime-artifact-boundary.d.ts +28 -28
- package/runtime/cli/runtime/runtime-artifact-boundary.js +94 -94
- package/runtime/connectors/base/contract.d.ts +87 -87
- package/runtime/connectors/base/execution-policy.d.ts +47 -47
- package/runtime/connectors/base/execution-policy.js +82 -82
- package/runtime/connectors/base/index.d.ts +8 -8
- package/runtime/connectors/base/index.js +8 -8
- package/runtime/connectors/base/manifest.d.ts +64 -64
- package/runtime/connectors/base/manifest.js +86 -86
- package/runtime/connectors/base/map-life-evidence.d.ts +16 -16
- package/runtime/connectors/base/map-life-evidence.js +79 -79
- package/runtime/connectors/base/policy-layer.d.ts +29 -29
- package/runtime/connectors/base/policy-layer.js +198 -198
- package/runtime/connectors/base/route-planner.js +99 -99
- package/runtime/connectors/index.d.ts +5 -5
- package/runtime/connectors/index.js +5 -5
- package/runtime/connectors/near-real/near-real-connector-smoke.d.ts +19 -19
- package/runtime/connectors/near-real/near-real-connector-smoke.js +152 -152
- package/runtime/core/second-nature/heartbeat/heartbeat-executor.js +114 -114
- package/runtime/core/second-nature/heartbeat/heartbeat-loop.d.ts +63 -63
- package/runtime/core/second-nature/heartbeat/heartbeat-loop.js +162 -139
- package/runtime/core/second-nature/heartbeat/index.d.ts +8 -8
- package/runtime/core/second-nature/heartbeat/index.js +7 -7
- package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.d.ts +21 -21
- package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.js +35 -35
- package/runtime/core/second-nature/heartbeat/runtime-snapshot.d.ts +28 -28
- package/runtime/core/second-nature/heartbeat/runtime-snapshot.js +35 -35
- package/runtime/core/second-nature/heartbeat/signal.d.ts +42 -42
- package/runtime/core/second-nature/heartbeat/snapshot-builder.d.ts +51 -51
- package/runtime/core/second-nature/index.d.ts +22 -22
- package/runtime/core/second-nature/index.js +22 -22
- package/runtime/core/second-nature/orchestrator/effect-dispatcher.d.ts +100 -100
- package/runtime/core/second-nature/orchestrator/effect-dispatcher.js +144 -144
- package/runtime/core/second-nature/orchestrator/guard-layer.d.ts +8 -8
- package/runtime/core/second-nature/orchestrator/guard-layer.js +110 -110
- package/runtime/core/second-nature/orchestrator/intent-planner.d.ts +13 -13
- package/runtime/core/second-nature/orchestrator/intent-planner.js +199 -199
- package/runtime/core/second-nature/orchestrator/lease-manager.d.ts +14 -14
- package/runtime/core/second-nature/orchestrator/lease-manager.js +58 -58
- package/runtime/core/second-nature/outreach/build-outreach-draft-request.d.ts +6 -6
- package/runtime/core/second-nature/outreach/build-outreach-draft-request.js +63 -63
- package/runtime/core/second-nature/outreach/delivery-target.d.ts +26 -26
- package/runtime/core/second-nature/outreach/delivery-target.js +70 -70
- package/runtime/core/second-nature/outreach/dispatch-user-outreach.d.ts +38 -38
- package/runtime/core/second-nature/outreach/dispatch-user-outreach.js +119 -119
- package/runtime/core/second-nature/outreach/judge-input-from-snapshot.d.ts +7 -7
- package/runtime/core/second-nature/outreach/judge-input-from-snapshot.js +45 -45
- package/runtime/core/second-nature/outreach/judge-outreach.d.ts +40 -40
- package/runtime/core/second-nature/outreach/judge-outreach.js +121 -121
- package/runtime/core/second-nature/quiet/run-source-backed-quiet.d.ts +21 -21
- package/runtime/core/second-nature/quiet/run-source-backed-quiet.js +123 -123
- package/runtime/core/second-nature/rhythm/planner-rhythm-window.d.ts +15 -15
- package/runtime/core/second-nature/rhythm/planner-rhythm-window.js +52 -52
- package/runtime/core/second-nature/rhythm/policy-bridge.d.ts +19 -19
- package/runtime/core/second-nature/rhythm/policy-bridge.js +34 -34
- package/runtime/core/second-nature/runtime/service-entry.js +45 -45
- package/runtime/core/second-nature/types.d.ts +51 -51
- package/runtime/guidance/draft-outreach-message.d.ts +7 -7
- package/runtime/guidance/draft-outreach-message.js +42 -42
- package/runtime/guidance/evidence-guidance.d.ts +40 -40
- package/runtime/guidance/evidence-guidance.js +52 -52
- package/runtime/guidance/index.d.ts +11 -11
- package/runtime/guidance/index.js +11 -11
- package/runtime/guidance/outreach-draft-schema.d.ts +228 -228
- package/runtime/guidance/outreach-draft-schema.js +80 -80
- package/runtime/observability/audit/append-only-audit-store.d.ts +14 -14
- package/runtime/observability/audit/append-only-audit-store.js +21 -21
- package/runtime/observability/audit/audit-envelope.d.ts +51 -51
- package/runtime/observability/audit/audit-envelope.js +130 -130
- package/runtime/observability/audit/verify-audit-hash-chain.d.ts +23 -23
- package/runtime/observability/audit/verify-audit-hash-chain.js +83 -83
- package/runtime/observability/db/index.js +47 -47
- package/runtime/observability/db/schema/host-capability-reports.d.ts +180 -180
- package/runtime/observability/db/schema/host-capability-reports.js +12 -12
- package/runtime/observability/db/schema/index.d.ts +947 -947
- package/runtime/observability/db/schema/index.js +71 -71
- package/runtime/observability/index.d.ts +20 -20
- package/runtime/observability/index.js +19 -19
- package/runtime/observability/query/explain-query.d.ts +48 -48
- package/runtime/observability/query/explain-query.js +114 -114
- package/runtime/observability/query/export-audit-bundle.d.ts +22 -22
- package/runtime/observability/query/export-audit-bundle.js +27 -27
- package/runtime/observability/services/decision-ledger.d.ts +46 -46
- package/runtime/observability/services/decision-ledger.js +161 -161
- package/runtime/observability/services/governance-audit.d.ts +41 -41
- package/runtime/observability/services/governance-audit.js +163 -163
- package/runtime/observability/services/governance-plane-recorder.d.ts +47 -47
- package/runtime/observability/services/governance-plane-recorder.js +55 -55
- package/runtime/observability/services/lived-experience-audit.d.ts +97 -97
- package/runtime/observability/services/lived-experience-audit.js +162 -162
- package/runtime/observability/services/observability-retention.d.ts +10 -0
- package/runtime/observability/services/observability-retention.js +37 -0
- package/runtime/observability/services/runtime-decision-recorder.d.ts +29 -29
- package/runtime/observability/services/runtime-decision-recorder.js +94 -94
- package/runtime/storage/bootstrap/native-sqlite-probe.d.ts +7 -7
- package/runtime/storage/bootstrap/native-sqlite-probe.js +28 -28
- package/runtime/storage/bootstrap/repair-gate.d.ts +17 -17
- package/runtime/storage/bootstrap/repair-gate.js +71 -71
- package/runtime/storage/bootstrap/storage-mode-smoke.d.ts +38 -38
- package/runtime/storage/bootstrap/storage-mode-smoke.js +85 -85
- package/runtime/storage/db/index.js +61 -61
- package/runtime/storage/db/schema/delivery-attempts.d.ts +199 -199
- package/runtime/storage/db/schema/delivery-attempts.js +13 -13
- package/runtime/storage/db/schema/index.d.ts +9 -9
- package/runtime/storage/db/schema/index.js +9 -9
- package/runtime/storage/db/schema/life-evidence-index.d.ts +161 -161
- package/runtime/storage/db/schema/life-evidence-index.js +11 -11
- package/runtime/storage/db/schema/operator-fallback-artifacts.d.ts +161 -161
- package/runtime/storage/db/schema/operator-fallback-artifacts.js +11 -11
- package/runtime/storage/db/schema/policies.d.ts +98 -98
- package/runtime/storage/db/schema/policies.js +8 -8
- package/runtime/storage/delivery/query-delivery-attempts.d.ts +3 -3
- package/runtime/storage/delivery/query-delivery-attempts.js +32 -32
- package/runtime/storage/delivery/types.d.ts +27 -27
- package/runtime/storage/delivery/types.js +1 -1
- package/runtime/storage/delivery/write-delivery-attempt.d.ts +6 -6
- package/runtime/storage/delivery/write-delivery-attempt.js +36 -36
- package/runtime/storage/fallback/load-operator-fallback.d.ts +14 -14
- package/runtime/storage/fallback/load-operator-fallback.js +47 -47
- package/runtime/storage/fallback/operator-fallback-types.d.ts +9 -9
- package/runtime/storage/fallback/operator-fallback-types.js +1 -1
- package/runtime/storage/fallback/operator-fallback-view.d.ts +11 -11
- package/runtime/storage/fallback/operator-fallback-view.js +1 -1
- package/runtime/storage/fallback/write-operator-fallback.d.ts +6 -6
- package/runtime/storage/fallback/write-operator-fallback.js +21 -21
- package/runtime/storage/index.d.ts +37 -37
- package/runtime/storage/index.js +30 -30
- package/runtime/storage/life-evidence/append-life-evidence.d.ts +7 -7
- package/runtime/storage/life-evidence/append-life-evidence.js +64 -64
- package/runtime/storage/life-evidence/types.d.ts +45 -45
- package/runtime/storage/life-evidence/types.js +6 -6
- package/runtime/storage/quiet/persist-quiet-artifact.d.ts +7 -7
- package/runtime/storage/quiet/persist-quiet-artifact.js +22 -22
- package/runtime/storage/quiet/quiet-artifact-types.d.ts +18 -18
- package/runtime/storage/quiet/quiet-artifact-types.js +1 -1
- package/runtime/storage/quiet/quiet-artifact-writer.d.ts +15 -15
- package/runtime/storage/quiet/quiet-artifact-writer.js +56 -56
- package/runtime/storage/repositories/credential-repository.js +30 -30
- package/runtime/storage/rhythm/rhythm-policy-snapshot.d.ts +10 -10
- package/runtime/storage/rhythm/rhythm-policy-snapshot.js +34 -34
- package/runtime/storage/services/credential-vault.d.ts +13 -13
- package/runtime/storage/services/credential-vault.js +116 -116
- package/runtime/storage/snapshots/continuity-snapshot.d.ts +9 -9
- package/runtime/storage/snapshots/continuity-snapshot.js +41 -41
- package/runtime/storage/snapshots/life-evidence-snapshot.d.ts +6 -6
- package/runtime/storage/snapshots/life-evidence-snapshot.js +114 -114
- package/runtime/storage/snapshots/types.d.ts +58 -58
- package/runtime/storage/snapshots/types.js +1 -1
- package/runtime/storage/state-api.js +104 -104
- package/runtime/storage/user-interest/load-user-interest-snapshot.d.ts +2 -2
- package/runtime/storage/user-interest/load-user-interest-snapshot.js +150 -150
- package/runtime/storage/user-interest/types.d.ts +25 -25
- package/runtime/storage/user-interest/types.js +1 -1
- package/workspace-ops-bridge.js +90 -81
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import type { CredentialContext, CredentialState } from "../../shared/types/credential.js";
|
|
2
|
-
import { type FailureClass } from "./failure-taxonomy.js";
|
|
3
|
-
export declare const CHANNEL_TYPES: readonly ["api_rest", "api_rpc", "a2a", "mcp", "cli", "skill", "browser"];
|
|
4
|
-
export type ChannelType = (typeof CHANNEL_TYPES)[number];
|
|
5
|
-
export declare const CAPABILITY_INTENTS: readonly ["feed.read", "post.publish", "comment.reply", "notification.list", "message.send", "agent.register", "agent.heartbeat", "work.discover", "task.claim"];
|
|
6
|
-
export type CapabilityIntent = (typeof CAPABILITY_INTENTS)[number];
|
|
7
|
-
export interface ConnectorRequest {
|
|
8
|
-
platformId: string;
|
|
9
|
-
intent: CapabilityIntent;
|
|
10
|
-
payload: Record<string, unknown>;
|
|
11
|
-
preferredChannel?: ChannelType;
|
|
12
|
-
timeoutMs?: number;
|
|
13
|
-
idempotencyKey?: string;
|
|
14
|
-
decisionId?: string;
|
|
15
|
-
intentId?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface ExecutionPlan {
|
|
18
|
-
platformId: string;
|
|
19
|
-
intent: CapabilityIntent;
|
|
20
|
-
channel: ChannelType;
|
|
21
|
-
endpointMode: "rest_json" | "a2a_envelope" | "cli_stdout" | "skill_call";
|
|
22
|
-
idempotencyKey?: string;
|
|
23
|
-
/** True when selected channel is manifest-marked degraded (cli/skill/browser). */
|
|
24
|
-
degraded?: boolean;
|
|
25
|
-
}
|
|
26
|
-
export interface ConnectorResult<T> {
|
|
27
|
-
status: "success" | "retryable_failure" | "terminal_failure";
|
|
28
|
-
data?: T;
|
|
29
|
-
failureClass?: FailureClass;
|
|
30
|
-
retryAfterMs?: number;
|
|
31
|
-
metadata: {
|
|
32
|
-
platformId: string;
|
|
33
|
-
channel: ChannelType;
|
|
34
|
-
latencyMs: number;
|
|
35
|
-
degraded?: boolean;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export interface RawAttempt {
|
|
39
|
-
platformId: string;
|
|
40
|
-
channel: ChannelType;
|
|
41
|
-
latencyMs: number;
|
|
42
|
-
degraded?: boolean;
|
|
43
|
-
success: boolean;
|
|
44
|
-
payload?: unknown;
|
|
45
|
-
error?: unknown;
|
|
46
|
-
}
|
|
47
|
-
export interface CredentialContextPort {
|
|
48
|
-
loadCredentialState(platformId: string): Promise<CredentialContext>;
|
|
49
|
-
}
|
|
50
|
-
export interface CooldownLedgerPort {
|
|
51
|
-
loadCooldownState(platformId: string, intent: CapabilityIntent): Promise<{
|
|
52
|
-
blocked: boolean;
|
|
53
|
-
retryAfterMs?: number;
|
|
54
|
-
}>;
|
|
55
|
-
}
|
|
56
|
-
export interface RouteContextPort extends CredentialContextPort, CooldownLedgerPort {
|
|
57
|
-
}
|
|
58
|
-
export interface ConnectorManifestLike {
|
|
59
|
-
platformId: string;
|
|
60
|
-
supportedCapabilities: CapabilityIntent[];
|
|
61
|
-
channelPriority: ChannelType[];
|
|
62
|
-
credentialTypes: string[];
|
|
63
|
-
degradedChannels?: ChannelType[];
|
|
64
|
-
sourceRefPolicy?: {
|
|
65
|
-
minSourceRefs?: number;
|
|
66
|
-
rejectInlineSensitivePayload?: boolean;
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
export interface ConnectorManifestLoader {
|
|
70
|
-
loadManifest(platformId: string): ConnectorManifestLike;
|
|
71
|
-
}
|
|
72
|
-
export interface RoutePlanner {
|
|
73
|
-
planRoute(intent: CapabilityIntent, request: ConnectorRequest): Promise<ExecutionPlan>;
|
|
74
|
-
}
|
|
75
|
-
export interface ExecutionRunner {
|
|
76
|
-
run(plan: ExecutionPlan, request: ConnectorRequest): Promise<RawAttempt>;
|
|
77
|
-
}
|
|
78
|
-
export interface ConnectorExecutionPort {
|
|
79
|
-
executeCapability(intent: CapabilityIntent, request: ConnectorRequest): Promise<ConnectorResult<unknown>>;
|
|
80
|
-
}
|
|
81
|
-
export declare function normalizeOutcome(attempt: RawAttempt): ConnectorResult<unknown>;
|
|
82
|
-
export declare function createConnectorContractCore(input: {
|
|
83
|
-
manifestLoader: ConnectorManifestLoader;
|
|
84
|
-
routePlanner: RoutePlanner;
|
|
85
|
-
executionRunner: ExecutionRunner;
|
|
86
|
-
}): ConnectorExecutionPort;
|
|
87
|
-
export declare function isCredentialActive(state: CredentialState): boolean;
|
|
1
|
+
import type { CredentialContext, CredentialState } from "../../shared/types/credential.js";
|
|
2
|
+
import { type FailureClass } from "./failure-taxonomy.js";
|
|
3
|
+
export declare const CHANNEL_TYPES: readonly ["api_rest", "api_rpc", "a2a", "mcp", "cli", "skill", "browser"];
|
|
4
|
+
export type ChannelType = (typeof CHANNEL_TYPES)[number];
|
|
5
|
+
export declare const CAPABILITY_INTENTS: readonly ["feed.read", "post.publish", "comment.reply", "notification.list", "message.send", "agent.register", "agent.heartbeat", "work.discover", "task.claim"];
|
|
6
|
+
export type CapabilityIntent = (typeof CAPABILITY_INTENTS)[number];
|
|
7
|
+
export interface ConnectorRequest {
|
|
8
|
+
platformId: string;
|
|
9
|
+
intent: CapabilityIntent;
|
|
10
|
+
payload: Record<string, unknown>;
|
|
11
|
+
preferredChannel?: ChannelType;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
idempotencyKey?: string;
|
|
14
|
+
decisionId?: string;
|
|
15
|
+
intentId?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ExecutionPlan {
|
|
18
|
+
platformId: string;
|
|
19
|
+
intent: CapabilityIntent;
|
|
20
|
+
channel: ChannelType;
|
|
21
|
+
endpointMode: "rest_json" | "a2a_envelope" | "cli_stdout" | "skill_call";
|
|
22
|
+
idempotencyKey?: string;
|
|
23
|
+
/** True when selected channel is manifest-marked degraded (cli/skill/browser). */
|
|
24
|
+
degraded?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ConnectorResult<T> {
|
|
27
|
+
status: "success" | "retryable_failure" | "terminal_failure";
|
|
28
|
+
data?: T;
|
|
29
|
+
failureClass?: FailureClass;
|
|
30
|
+
retryAfterMs?: number;
|
|
31
|
+
metadata: {
|
|
32
|
+
platformId: string;
|
|
33
|
+
channel: ChannelType;
|
|
34
|
+
latencyMs: number;
|
|
35
|
+
degraded?: boolean;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface RawAttempt {
|
|
39
|
+
platformId: string;
|
|
40
|
+
channel: ChannelType;
|
|
41
|
+
latencyMs: number;
|
|
42
|
+
degraded?: boolean;
|
|
43
|
+
success: boolean;
|
|
44
|
+
payload?: unknown;
|
|
45
|
+
error?: unknown;
|
|
46
|
+
}
|
|
47
|
+
export interface CredentialContextPort {
|
|
48
|
+
loadCredentialState(platformId: string): Promise<CredentialContext>;
|
|
49
|
+
}
|
|
50
|
+
export interface CooldownLedgerPort {
|
|
51
|
+
loadCooldownState(platformId: string, intent: CapabilityIntent): Promise<{
|
|
52
|
+
blocked: boolean;
|
|
53
|
+
retryAfterMs?: number;
|
|
54
|
+
}>;
|
|
55
|
+
}
|
|
56
|
+
export interface RouteContextPort extends CredentialContextPort, CooldownLedgerPort {
|
|
57
|
+
}
|
|
58
|
+
export interface ConnectorManifestLike {
|
|
59
|
+
platformId: string;
|
|
60
|
+
supportedCapabilities: CapabilityIntent[];
|
|
61
|
+
channelPriority: ChannelType[];
|
|
62
|
+
credentialTypes: string[];
|
|
63
|
+
degradedChannels?: ChannelType[];
|
|
64
|
+
sourceRefPolicy?: {
|
|
65
|
+
minSourceRefs?: number;
|
|
66
|
+
rejectInlineSensitivePayload?: boolean;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface ConnectorManifestLoader {
|
|
70
|
+
loadManifest(platformId: string): ConnectorManifestLike;
|
|
71
|
+
}
|
|
72
|
+
export interface RoutePlanner {
|
|
73
|
+
planRoute(intent: CapabilityIntent, request: ConnectorRequest): Promise<ExecutionPlan>;
|
|
74
|
+
}
|
|
75
|
+
export interface ExecutionRunner {
|
|
76
|
+
run(plan: ExecutionPlan, request: ConnectorRequest): Promise<RawAttempt>;
|
|
77
|
+
}
|
|
78
|
+
export interface ConnectorExecutionPort {
|
|
79
|
+
executeCapability(intent: CapabilityIntent, request: ConnectorRequest): Promise<ConnectorResult<unknown>>;
|
|
80
|
+
}
|
|
81
|
+
export declare function normalizeOutcome(attempt: RawAttempt): ConnectorResult<unknown>;
|
|
82
|
+
export declare function createConnectorContractCore(input: {
|
|
83
|
+
manifestLoader: ConnectorManifestLoader;
|
|
84
|
+
routePlanner: RoutePlanner;
|
|
85
|
+
executionRunner: ExecutionRunner;
|
|
86
|
+
}): ConnectorExecutionPort;
|
|
87
|
+
export declare function isCredentialActive(state: CredentialState): boolean;
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import type { CapabilityIntent, ConnectorRequest, ExecutionPlan } from "./contract.js";
|
|
2
|
-
export type EffectSemanticsClass = "read_only" | "side_effect" | "task_claim" | "keepalive";
|
|
3
|
-
export declare function classifyConnectorIntentEffect(intent: CapabilityIntent): EffectSemanticsClass;
|
|
4
|
-
export interface EffectCommitLedgerPort {
|
|
5
|
-
getOrCreateIntentCommitRecord(input: {
|
|
6
|
-
decisionId: string;
|
|
7
|
-
intentId: string;
|
|
8
|
-
idempotencyKey: string;
|
|
9
|
-
effectClass: string;
|
|
10
|
-
}): Promise<{
|
|
11
|
-
existing: boolean;
|
|
12
|
-
record: {
|
|
13
|
-
id: string;
|
|
14
|
-
state: string;
|
|
15
|
-
outcomeRef?: string;
|
|
16
|
-
};
|
|
17
|
-
}>;
|
|
18
|
-
}
|
|
19
|
-
/** In-memory ledger for tests and offline harnesses. */
|
|
20
|
-
export declare class InMemoryEffectCommitLedger implements EffectCommitLedgerPort {
|
|
21
|
-
private readonly byKey;
|
|
22
|
-
private key;
|
|
23
|
-
getOrCreateIntentCommitRecord(input: {
|
|
24
|
-
decisionId: string;
|
|
25
|
-
intentId: string;
|
|
26
|
-
idempotencyKey: string;
|
|
27
|
-
effectClass: string;
|
|
28
|
-
}): Promise<{
|
|
29
|
-
existing: boolean;
|
|
30
|
-
record: {
|
|
31
|
-
id: string;
|
|
32
|
-
state: string;
|
|
33
|
-
outcomeRef?: string;
|
|
34
|
-
};
|
|
35
|
-
}>;
|
|
36
|
-
/** Test seam: mark a key as already committed with replayable outcome. */
|
|
37
|
-
seedCommitted(decisionId: string, idempotencyKey: string, outcomeRef: string): void;
|
|
38
|
-
markState(decisionId: string, idempotencyKey: string, state: string): void;
|
|
39
|
-
}
|
|
40
|
-
export interface EnforceExecutionPolicyDeps {
|
|
41
|
-
effectCommitLedger?: EffectCommitLedgerPort;
|
|
42
|
-
}
|
|
43
|
-
export declare function enforceExecutionPolicy(plan: ExecutionPlan, intent: CapabilityIntent, request: ConnectorRequest, deps: EnforceExecutionPolicyDeps): Promise<{
|
|
44
|
-
skipAdapter: boolean;
|
|
45
|
-
existingOutcomeRef?: string;
|
|
46
|
-
effectCommitId?: string;
|
|
47
|
-
}>;
|
|
1
|
+
import type { CapabilityIntent, ConnectorRequest, ExecutionPlan } from "./contract.js";
|
|
2
|
+
export type EffectSemanticsClass = "read_only" | "side_effect" | "task_claim" | "keepalive";
|
|
3
|
+
export declare function classifyConnectorIntentEffect(intent: CapabilityIntent): EffectSemanticsClass;
|
|
4
|
+
export interface EffectCommitLedgerPort {
|
|
5
|
+
getOrCreateIntentCommitRecord(input: {
|
|
6
|
+
decisionId: string;
|
|
7
|
+
intentId: string;
|
|
8
|
+
idempotencyKey: string;
|
|
9
|
+
effectClass: string;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
existing: boolean;
|
|
12
|
+
record: {
|
|
13
|
+
id: string;
|
|
14
|
+
state: string;
|
|
15
|
+
outcomeRef?: string;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
/** In-memory ledger for tests and offline harnesses. */
|
|
20
|
+
export declare class InMemoryEffectCommitLedger implements EffectCommitLedgerPort {
|
|
21
|
+
private readonly byKey;
|
|
22
|
+
private key;
|
|
23
|
+
getOrCreateIntentCommitRecord(input: {
|
|
24
|
+
decisionId: string;
|
|
25
|
+
intentId: string;
|
|
26
|
+
idempotencyKey: string;
|
|
27
|
+
effectClass: string;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
existing: boolean;
|
|
30
|
+
record: {
|
|
31
|
+
id: string;
|
|
32
|
+
state: string;
|
|
33
|
+
outcomeRef?: string;
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
36
|
+
/** Test seam: mark a key as already committed with replayable outcome. */
|
|
37
|
+
seedCommitted(decisionId: string, idempotencyKey: string, outcomeRef: string): void;
|
|
38
|
+
markState(decisionId: string, idempotencyKey: string, state: string): void;
|
|
39
|
+
}
|
|
40
|
+
export interface EnforceExecutionPolicyDeps {
|
|
41
|
+
effectCommitLedger?: EffectCommitLedgerPort;
|
|
42
|
+
}
|
|
43
|
+
export declare function enforceExecutionPolicy(plan: ExecutionPlan, intent: CapabilityIntent, request: ConnectorRequest, deps: EnforceExecutionPolicyDeps): Promise<{
|
|
44
|
+
skipAdapter: boolean;
|
|
45
|
+
existingOutcomeRef?: string;
|
|
46
|
+
effectCommitId?: string;
|
|
47
|
+
}>;
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Side-effect idempotency + degraded-channel gate + effect commit replay (T3.2.1).
|
|
3
|
-
* Aligns with connector-system.detail §3.6 enforceExecutionPolicy.
|
|
4
|
-
*/
|
|
5
|
-
import * as crypto from "node:crypto";
|
|
6
|
-
import { ConnectorPolicyError } from "./failure-taxonomy.js";
|
|
7
|
-
const READONLY = new Set([
|
|
8
|
-
"feed.read",
|
|
9
|
-
"notification.list",
|
|
10
|
-
"work.discover",
|
|
11
|
-
]);
|
|
12
|
-
export function classifyConnectorIntentEffect(intent) {
|
|
13
|
-
if (intent === "agent.heartbeat")
|
|
14
|
-
return "keepalive";
|
|
15
|
-
if (intent === "task.claim")
|
|
16
|
-
return "task_claim";
|
|
17
|
-
if (READONLY.has(intent))
|
|
18
|
-
return "read_only";
|
|
19
|
-
return "side_effect";
|
|
20
|
-
}
|
|
21
|
-
/** In-memory ledger for tests and offline harnesses. */
|
|
22
|
-
export class InMemoryEffectCommitLedger {
|
|
23
|
-
byKey = new Map();
|
|
24
|
-
key(decisionId, idempotencyKey) {
|
|
25
|
-
return `${decisionId}::${idempotencyKey}`;
|
|
26
|
-
}
|
|
27
|
-
async getOrCreateIntentCommitRecord(input) {
|
|
28
|
-
const k = this.key(input.decisionId, input.idempotencyKey);
|
|
29
|
-
const hit = this.byKey.get(k);
|
|
30
|
-
if (hit) {
|
|
31
|
-
return { existing: true, record: hit };
|
|
32
|
-
}
|
|
33
|
-
const id = crypto.randomUUID();
|
|
34
|
-
const rec = { id, state: "planned", outcomeRef: undefined };
|
|
35
|
-
this.byKey.set(k, rec);
|
|
36
|
-
return { existing: false, record: rec };
|
|
37
|
-
}
|
|
38
|
-
/** Test seam: mark a key as already committed with replayable outcome. */
|
|
39
|
-
seedCommitted(decisionId, idempotencyKey, outcomeRef) {
|
|
40
|
-
const id = crypto.randomUUID();
|
|
41
|
-
this.byKey.set(this.key(decisionId, idempotencyKey), { id, state: "committed", outcomeRef });
|
|
42
|
-
}
|
|
43
|
-
markState(decisionId, idempotencyKey, state) {
|
|
44
|
-
const k = this.key(decisionId, idempotencyKey);
|
|
45
|
-
const cur = this.byKey.get(k);
|
|
46
|
-
if (!cur)
|
|
47
|
-
throw new Error("ledger_seed_missing");
|
|
48
|
-
this.byKey.set(k, { ...cur, state });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
export async function enforceExecutionPolicy(plan, intent, request, deps) {
|
|
52
|
-
const semantics = classifyConnectorIntentEffect(intent);
|
|
53
|
-
if ((semantics === "side_effect" || semantics === "task_claim") && !plan.idempotencyKey?.trim()) {
|
|
54
|
-
throw new ConnectorPolicyError("permanent_input_error", "side_effect_requires_idempotency_key");
|
|
55
|
-
}
|
|
56
|
-
if (plan.degraded && (semantics === "side_effect" || semantics === "task_claim")) {
|
|
57
|
-
throw new ConnectorPolicyError("semantic_rejection", "degraded_channel_not_allowed_for_side_effect");
|
|
58
|
-
}
|
|
59
|
-
if (plan.idempotencyKey && deps.effectCommitLedger) {
|
|
60
|
-
if (!request.decisionId?.trim() || !request.intentId?.trim()) {
|
|
61
|
-
throw new ConnectorPolicyError("permanent_input_error", "effect_commit_requires_decision_and_intent_id");
|
|
62
|
-
}
|
|
63
|
-
const lookup = await deps.effectCommitLedger.getOrCreateIntentCommitRecord({
|
|
64
|
-
decisionId: request.decisionId,
|
|
65
|
-
intentId: request.intentId,
|
|
66
|
-
idempotencyKey: plan.idempotencyKey,
|
|
67
|
-
effectClass: semantics,
|
|
68
|
-
});
|
|
69
|
-
if (lookup.existing && lookup.record.state === "committed") {
|
|
70
|
-
return {
|
|
71
|
-
skipAdapter: true,
|
|
72
|
-
existingOutcomeRef: lookup.record.outcomeRef,
|
|
73
|
-
effectCommitId: lookup.record.id,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
if (lookup.existing && (lookup.record.state === "dispatched" || lookup.record.state === "reconcile")) {
|
|
77
|
-
throw new ConnectorPolicyError("concurrency_conflict", "effect_commit_requires_reconcile");
|
|
78
|
-
}
|
|
79
|
-
return { skipAdapter: false, effectCommitId: lookup.record.id };
|
|
80
|
-
}
|
|
81
|
-
return { skipAdapter: false };
|
|
82
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Side-effect idempotency + degraded-channel gate + effect commit replay (T3.2.1).
|
|
3
|
+
* Aligns with connector-system.detail §3.6 enforceExecutionPolicy.
|
|
4
|
+
*/
|
|
5
|
+
import * as crypto from "node:crypto";
|
|
6
|
+
import { ConnectorPolicyError } from "./failure-taxonomy.js";
|
|
7
|
+
const READONLY = new Set([
|
|
8
|
+
"feed.read",
|
|
9
|
+
"notification.list",
|
|
10
|
+
"work.discover",
|
|
11
|
+
]);
|
|
12
|
+
export function classifyConnectorIntentEffect(intent) {
|
|
13
|
+
if (intent === "agent.heartbeat")
|
|
14
|
+
return "keepalive";
|
|
15
|
+
if (intent === "task.claim")
|
|
16
|
+
return "task_claim";
|
|
17
|
+
if (READONLY.has(intent))
|
|
18
|
+
return "read_only";
|
|
19
|
+
return "side_effect";
|
|
20
|
+
}
|
|
21
|
+
/** In-memory ledger for tests and offline harnesses. */
|
|
22
|
+
export class InMemoryEffectCommitLedger {
|
|
23
|
+
byKey = new Map();
|
|
24
|
+
key(decisionId, idempotencyKey) {
|
|
25
|
+
return `${decisionId}::${idempotencyKey}`;
|
|
26
|
+
}
|
|
27
|
+
async getOrCreateIntentCommitRecord(input) {
|
|
28
|
+
const k = this.key(input.decisionId, input.idempotencyKey);
|
|
29
|
+
const hit = this.byKey.get(k);
|
|
30
|
+
if (hit) {
|
|
31
|
+
return { existing: true, record: hit };
|
|
32
|
+
}
|
|
33
|
+
const id = crypto.randomUUID();
|
|
34
|
+
const rec = { id, state: "planned", outcomeRef: undefined };
|
|
35
|
+
this.byKey.set(k, rec);
|
|
36
|
+
return { existing: false, record: rec };
|
|
37
|
+
}
|
|
38
|
+
/** Test seam: mark a key as already committed with replayable outcome. */
|
|
39
|
+
seedCommitted(decisionId, idempotencyKey, outcomeRef) {
|
|
40
|
+
const id = crypto.randomUUID();
|
|
41
|
+
this.byKey.set(this.key(decisionId, idempotencyKey), { id, state: "committed", outcomeRef });
|
|
42
|
+
}
|
|
43
|
+
markState(decisionId, idempotencyKey, state) {
|
|
44
|
+
const k = this.key(decisionId, idempotencyKey);
|
|
45
|
+
const cur = this.byKey.get(k);
|
|
46
|
+
if (!cur)
|
|
47
|
+
throw new Error("ledger_seed_missing");
|
|
48
|
+
this.byKey.set(k, { ...cur, state });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function enforceExecutionPolicy(plan, intent, request, deps) {
|
|
52
|
+
const semantics = classifyConnectorIntentEffect(intent);
|
|
53
|
+
if ((semantics === "side_effect" || semantics === "task_claim") && !plan.idempotencyKey?.trim()) {
|
|
54
|
+
throw new ConnectorPolicyError("permanent_input_error", "side_effect_requires_idempotency_key");
|
|
55
|
+
}
|
|
56
|
+
if (plan.degraded && (semantics === "side_effect" || semantics === "task_claim")) {
|
|
57
|
+
throw new ConnectorPolicyError("semantic_rejection", "degraded_channel_not_allowed_for_side_effect");
|
|
58
|
+
}
|
|
59
|
+
if (plan.idempotencyKey && deps.effectCommitLedger) {
|
|
60
|
+
if (!request.decisionId?.trim() || !request.intentId?.trim()) {
|
|
61
|
+
throw new ConnectorPolicyError("permanent_input_error", "effect_commit_requires_decision_and_intent_id");
|
|
62
|
+
}
|
|
63
|
+
const lookup = await deps.effectCommitLedger.getOrCreateIntentCommitRecord({
|
|
64
|
+
decisionId: request.decisionId,
|
|
65
|
+
intentId: request.intentId,
|
|
66
|
+
idempotencyKey: plan.idempotencyKey,
|
|
67
|
+
effectClass: semantics,
|
|
68
|
+
});
|
|
69
|
+
if (lookup.existing && lookup.record.state === "committed") {
|
|
70
|
+
return {
|
|
71
|
+
skipAdapter: true,
|
|
72
|
+
existingOutcomeRef: lookup.record.outcomeRef,
|
|
73
|
+
effectCommitId: lookup.record.id,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (lookup.existing && (lookup.record.state === "dispatched" || lookup.record.state === "reconcile")) {
|
|
77
|
+
throw new ConnectorPolicyError("concurrency_conflict", "effect_commit_requires_reconcile");
|
|
78
|
+
}
|
|
79
|
+
return { skipAdapter: false, effectCommitId: lookup.record.id };
|
|
80
|
+
}
|
|
81
|
+
return { skipAdapter: false };
|
|
82
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from "./contract.js";
|
|
2
|
-
export * from "./manifest.js";
|
|
3
|
-
export * from "./map-life-evidence.js";
|
|
4
|
-
export * from "./failure-taxonomy.js";
|
|
5
|
-
export * from "./route-planner.js";
|
|
6
|
-
export * from "./channel-health.js";
|
|
7
|
-
export * from "./policy-layer.js";
|
|
8
|
-
export * from "./execution-policy.js";
|
|
1
|
+
export * from "./contract.js";
|
|
2
|
+
export * from "./manifest.js";
|
|
3
|
+
export * from "./map-life-evidence.js";
|
|
4
|
+
export * from "./failure-taxonomy.js";
|
|
5
|
+
export * from "./route-planner.js";
|
|
6
|
+
export * from "./channel-health.js";
|
|
7
|
+
export * from "./policy-layer.js";
|
|
8
|
+
export * from "./execution-policy.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from "./contract.js";
|
|
2
|
-
export * from "./manifest.js";
|
|
3
|
-
export * from "./map-life-evidence.js";
|
|
4
|
-
export * from "./failure-taxonomy.js";
|
|
5
|
-
export * from "./route-planner.js";
|
|
6
|
-
export * from "./channel-health.js";
|
|
7
|
-
export * from "./policy-layer.js";
|
|
8
|
-
export * from "./execution-policy.js";
|
|
1
|
+
export * from "./contract.js";
|
|
2
|
+
export * from "./manifest.js";
|
|
3
|
+
export * from "./map-life-evidence.js";
|
|
4
|
+
export * from "./failure-taxonomy.js";
|
|
5
|
+
export * from "./route-planner.js";
|
|
6
|
+
export * from "./channel-health.js";
|
|
7
|
+
export * from "./policy-layer.js";
|
|
8
|
+
export * from "./execution-policy.js";
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { type CapabilityIntent, type ChannelType } from "./contract.js";
|
|
3
|
-
declare const connectorManifestSchema: z.ZodObject<{
|
|
4
|
-
platformId: z.ZodString;
|
|
5
|
-
supportedCapabilities: z.ZodArray<z.ZodEnum<{
|
|
6
|
-
"feed.read": "feed.read";
|
|
7
|
-
"post.publish": "post.publish";
|
|
8
|
-
"comment.reply": "comment.reply";
|
|
9
|
-
"notification.list": "notification.list";
|
|
10
|
-
"message.send": "message.send";
|
|
11
|
-
"agent.register": "agent.register";
|
|
12
|
-
"agent.heartbeat": "agent.heartbeat";
|
|
13
|
-
"work.discover": "work.discover";
|
|
14
|
-
"task.claim": "task.claim";
|
|
15
|
-
}>>;
|
|
16
|
-
channelPriority: z.ZodArray<z.ZodEnum<{
|
|
17
|
-
api_rest: "api_rest";
|
|
18
|
-
api_rpc: "api_rpc";
|
|
19
|
-
a2a: "a2a";
|
|
20
|
-
mcp: "mcp";
|
|
21
|
-
cli: "cli";
|
|
22
|
-
skill: "skill";
|
|
23
|
-
browser: "browser";
|
|
24
|
-
}>>;
|
|
25
|
-
credentialTypes: z.ZodArray<z.ZodString>;
|
|
26
|
-
degradedChannels: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
27
|
-
api_rest: "api_rest";
|
|
28
|
-
api_rpc: "api_rpc";
|
|
29
|
-
a2a: "a2a";
|
|
30
|
-
mcp: "mcp";
|
|
31
|
-
cli: "cli";
|
|
32
|
-
skill: "skill";
|
|
33
|
-
browser: "browser";
|
|
34
|
-
}>>>;
|
|
35
|
-
sourceRefPolicy: z.ZodOptional<z.ZodObject<{
|
|
36
|
-
minSourceRefs: z.ZodDefault<z.ZodNumber>;
|
|
37
|
-
rejectInlineSensitivePayload: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
-
}, z.core.$strip>>;
|
|
39
|
-
}, z.core.$strip>;
|
|
40
|
-
export type ConnectorManifest = z.infer<typeof connectorManifestSchema>;
|
|
41
|
-
export declare class CapabilityContractRegistry {
|
|
42
|
-
private readonly byPlatform;
|
|
43
|
-
register(manifest: ConnectorManifest): void;
|
|
44
|
-
loadManifest(platformId: string): ConnectorManifest;
|
|
45
|
-
listRegisteredPlatformIds(): string[];
|
|
46
|
-
hasCapability(platformId: string, intent: CapabilityIntent): boolean;
|
|
47
|
-
listCapabilities(platformId: string): CapabilityIntent[];
|
|
48
|
-
listChannels(platformId: string): ChannelType[];
|
|
49
|
-
}
|
|
50
|
-
/** T3.1.1 contract name for manifest-first registry. */
|
|
51
|
-
export declare const ConnectorManifestRegistry: typeof CapabilityContractRegistry;
|
|
52
|
-
export type ConnectorManifestRegistry = CapabilityContractRegistry;
|
|
53
|
-
export declare function describeConnector(registry: CapabilityContractRegistry, platformId: string): ConnectorManifest;
|
|
54
|
-
export declare function checkConnector(registry: CapabilityContractRegistry, platformId: string): {
|
|
55
|
-
ok: boolean;
|
|
56
|
-
errors: string[];
|
|
57
|
-
};
|
|
58
|
-
export declare function discoverCapabilities(registry: CapabilityContractRegistry): Array<{
|
|
59
|
-
platformId: string;
|
|
60
|
-
capabilities: CapabilityIntent[];
|
|
61
|
-
degradedChannels?: ChannelType[];
|
|
62
|
-
}>;
|
|
63
|
-
export declare function parseConnectorManifest(input: unknown): ConnectorManifest;
|
|
64
|
-
export {};
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type CapabilityIntent, type ChannelType } from "./contract.js";
|
|
3
|
+
declare const connectorManifestSchema: z.ZodObject<{
|
|
4
|
+
platformId: z.ZodString;
|
|
5
|
+
supportedCapabilities: z.ZodArray<z.ZodEnum<{
|
|
6
|
+
"feed.read": "feed.read";
|
|
7
|
+
"post.publish": "post.publish";
|
|
8
|
+
"comment.reply": "comment.reply";
|
|
9
|
+
"notification.list": "notification.list";
|
|
10
|
+
"message.send": "message.send";
|
|
11
|
+
"agent.register": "agent.register";
|
|
12
|
+
"agent.heartbeat": "agent.heartbeat";
|
|
13
|
+
"work.discover": "work.discover";
|
|
14
|
+
"task.claim": "task.claim";
|
|
15
|
+
}>>;
|
|
16
|
+
channelPriority: z.ZodArray<z.ZodEnum<{
|
|
17
|
+
api_rest: "api_rest";
|
|
18
|
+
api_rpc: "api_rpc";
|
|
19
|
+
a2a: "a2a";
|
|
20
|
+
mcp: "mcp";
|
|
21
|
+
cli: "cli";
|
|
22
|
+
skill: "skill";
|
|
23
|
+
browser: "browser";
|
|
24
|
+
}>>;
|
|
25
|
+
credentialTypes: z.ZodArray<z.ZodString>;
|
|
26
|
+
degradedChannels: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
27
|
+
api_rest: "api_rest";
|
|
28
|
+
api_rpc: "api_rpc";
|
|
29
|
+
a2a: "a2a";
|
|
30
|
+
mcp: "mcp";
|
|
31
|
+
cli: "cli";
|
|
32
|
+
skill: "skill";
|
|
33
|
+
browser: "browser";
|
|
34
|
+
}>>>;
|
|
35
|
+
sourceRefPolicy: z.ZodOptional<z.ZodObject<{
|
|
36
|
+
minSourceRefs: z.ZodDefault<z.ZodNumber>;
|
|
37
|
+
rejectInlineSensitivePayload: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type ConnectorManifest = z.infer<typeof connectorManifestSchema>;
|
|
41
|
+
export declare class CapabilityContractRegistry {
|
|
42
|
+
private readonly byPlatform;
|
|
43
|
+
register(manifest: ConnectorManifest): void;
|
|
44
|
+
loadManifest(platformId: string): ConnectorManifest;
|
|
45
|
+
listRegisteredPlatformIds(): string[];
|
|
46
|
+
hasCapability(platformId: string, intent: CapabilityIntent): boolean;
|
|
47
|
+
listCapabilities(platformId: string): CapabilityIntent[];
|
|
48
|
+
listChannels(platformId: string): ChannelType[];
|
|
49
|
+
}
|
|
50
|
+
/** T3.1.1 contract name for manifest-first registry. */
|
|
51
|
+
export declare const ConnectorManifestRegistry: typeof CapabilityContractRegistry;
|
|
52
|
+
export type ConnectorManifestRegistry = CapabilityContractRegistry;
|
|
53
|
+
export declare function describeConnector(registry: CapabilityContractRegistry, platformId: string): ConnectorManifest;
|
|
54
|
+
export declare function checkConnector(registry: CapabilityContractRegistry, platformId: string): {
|
|
55
|
+
ok: boolean;
|
|
56
|
+
errors: string[];
|
|
57
|
+
};
|
|
58
|
+
export declare function discoverCapabilities(registry: CapabilityContractRegistry): Array<{
|
|
59
|
+
platformId: string;
|
|
60
|
+
capabilities: CapabilityIntent[];
|
|
61
|
+
degradedChannels?: ChannelType[];
|
|
62
|
+
}>;
|
|
63
|
+
export declare function parseConnectorManifest(input: unknown): ConnectorManifest;
|
|
64
|
+
export {};
|