@haaaiawd/second-nature 0.1.18 → 0.1.19
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 +855 -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 +193 -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 +65 -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 +26 -19
- package/runtime/cli/ops/ops-router.js +102 -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 +35 -29
- package/runtime/cli/read-models/index.js +365 -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 +112 -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/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 +81 -81
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
export type TopLevelMode = "active" | "quiet" | "maintenance_only" | "paused_for_interrupt";
|
|
2
|
-
/** Control-plane candidate kinds; includes `quiet` for quiet-window–biased intents (L0 alignment). */
|
|
3
|
-
export type IntentKind = "work" | "exploration" | "social" | "quiet" | "reflection" | "outreach" | "maintenance";
|
|
4
|
-
export type DecisionBasis = "rule_only" | "score_based" | "model_assisted";
|
|
5
|
-
export type GuardVerdict = "allow" | "defer" | "deny" | "escalate";
|
|
6
|
-
/** Minimal source ref for planner / guards (matches state-system `SourceRef` subset). */
|
|
7
|
-
export interface ControlPlaneSourceRef {
|
|
8
|
-
id: string;
|
|
9
|
-
kind: "platform_item" | "workspace_artifact" | "decision_record" | "user_anchor" | "connector_result" | "host_report" | "fallback_artifact";
|
|
10
|
-
uri: string;
|
|
11
|
-
excerptHash?: string;
|
|
12
|
-
observedAt?: string;
|
|
13
|
-
}
|
|
14
|
-
export interface ContinuitySnapshot {
|
|
15
|
-
mode: TopLevelMode;
|
|
16
|
-
currentWindowId: string;
|
|
17
|
-
pendingObligations: string[];
|
|
18
|
-
recentOutreachHashes: string[];
|
|
19
|
-
deniedIntents: Array<{
|
|
20
|
-
intentHash: string;
|
|
21
|
-
reason: string;
|
|
22
|
-
at: string;
|
|
23
|
-
}>;
|
|
24
|
-
budgets?: {
|
|
25
|
-
socialUsed: number;
|
|
26
|
-
socialLimit: number;
|
|
27
|
-
};
|
|
28
|
-
awaitingUserInput?: boolean;
|
|
29
|
-
riskSuppressed?: boolean;
|
|
30
|
-
}
|
|
31
|
-
export type CandidateEffectClass = "external_platform_action" | "connector_action" | "memory_curation" | "narrative_reflection" | "user_outreach" | "maintenance" | "no_effect";
|
|
32
|
-
export interface CandidateIntent {
|
|
33
|
-
id: string;
|
|
34
|
-
kind: IntentKind;
|
|
35
|
-
priority: number;
|
|
36
|
-
source: "tick" | "interrupt" | "obligation" | "quiet_plan";
|
|
37
|
-
platformId?: string;
|
|
38
|
-
summary: string;
|
|
39
|
-
effectClass: CandidateEffectClass;
|
|
40
|
-
/** Required for source-backed guard; may be empty when planner expects hard-guard deny. */
|
|
41
|
-
sourceRefs: ControlPlaneSourceRef[];
|
|
42
|
-
/** Dedupe / cooldown key; defaults to stable fingerprint in guard layer when omitted. */
|
|
43
|
-
idempotencyKey?: string;
|
|
44
|
-
}
|
|
45
|
-
export interface GuardEvaluation {
|
|
46
|
-
verdict: GuardVerdict;
|
|
47
|
-
reasons: string[];
|
|
48
|
-
quietSuppressed: boolean;
|
|
49
|
-
leaseRequired: boolean;
|
|
50
|
-
requiresCheckpoint: boolean;
|
|
51
|
-
}
|
|
1
|
+
export type TopLevelMode = "active" | "quiet" | "maintenance_only" | "paused_for_interrupt";
|
|
2
|
+
/** Control-plane candidate kinds; includes `quiet` for quiet-window–biased intents (L0 alignment). */
|
|
3
|
+
export type IntentKind = "work" | "exploration" | "social" | "quiet" | "reflection" | "outreach" | "maintenance";
|
|
4
|
+
export type DecisionBasis = "rule_only" | "score_based" | "model_assisted";
|
|
5
|
+
export type GuardVerdict = "allow" | "defer" | "deny" | "escalate";
|
|
6
|
+
/** Minimal source ref for planner / guards (matches state-system `SourceRef` subset). */
|
|
7
|
+
export interface ControlPlaneSourceRef {
|
|
8
|
+
id: string;
|
|
9
|
+
kind: "platform_item" | "workspace_artifact" | "decision_record" | "user_anchor" | "connector_result" | "host_report" | "fallback_artifact";
|
|
10
|
+
uri: string;
|
|
11
|
+
excerptHash?: string;
|
|
12
|
+
observedAt?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ContinuitySnapshot {
|
|
15
|
+
mode: TopLevelMode;
|
|
16
|
+
currentWindowId: string;
|
|
17
|
+
pendingObligations: string[];
|
|
18
|
+
recentOutreachHashes: string[];
|
|
19
|
+
deniedIntents: Array<{
|
|
20
|
+
intentHash: string;
|
|
21
|
+
reason: string;
|
|
22
|
+
at: string;
|
|
23
|
+
}>;
|
|
24
|
+
budgets?: {
|
|
25
|
+
socialUsed: number;
|
|
26
|
+
socialLimit: number;
|
|
27
|
+
};
|
|
28
|
+
awaitingUserInput?: boolean;
|
|
29
|
+
riskSuppressed?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type CandidateEffectClass = "external_platform_action" | "connector_action" | "memory_curation" | "narrative_reflection" | "user_outreach" | "maintenance" | "no_effect";
|
|
32
|
+
export interface CandidateIntent {
|
|
33
|
+
id: string;
|
|
34
|
+
kind: IntentKind;
|
|
35
|
+
priority: number;
|
|
36
|
+
source: "tick" | "interrupt" | "obligation" | "quiet_plan";
|
|
37
|
+
platformId?: string;
|
|
38
|
+
summary: string;
|
|
39
|
+
effectClass: CandidateEffectClass;
|
|
40
|
+
/** Required for source-backed guard; may be empty when planner expects hard-guard deny. */
|
|
41
|
+
sourceRefs: ControlPlaneSourceRef[];
|
|
42
|
+
/** Dedupe / cooldown key; defaults to stable fingerprint in guard layer when omitted. */
|
|
43
|
+
idempotencyKey?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface GuardEvaluation {
|
|
46
|
+
verdict: GuardVerdict;
|
|
47
|
+
reasons: string[];
|
|
48
|
+
quietSuppressed: boolean;
|
|
49
|
+
leaseRequired: boolean;
|
|
50
|
+
requiresCheckpoint: boolean;
|
|
51
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deterministic GuidanceDraftPort implementation for contract tests and packaged runtime.
|
|
3
|
-
* Does not claim user-visible delivery when wordingMode is not_sent_fallback_candidate (T6.2.1 / ADR-004).
|
|
4
|
-
*/
|
|
5
|
-
import { type GuidanceDraftPort, type OutreachDraftRequest } from "./outreach-draft-schema.js";
|
|
6
|
-
export declare function draftOutreachMessage(request: OutreachDraftRequest): ReturnType<GuidanceDraftPort["draftOutreachMessage"]>;
|
|
7
|
-
export declare function createDraftOutreachMessagePort(): GuidanceDraftPort;
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic GuidanceDraftPort implementation for contract tests and packaged runtime.
|
|
3
|
+
* Does not claim user-visible delivery when wordingMode is not_sent_fallback_candidate (T6.2.1 / ADR-004).
|
|
4
|
+
*/
|
|
5
|
+
import { type GuidanceDraftPort, type OutreachDraftRequest } from "./outreach-draft-schema.js";
|
|
6
|
+
export declare function draftOutreachMessage(request: OutreachDraftRequest): ReturnType<GuidanceDraftPort["draftOutreachMessage"]>;
|
|
7
|
+
export declare function createDraftOutreachMessagePort(): GuidanceDraftPort;
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deterministic GuidanceDraftPort implementation for contract tests and packaged runtime.
|
|
3
|
-
* Does not claim user-visible delivery when wordingMode is not_sent_fallback_candidate (T6.2.1 / ADR-004).
|
|
4
|
-
*/
|
|
5
|
-
import { safeParseOutreachDraftRequest } from "./outreach-draft-schema.js";
|
|
6
|
-
function baseDraftText(request) {
|
|
7
|
-
const ids = request.sourceRefs.map((s) => s.id).join(",");
|
|
8
|
-
return `draft:${request.candidateId}:grounded:${ids}`;
|
|
9
|
-
}
|
|
10
|
-
export async function draftOutreachMessage(request) {
|
|
11
|
-
const parsed = safeParseOutreachDraftRequest(request);
|
|
12
|
-
if (!parsed.success) {
|
|
13
|
-
return { status: "unavailable", reasons: ["outreach_draft_schema_invalid"] };
|
|
14
|
-
}
|
|
15
|
-
const r = parsed.data;
|
|
16
|
-
if (r.judgmentVerdict !== "allow") {
|
|
17
|
-
return { status: "unavailable", reasons: ["hard_decision_not_allow"] };
|
|
18
|
-
}
|
|
19
|
-
if (r.sourceRefs.length === 0) {
|
|
20
|
-
return { status: "unavailable", reasons: ["missing_resolved_source_refs"] };
|
|
21
|
-
}
|
|
22
|
-
const wording = r.deliveryContext.wordingMode;
|
|
23
|
-
if (wording === "sendable") {
|
|
24
|
-
return {
|
|
25
|
-
status: "ready",
|
|
26
|
-
draft: {
|
|
27
|
-
text: `${baseDraftText(r)};wording=sendable`,
|
|
28
|
-
deliveryWording: "sendable",
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
status: "ready",
|
|
34
|
-
draft: {
|
|
35
|
-
text: `Not sent to the user (candidate only). Delivery state: ${r.deliveryContext.deliveryVerdict}. ${baseDraftText(r)}`,
|
|
36
|
-
deliveryWording: "not_sent_fallback_candidate",
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
export function createDraftOutreachMessagePort() {
|
|
41
|
-
return { draftOutreachMessage };
|
|
42
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic GuidanceDraftPort implementation for contract tests and packaged runtime.
|
|
3
|
+
* Does not claim user-visible delivery when wordingMode is not_sent_fallback_candidate (T6.2.1 / ADR-004).
|
|
4
|
+
*/
|
|
5
|
+
import { safeParseOutreachDraftRequest } from "./outreach-draft-schema.js";
|
|
6
|
+
function baseDraftText(request) {
|
|
7
|
+
const ids = request.sourceRefs.map((s) => s.id).join(",");
|
|
8
|
+
return `draft:${request.candidateId}:grounded:${ids}`;
|
|
9
|
+
}
|
|
10
|
+
export async function draftOutreachMessage(request) {
|
|
11
|
+
const parsed = safeParseOutreachDraftRequest(request);
|
|
12
|
+
if (!parsed.success) {
|
|
13
|
+
return { status: "unavailable", reasons: ["outreach_draft_schema_invalid"] };
|
|
14
|
+
}
|
|
15
|
+
const r = parsed.data;
|
|
16
|
+
if (r.judgmentVerdict !== "allow") {
|
|
17
|
+
return { status: "unavailable", reasons: ["hard_decision_not_allow"] };
|
|
18
|
+
}
|
|
19
|
+
if (r.sourceRefs.length === 0) {
|
|
20
|
+
return { status: "unavailable", reasons: ["missing_resolved_source_refs"] };
|
|
21
|
+
}
|
|
22
|
+
const wording = r.deliveryContext.wordingMode;
|
|
23
|
+
if (wording === "sendable") {
|
|
24
|
+
return {
|
|
25
|
+
status: "ready",
|
|
26
|
+
draft: {
|
|
27
|
+
text: `${baseDraftText(r)};wording=sendable`,
|
|
28
|
+
deliveryWording: "sendable",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
status: "ready",
|
|
34
|
+
draft: {
|
|
35
|
+
text: `Not sent to the user (candidate only). Delivery state: ${r.deliveryContext.deliveryVerdict}. ${baseDraftText(r)}`,
|
|
36
|
+
deliveryWording: "not_sent_fallback_candidate",
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createDraftOutreachMessagePort() {
|
|
41
|
+
return { draftOutreachMessage };
|
|
42
|
+
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Evidence pack assembly, interest-basis selection, and Quiet narrative gate (T6.1.2 / ADR-004).
|
|
3
|
-
* Guidance does not own delivery or judgment; callers pass already-resolved refs.
|
|
4
|
-
*/
|
|
5
|
-
import type { GuidanceSourceRef } from "./outreach-draft-schema.js";
|
|
6
|
-
import type { UserInterestStaleness } from "../storage/user-interest/types.js";
|
|
7
|
-
import type { SourceCoverage } from "../storage/snapshots/types.js";
|
|
8
|
-
export type SourceCoveragePolicy = "strict" | "lenient";
|
|
9
|
-
export interface EvidencePack {
|
|
10
|
-
groundedRefs: GuidanceSourceRef[];
|
|
11
|
-
unresolvedIds: string[];
|
|
12
|
-
sensitiveBlocked: boolean;
|
|
13
|
-
policy: SourceCoveragePolicy;
|
|
14
|
-
}
|
|
15
|
-
export declare function buildEvidencePack(refs: GuidanceSourceRef[], opts?: {
|
|
16
|
-
policy?: SourceCoveragePolicy;
|
|
17
|
-
}): {
|
|
18
|
-
ok: true;
|
|
19
|
-
pack: EvidencePack;
|
|
20
|
-
} | {
|
|
21
|
-
ok: false;
|
|
22
|
-
reasons: string[];
|
|
23
|
-
};
|
|
24
|
-
export type InterestBasisMode = "evidence_only" | "interest_augmented" | "unavailable";
|
|
25
|
-
export declare function selectInterestBasis(input: {
|
|
26
|
-
staleness: UserInterestStaleness;
|
|
27
|
-
confidence: number;
|
|
28
|
-
signalCount: number;
|
|
29
|
-
}): InterestBasisMode;
|
|
30
|
-
export declare function buildQuietNarrativeGuidance(input: {
|
|
31
|
-
interestBasis: InterestBasisMode;
|
|
32
|
-
sourceCoverage: Pick<SourceCoverage, "coverageRatio" | "unsupportedClaims">;
|
|
33
|
-
outline: string[];
|
|
34
|
-
}): {
|
|
35
|
-
status: "ready";
|
|
36
|
-
hints: string[];
|
|
37
|
-
} | {
|
|
38
|
-
status: "unavailable";
|
|
39
|
-
reasons: string[];
|
|
40
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Evidence pack assembly, interest-basis selection, and Quiet narrative gate (T6.1.2 / ADR-004).
|
|
3
|
+
* Guidance does not own delivery or judgment; callers pass already-resolved refs.
|
|
4
|
+
*/
|
|
5
|
+
import type { GuidanceSourceRef } from "./outreach-draft-schema.js";
|
|
6
|
+
import type { UserInterestStaleness } from "../storage/user-interest/types.js";
|
|
7
|
+
import type { SourceCoverage } from "../storage/snapshots/types.js";
|
|
8
|
+
export type SourceCoveragePolicy = "strict" | "lenient";
|
|
9
|
+
export interface EvidencePack {
|
|
10
|
+
groundedRefs: GuidanceSourceRef[];
|
|
11
|
+
unresolvedIds: string[];
|
|
12
|
+
sensitiveBlocked: boolean;
|
|
13
|
+
policy: SourceCoveragePolicy;
|
|
14
|
+
}
|
|
15
|
+
export declare function buildEvidencePack(refs: GuidanceSourceRef[], opts?: {
|
|
16
|
+
policy?: SourceCoveragePolicy;
|
|
17
|
+
}): {
|
|
18
|
+
ok: true;
|
|
19
|
+
pack: EvidencePack;
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
reasons: string[];
|
|
23
|
+
};
|
|
24
|
+
export type InterestBasisMode = "evidence_only" | "interest_augmented" | "unavailable";
|
|
25
|
+
export declare function selectInterestBasis(input: {
|
|
26
|
+
staleness: UserInterestStaleness;
|
|
27
|
+
confidence: number;
|
|
28
|
+
signalCount: number;
|
|
29
|
+
}): InterestBasisMode;
|
|
30
|
+
export declare function buildQuietNarrativeGuidance(input: {
|
|
31
|
+
interestBasis: InterestBasisMode;
|
|
32
|
+
sourceCoverage: Pick<SourceCoverage, "coverageRatio" | "unsupportedClaims">;
|
|
33
|
+
outline: string[];
|
|
34
|
+
}): {
|
|
35
|
+
status: "ready";
|
|
36
|
+
hints: string[];
|
|
37
|
+
} | {
|
|
38
|
+
status: "unavailable";
|
|
39
|
+
reasons: string[];
|
|
40
|
+
};
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
export function buildEvidencePack(refs, opts) {
|
|
2
|
-
const policy = opts?.policy ?? "strict";
|
|
3
|
-
const unresolvedIds = [];
|
|
4
|
-
let sensitiveBlocked = false;
|
|
5
|
-
const grounded = [];
|
|
6
|
-
for (const r of refs) {
|
|
7
|
-
if (!r.uri?.trim()) {
|
|
8
|
-
unresolvedIds.push(r.id);
|
|
9
|
-
continue;
|
|
10
|
-
}
|
|
11
|
-
if (r.uri.includes("credential") || r.uri.includes("secret")) {
|
|
12
|
-
sensitiveBlocked = true;
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
grounded.push(r);
|
|
16
|
-
}
|
|
17
|
-
if (policy === "strict" && unresolvedIds.length > 0) {
|
|
18
|
-
return { ok: false, reasons: ["unresolved_source_refs", ...unresolvedIds.slice(0, 3)] };
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
ok: true,
|
|
22
|
-
pack: {
|
|
23
|
-
groundedRefs: grounded,
|
|
24
|
-
unresolvedIds,
|
|
25
|
-
sensitiveBlocked,
|
|
26
|
-
policy,
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export function selectInterestBasis(input) {
|
|
31
|
-
if (input.staleness === "insufficient" || input.confidence < 0.15) {
|
|
32
|
-
return input.signalCount > 0 ? "evidence_only" : "unavailable";
|
|
33
|
-
}
|
|
34
|
-
if (input.staleness === "stale") {
|
|
35
|
-
return "evidence_only";
|
|
36
|
-
}
|
|
37
|
-
return "interest_augmented";
|
|
38
|
-
}
|
|
39
|
-
export function buildQuietNarrativeGuidance(input) {
|
|
40
|
-
if (input.interestBasis === "unavailable" && input.sourceCoverage.coverageRatio < 0.25) {
|
|
41
|
-
return { status: "unavailable", reasons: ["quiet_guidance_insufficient_interest_and_coverage"] };
|
|
42
|
-
}
|
|
43
|
-
if (input.sourceCoverage.unsupportedClaims.length > 0) {
|
|
44
|
-
return { status: "unavailable", reasons: ["quiet_guidance_unsupported_claims"] };
|
|
45
|
-
}
|
|
46
|
-
const hints = [
|
|
47
|
-
...input.outline.slice(0, 3).map((line) => `hint:${line}`),
|
|
48
|
-
`basis:${input.interestBasis}`,
|
|
49
|
-
`coverage:${input.sourceCoverage.coverageRatio.toFixed(2)}`,
|
|
50
|
-
];
|
|
51
|
-
return { status: "ready", hints };
|
|
52
|
-
}
|
|
1
|
+
export function buildEvidencePack(refs, opts) {
|
|
2
|
+
const policy = opts?.policy ?? "strict";
|
|
3
|
+
const unresolvedIds = [];
|
|
4
|
+
let sensitiveBlocked = false;
|
|
5
|
+
const grounded = [];
|
|
6
|
+
for (const r of refs) {
|
|
7
|
+
if (!r.uri?.trim()) {
|
|
8
|
+
unresolvedIds.push(r.id);
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
if (r.uri.includes("credential") || r.uri.includes("secret")) {
|
|
12
|
+
sensitiveBlocked = true;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
grounded.push(r);
|
|
16
|
+
}
|
|
17
|
+
if (policy === "strict" && unresolvedIds.length > 0) {
|
|
18
|
+
return { ok: false, reasons: ["unresolved_source_refs", ...unresolvedIds.slice(0, 3)] };
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
ok: true,
|
|
22
|
+
pack: {
|
|
23
|
+
groundedRefs: grounded,
|
|
24
|
+
unresolvedIds,
|
|
25
|
+
sensitiveBlocked,
|
|
26
|
+
policy,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function selectInterestBasis(input) {
|
|
31
|
+
if (input.staleness === "insufficient" || input.confidence < 0.15) {
|
|
32
|
+
return input.signalCount > 0 ? "evidence_only" : "unavailable";
|
|
33
|
+
}
|
|
34
|
+
if (input.staleness === "stale") {
|
|
35
|
+
return "evidence_only";
|
|
36
|
+
}
|
|
37
|
+
return "interest_augmented";
|
|
38
|
+
}
|
|
39
|
+
export function buildQuietNarrativeGuidance(input) {
|
|
40
|
+
if (input.interestBasis === "unavailable" && input.sourceCoverage.coverageRatio < 0.25) {
|
|
41
|
+
return { status: "unavailable", reasons: ["quiet_guidance_insufficient_interest_and_coverage"] };
|
|
42
|
+
}
|
|
43
|
+
if (input.sourceCoverage.unsupportedClaims.length > 0) {
|
|
44
|
+
return { status: "unavailable", reasons: ["quiet_guidance_unsupported_claims"] };
|
|
45
|
+
}
|
|
46
|
+
const hints = [
|
|
47
|
+
...input.outline.slice(0, 3).map((line) => `hint:${line}`),
|
|
48
|
+
`basis:${input.interestBasis}`,
|
|
49
|
+
`coverage:${input.sourceCoverage.coverageRatio.toFixed(2)}`,
|
|
50
|
+
];
|
|
51
|
+
return { status: "ready", hints };
|
|
52
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from "./types.js";
|
|
2
|
-
export * from "./contracts.js";
|
|
3
|
-
export * from "./persona-selection.js";
|
|
4
|
-
export * from "./output-guard.js";
|
|
5
|
-
export * from "./fallback.js";
|
|
6
|
-
export * from "./template-registry.js";
|
|
7
|
-
export * from "./review-workflow.js";
|
|
8
|
-
export * from "./guidance-assembler.js";
|
|
9
|
-
export * from "./outreach-draft-schema.js";
|
|
10
|
-
export * from "./draft-outreach-message.js";
|
|
11
|
-
export * from "./evidence-guidance.js";
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./contracts.js";
|
|
3
|
+
export * from "./persona-selection.js";
|
|
4
|
+
export * from "./output-guard.js";
|
|
5
|
+
export * from "./fallback.js";
|
|
6
|
+
export * from "./template-registry.js";
|
|
7
|
+
export * from "./review-workflow.js";
|
|
8
|
+
export * from "./guidance-assembler.js";
|
|
9
|
+
export * from "./outreach-draft-schema.js";
|
|
10
|
+
export * from "./draft-outreach-message.js";
|
|
11
|
+
export * from "./evidence-guidance.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from "./types.js";
|
|
2
|
-
export * from "./contracts.js";
|
|
3
|
-
export * from "./persona-selection.js";
|
|
4
|
-
export * from "./output-guard.js";
|
|
5
|
-
export * from "./fallback.js";
|
|
6
|
-
export * from "./template-registry.js";
|
|
7
|
-
export * from "./review-workflow.js";
|
|
8
|
-
export * from "./guidance-assembler.js";
|
|
9
|
-
export * from "./outreach-draft-schema.js";
|
|
10
|
-
export * from "./draft-outreach-message.js";
|
|
11
|
-
export * from "./evidence-guidance.js";
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./contracts.js";
|
|
3
|
+
export * from "./persona-selection.js";
|
|
4
|
+
export * from "./output-guard.js";
|
|
5
|
+
export * from "./fallback.js";
|
|
6
|
+
export * from "./template-registry.js";
|
|
7
|
+
export * from "./review-workflow.js";
|
|
8
|
+
export * from "./guidance-assembler.js";
|
|
9
|
+
export * from "./outreach-draft-schema.js";
|
|
10
|
+
export * from "./draft-outreach-message.js";
|
|
11
|
+
export * from "./evidence-guidance.js";
|