@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,86 +1,86 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { CAPABILITY_INTENTS, CHANNEL_TYPES } from "./contract.js";
|
|
3
|
-
const sourceRefPolicySchema = z
|
|
4
|
-
.object({
|
|
5
|
-
minSourceRefs: z.number().int().min(0).default(1),
|
|
6
|
-
rejectInlineSensitivePayload: z.boolean().optional(),
|
|
7
|
-
})
|
|
8
|
-
.optional();
|
|
9
|
-
const connectorManifestSchema = z.object({
|
|
10
|
-
platformId: z.string().min(1),
|
|
11
|
-
supportedCapabilities: z.array(z.enum(CAPABILITY_INTENTS)).min(1),
|
|
12
|
-
channelPriority: z.array(z.enum(CHANNEL_TYPES)).min(1),
|
|
13
|
-
credentialTypes: z.array(z.string().min(1)).min(1),
|
|
14
|
-
degradedChannels: z.array(z.enum(CHANNEL_TYPES)).optional(),
|
|
15
|
-
sourceRefPolicy: sourceRefPolicySchema,
|
|
16
|
-
});
|
|
17
|
-
export class CapabilityContractRegistry {
|
|
18
|
-
byPlatform = new Map();
|
|
19
|
-
register(manifest) {
|
|
20
|
-
const parsed = connectorManifestSchema.parse(manifest);
|
|
21
|
-
this.byPlatform.set(parsed.platformId, parsed);
|
|
22
|
-
}
|
|
23
|
-
loadManifest(platformId) {
|
|
24
|
-
const found = this.byPlatform.get(platformId);
|
|
25
|
-
if (!found) {
|
|
26
|
-
throw new Error(`connector_manifest_not_found:${platformId}`);
|
|
27
|
-
}
|
|
28
|
-
return found;
|
|
29
|
-
}
|
|
30
|
-
listRegisteredPlatformIds() {
|
|
31
|
-
return [...this.byPlatform.keys()];
|
|
32
|
-
}
|
|
33
|
-
hasCapability(platformId, intent) {
|
|
34
|
-
const manifest = this.loadManifest(platformId);
|
|
35
|
-
return manifest.supportedCapabilities.includes(intent);
|
|
36
|
-
}
|
|
37
|
-
listCapabilities(platformId) {
|
|
38
|
-
return [...this.loadManifest(platformId).supportedCapabilities];
|
|
39
|
-
}
|
|
40
|
-
listChannels(platformId) {
|
|
41
|
-
return [...this.loadManifest(platformId).channelPriority];
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/** T3.1.1 contract name for manifest-first registry. */
|
|
45
|
-
export const ConnectorManifestRegistry = CapabilityContractRegistry;
|
|
46
|
-
export function describeConnector(registry, platformId) {
|
|
47
|
-
return registry.loadManifest(platformId);
|
|
48
|
-
}
|
|
49
|
-
export function checkConnector(registry, platformId) {
|
|
50
|
-
const errors = [];
|
|
51
|
-
try {
|
|
52
|
-
const manifest = registry.loadManifest(platformId);
|
|
53
|
-
if (manifest.supportedCapabilities.length === 0) {
|
|
54
|
-
errors.push("capability_list_empty");
|
|
55
|
-
}
|
|
56
|
-
if (manifest.channelPriority.length === 0) {
|
|
57
|
-
errors.push("channel_priority_empty");
|
|
58
|
-
}
|
|
59
|
-
if (manifest.credentialTypes.length === 0) {
|
|
60
|
-
errors.push("credential_types_empty");
|
|
61
|
-
}
|
|
62
|
-
const degraded = manifest.degradedChannels ?? [];
|
|
63
|
-
for (const channel of degraded) {
|
|
64
|
-
if (!manifest.channelPriority.includes(channel)) {
|
|
65
|
-
errors.push(`degraded_channel_not_in_priority:${channel}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
errors.push(error instanceof Error ? error.message : String(error));
|
|
71
|
-
}
|
|
72
|
-
return { ok: errors.length === 0, errors };
|
|
73
|
-
}
|
|
74
|
-
export function discoverCapabilities(registry) {
|
|
75
|
-
return registry.listRegisteredPlatformIds().map((platformId) => {
|
|
76
|
-
const manifest = registry.loadManifest(platformId);
|
|
77
|
-
return {
|
|
78
|
-
platformId,
|
|
79
|
-
capabilities: [...manifest.supportedCapabilities],
|
|
80
|
-
degradedChannels: manifest.degradedChannels,
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
export function parseConnectorManifest(input) {
|
|
85
|
-
return connectorManifestSchema.parse(input);
|
|
86
|
-
}
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { CAPABILITY_INTENTS, CHANNEL_TYPES } from "./contract.js";
|
|
3
|
+
const sourceRefPolicySchema = z
|
|
4
|
+
.object({
|
|
5
|
+
minSourceRefs: z.number().int().min(0).default(1),
|
|
6
|
+
rejectInlineSensitivePayload: z.boolean().optional(),
|
|
7
|
+
})
|
|
8
|
+
.optional();
|
|
9
|
+
const connectorManifestSchema = z.object({
|
|
10
|
+
platformId: z.string().min(1),
|
|
11
|
+
supportedCapabilities: z.array(z.enum(CAPABILITY_INTENTS)).min(1),
|
|
12
|
+
channelPriority: z.array(z.enum(CHANNEL_TYPES)).min(1),
|
|
13
|
+
credentialTypes: z.array(z.string().min(1)).min(1),
|
|
14
|
+
degradedChannels: z.array(z.enum(CHANNEL_TYPES)).optional(),
|
|
15
|
+
sourceRefPolicy: sourceRefPolicySchema,
|
|
16
|
+
});
|
|
17
|
+
export class CapabilityContractRegistry {
|
|
18
|
+
byPlatform = new Map();
|
|
19
|
+
register(manifest) {
|
|
20
|
+
const parsed = connectorManifestSchema.parse(manifest);
|
|
21
|
+
this.byPlatform.set(parsed.platformId, parsed);
|
|
22
|
+
}
|
|
23
|
+
loadManifest(platformId) {
|
|
24
|
+
const found = this.byPlatform.get(platformId);
|
|
25
|
+
if (!found) {
|
|
26
|
+
throw new Error(`connector_manifest_not_found:${platformId}`);
|
|
27
|
+
}
|
|
28
|
+
return found;
|
|
29
|
+
}
|
|
30
|
+
listRegisteredPlatformIds() {
|
|
31
|
+
return [...this.byPlatform.keys()];
|
|
32
|
+
}
|
|
33
|
+
hasCapability(platformId, intent) {
|
|
34
|
+
const manifest = this.loadManifest(platformId);
|
|
35
|
+
return manifest.supportedCapabilities.includes(intent);
|
|
36
|
+
}
|
|
37
|
+
listCapabilities(platformId) {
|
|
38
|
+
return [...this.loadManifest(platformId).supportedCapabilities];
|
|
39
|
+
}
|
|
40
|
+
listChannels(platformId) {
|
|
41
|
+
return [...this.loadManifest(platformId).channelPriority];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** T3.1.1 contract name for manifest-first registry. */
|
|
45
|
+
export const ConnectorManifestRegistry = CapabilityContractRegistry;
|
|
46
|
+
export function describeConnector(registry, platformId) {
|
|
47
|
+
return registry.loadManifest(platformId);
|
|
48
|
+
}
|
|
49
|
+
export function checkConnector(registry, platformId) {
|
|
50
|
+
const errors = [];
|
|
51
|
+
try {
|
|
52
|
+
const manifest = registry.loadManifest(platformId);
|
|
53
|
+
if (manifest.supportedCapabilities.length === 0) {
|
|
54
|
+
errors.push("capability_list_empty");
|
|
55
|
+
}
|
|
56
|
+
if (manifest.channelPriority.length === 0) {
|
|
57
|
+
errors.push("channel_priority_empty");
|
|
58
|
+
}
|
|
59
|
+
if (manifest.credentialTypes.length === 0) {
|
|
60
|
+
errors.push("credential_types_empty");
|
|
61
|
+
}
|
|
62
|
+
const degraded = manifest.degradedChannels ?? [];
|
|
63
|
+
for (const channel of degraded) {
|
|
64
|
+
if (!manifest.channelPriority.includes(channel)) {
|
|
65
|
+
errors.push(`degraded_channel_not_in_priority:${channel}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
71
|
+
}
|
|
72
|
+
return { ok: errors.length === 0, errors };
|
|
73
|
+
}
|
|
74
|
+
export function discoverCapabilities(registry) {
|
|
75
|
+
return registry.listRegisteredPlatformIds().map((platformId) => {
|
|
76
|
+
const manifest = registry.loadManifest(platformId);
|
|
77
|
+
return {
|
|
78
|
+
platformId,
|
|
79
|
+
capabilities: [...manifest.supportedCapabilities],
|
|
80
|
+
degradedChannels: manifest.degradedChannels,
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function parseConnectorManifest(input) {
|
|
85
|
+
return connectorManifestSchema.parse(input);
|
|
86
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps normalized connector success results to `LifeEvidenceCandidate` (T3.1.2).
|
|
3
|
-
* Returns null when evidence cannot be source-backed (no refs, wrong intent, or failure).
|
|
4
|
-
*/
|
|
5
|
-
import type { CapabilityIntent, ConnectorResult } from "./contract.js";
|
|
6
|
-
import type { LifeEvidenceCandidate, Sensitivity } from "../../storage/life-evidence/types.js";
|
|
7
|
-
/**
|
|
8
|
-
* Produce a single life-evidence candidate from a connector outcome, or null if not mappable.
|
|
9
|
-
*/
|
|
10
|
-
export declare function mapLifeEvidence(input: {
|
|
11
|
-
platformId: string;
|
|
12
|
-
intent: CapabilityIntent;
|
|
13
|
-
result: ConnectorResult<unknown>;
|
|
14
|
-
observedAt?: string;
|
|
15
|
-
sensitivityOverride?: Sensitivity;
|
|
16
|
-
}): LifeEvidenceCandidate | null;
|
|
1
|
+
/**
|
|
2
|
+
* Maps normalized connector success results to `LifeEvidenceCandidate` (T3.1.2).
|
|
3
|
+
* Returns null when evidence cannot be source-backed (no refs, wrong intent, or failure).
|
|
4
|
+
*/
|
|
5
|
+
import type { CapabilityIntent, ConnectorResult } from "./contract.js";
|
|
6
|
+
import type { LifeEvidenceCandidate, Sensitivity } from "../../storage/life-evidence/types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Produce a single life-evidence candidate from a connector outcome, or null if not mappable.
|
|
9
|
+
*/
|
|
10
|
+
export declare function mapLifeEvidence(input: {
|
|
11
|
+
platformId: string;
|
|
12
|
+
intent: CapabilityIntent;
|
|
13
|
+
result: ConnectorResult<unknown>;
|
|
14
|
+
observedAt?: string;
|
|
15
|
+
sensitivityOverride?: Sensitivity;
|
|
16
|
+
}): LifeEvidenceCandidate | null;
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
function extractSourceRefs(platformId, data, observedAt) {
|
|
2
|
-
if (data && typeof data === "object") {
|
|
3
|
-
const record = data;
|
|
4
|
-
if (Array.isArray(record.sourceRefs)) {
|
|
5
|
-
const out = [];
|
|
6
|
-
for (const item of record.sourceRefs) {
|
|
7
|
-
if (item && typeof item === "object" && "uri" in item && "id" in item) {
|
|
8
|
-
const ref = item;
|
|
9
|
-
out.push({
|
|
10
|
-
id: String(ref.id),
|
|
11
|
-
kind: ref.kind ?? "platform_item",
|
|
12
|
-
uri: String(ref.uri),
|
|
13
|
-
excerptHash: ref.excerptHash !== undefined ? String(ref.excerptHash) : undefined,
|
|
14
|
-
observedAt: ref.observedAt !== undefined ? String(ref.observedAt) : observedAt,
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if (out.length > 0)
|
|
19
|
-
return out;
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(record.items)) {
|
|
22
|
-
return record.items.map((item, index) => {
|
|
23
|
-
const id = item && typeof item === "object" && "id" in item
|
|
24
|
-
? String(item.id)
|
|
25
|
-
: `${platformId}-item-${index}`;
|
|
26
|
-
return {
|
|
27
|
-
id,
|
|
28
|
-
kind: "platform_item",
|
|
29
|
-
uri: `platform://${platformId}/item/${encodeURIComponent(id)}`,
|
|
30
|
-
observedAt,
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
function resolveEvidenceType(intent) {
|
|
38
|
-
if (intent === "feed.read")
|
|
39
|
-
return "platform_browse";
|
|
40
|
-
if (intent === "work.discover")
|
|
41
|
-
return "task_discovery";
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
function resolveSensitivity(intent, explicit) {
|
|
45
|
-
if (explicit)
|
|
46
|
-
return explicit;
|
|
47
|
-
if (intent === "message.send" || intent === "comment.reply")
|
|
48
|
-
return "private";
|
|
49
|
-
return "public";
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Produce a single life-evidence candidate from a connector outcome, or null if not mappable.
|
|
53
|
-
*/
|
|
54
|
-
export function mapLifeEvidence(input) {
|
|
55
|
-
if (input.result.status !== "success") {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
if (input.intent === "message.send") {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
const evidenceType = resolveEvidenceType(input.intent);
|
|
62
|
-
if (!evidenceType) {
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
const observedAt = input.observedAt ?? new Date().toISOString();
|
|
66
|
-
const refs = extractSourceRefs(input.platformId, input.result.data, observedAt);
|
|
67
|
-
if (refs.length === 0) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
timestamp: observedAt,
|
|
72
|
-
evidenceType,
|
|
73
|
-
platformId: input.platformId,
|
|
74
|
-
summary: `${input.platformId}:${input.intent}`,
|
|
75
|
-
sourceRefs: refs,
|
|
76
|
-
sensitivity: resolveSensitivity(input.intent, input.sensitivityOverride),
|
|
77
|
-
producer: "connector-system",
|
|
78
|
-
};
|
|
79
|
-
}
|
|
1
|
+
function extractSourceRefs(platformId, data, observedAt) {
|
|
2
|
+
if (data && typeof data === "object") {
|
|
3
|
+
const record = data;
|
|
4
|
+
if (Array.isArray(record.sourceRefs)) {
|
|
5
|
+
const out = [];
|
|
6
|
+
for (const item of record.sourceRefs) {
|
|
7
|
+
if (item && typeof item === "object" && "uri" in item && "id" in item) {
|
|
8
|
+
const ref = item;
|
|
9
|
+
out.push({
|
|
10
|
+
id: String(ref.id),
|
|
11
|
+
kind: ref.kind ?? "platform_item",
|
|
12
|
+
uri: String(ref.uri),
|
|
13
|
+
excerptHash: ref.excerptHash !== undefined ? String(ref.excerptHash) : undefined,
|
|
14
|
+
observedAt: ref.observedAt !== undefined ? String(ref.observedAt) : observedAt,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (out.length > 0)
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(record.items)) {
|
|
22
|
+
return record.items.map((item, index) => {
|
|
23
|
+
const id = item && typeof item === "object" && "id" in item
|
|
24
|
+
? String(item.id)
|
|
25
|
+
: `${platformId}-item-${index}`;
|
|
26
|
+
return {
|
|
27
|
+
id,
|
|
28
|
+
kind: "platform_item",
|
|
29
|
+
uri: `platform://${platformId}/item/${encodeURIComponent(id)}`,
|
|
30
|
+
observedAt,
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
function resolveEvidenceType(intent) {
|
|
38
|
+
if (intent === "feed.read")
|
|
39
|
+
return "platform_browse";
|
|
40
|
+
if (intent === "work.discover")
|
|
41
|
+
return "task_discovery";
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
function resolveSensitivity(intent, explicit) {
|
|
45
|
+
if (explicit)
|
|
46
|
+
return explicit;
|
|
47
|
+
if (intent === "message.send" || intent === "comment.reply")
|
|
48
|
+
return "private";
|
|
49
|
+
return "public";
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Produce a single life-evidence candidate from a connector outcome, or null if not mappable.
|
|
53
|
+
*/
|
|
54
|
+
export function mapLifeEvidence(input) {
|
|
55
|
+
if (input.result.status !== "success") {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
if (input.intent === "message.send") {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const evidenceType = resolveEvidenceType(input.intent);
|
|
62
|
+
if (!evidenceType) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const observedAt = input.observedAt ?? new Date().toISOString();
|
|
66
|
+
const refs = extractSourceRefs(input.platformId, input.result.data, observedAt);
|
|
67
|
+
if (refs.length === 0) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
timestamp: observedAt,
|
|
72
|
+
evidenceType,
|
|
73
|
+
platformId: input.platformId,
|
|
74
|
+
summary: `${input.platformId}:${input.intent}`,
|
|
75
|
+
sourceRefs: refs,
|
|
76
|
+
sensitivity: resolveSensitivity(input.intent, input.sensitivityOverride),
|
|
77
|
+
producer: "connector-system",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { type FailureClass } from "./failure-taxonomy.js";
|
|
2
|
-
import { type EffectCommitLedgerPort } from "./execution-policy.js";
|
|
3
|
-
import type { CapabilityIntent, ConnectorRequest, ConnectorResult, ExecutionPlan, ExecutionRunner, RoutePlanner } from "./contract.js";
|
|
4
|
-
import type { ExecutionTelemetry } from "../../observability/services/execution-telemetry.js";
|
|
5
|
-
export interface RetryPolicy {
|
|
6
|
-
maxRetries: number;
|
|
7
|
-
baseDelayMs: number;
|
|
8
|
-
maxDelayMs: number;
|
|
9
|
-
jitter: boolean;
|
|
10
|
-
}
|
|
11
|
-
export interface CooldownPort {
|
|
12
|
-
isBlocked(platformId: string, intent: CapabilityIntent): Promise<{
|
|
13
|
-
blocked: boolean;
|
|
14
|
-
retryAfterMs?: number;
|
|
15
|
-
}>;
|
|
16
|
-
markFailure(platformId: string, intent: CapabilityIntent, failureClass: FailureClass, retryAfterMs?: number): Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
export interface ConnectorPolicyContext {
|
|
19
|
-
routePlanner: RoutePlanner;
|
|
20
|
-
executionRunner: ExecutionRunner;
|
|
21
|
-
telemetry?: ExecutionTelemetry;
|
|
22
|
-
cooldownPort?: CooldownPort;
|
|
23
|
-
retryPolicy?: Partial<RetryPolicy>;
|
|
24
|
-
allowDegradedFallback?: (plan: ExecutionPlan, request: ConnectorRequest) => boolean;
|
|
25
|
-
effectCommitLedger?: EffectCommitLedgerPort;
|
|
26
|
-
}
|
|
27
|
-
export declare function createConnectorPolicyLayer(ctx: ConnectorPolicyContext): {
|
|
28
|
-
executeWithPolicy(intent: CapabilityIntent, request: ConnectorRequest): Promise<ConnectorResult<unknown>>;
|
|
29
|
-
};
|
|
1
|
+
import { type FailureClass } from "./failure-taxonomy.js";
|
|
2
|
+
import { type EffectCommitLedgerPort } from "./execution-policy.js";
|
|
3
|
+
import type { CapabilityIntent, ConnectorRequest, ConnectorResult, ExecutionPlan, ExecutionRunner, RoutePlanner } from "./contract.js";
|
|
4
|
+
import type { ExecutionTelemetry } from "../../observability/services/execution-telemetry.js";
|
|
5
|
+
export interface RetryPolicy {
|
|
6
|
+
maxRetries: number;
|
|
7
|
+
baseDelayMs: number;
|
|
8
|
+
maxDelayMs: number;
|
|
9
|
+
jitter: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface CooldownPort {
|
|
12
|
+
isBlocked(platformId: string, intent: CapabilityIntent): Promise<{
|
|
13
|
+
blocked: boolean;
|
|
14
|
+
retryAfterMs?: number;
|
|
15
|
+
}>;
|
|
16
|
+
markFailure(platformId: string, intent: CapabilityIntent, failureClass: FailureClass, retryAfterMs?: number): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export interface ConnectorPolicyContext {
|
|
19
|
+
routePlanner: RoutePlanner;
|
|
20
|
+
executionRunner: ExecutionRunner;
|
|
21
|
+
telemetry?: ExecutionTelemetry;
|
|
22
|
+
cooldownPort?: CooldownPort;
|
|
23
|
+
retryPolicy?: Partial<RetryPolicy>;
|
|
24
|
+
allowDegradedFallback?: (plan: ExecutionPlan, request: ConnectorRequest) => boolean;
|
|
25
|
+
effectCommitLedger?: EffectCommitLedgerPort;
|
|
26
|
+
}
|
|
27
|
+
export declare function createConnectorPolicyLayer(ctx: ConnectorPolicyContext): {
|
|
28
|
+
executeWithPolicy(intent: CapabilityIntent, request: ConnectorRequest): Promise<ConnectorResult<unknown>>;
|
|
29
|
+
};
|