@sentropic/focus 0.3.0 → 0.5.0-rc.3
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/README.md +9 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +73 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/registry/definitions.d.ts +159 -0
- package/dist/registry/definitions.d.ts.map +1 -0
- package/dist/registry/definitions.js +501 -0
- package/dist/registry/definitions.js.map +1 -0
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +12 -1
- package/dist/render/html.js.map +1 -1
- package/dist/render/md.d.ts.map +1 -1
- package/dist/render/md.js +12 -1
- package/dist/render/md.js.map +1 -1
- package/dist/render/presentation.d.ts +4 -0
- package/dist/render/presentation.d.ts.map +1 -0
- package/dist/render/presentation.js +25 -0
- package/dist/render/presentation.js.map +1 -0
- package/dist/render/terminal.d.ts.map +1 -1
- package/dist/render/terminal.js +12 -1
- package/dist/render/terminal.js.map +1 -1
- package/dist/track/index.d.ts.map +1 -1
- package/dist/track/index.js +24 -10
- package/dist/track/index.js.map +1 -1
- package/dist/validation/index.d.ts +59 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +490 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/readability.d.ts +28 -0
- package/dist/validation/readability.d.ts.map +1 -0
- package/dist/validation/readability.js +244 -0
- package/dist/validation/readability.js.map +1 -0
- package/package.json +25 -8
- package/registry/entries.v1.json +127 -0
- package/schemas/decision-dossier-document.v1.schema.json +193 -0
- package/skills/focus/SKILL.md +132 -0
package/README.md
CHANGED
|
@@ -5,6 +5,15 @@ A **focused-session document runtime** — the read-only **FocusSnapshot** rende
|
|
|
5
5
|
to orient/steer it (decide being one modality among orient / amend / comment). See
|
|
6
6
|
`spec/SPEC_VOL_FOCUS.md`.
|
|
7
7
|
|
|
8
|
+
Decision presentation now requires the [readability gate](READABILITY.md): a literal
|
|
9
|
+
owner request, plain stakes, short explicit questions/options, a recommendation,
|
|
10
|
+
reading estimates and a visible glossary for codes. Public renderers refuse before
|
|
11
|
+
host hooks run. `@sentropic/focus/validate` exports
|
|
12
|
+
`validateDecisionDossierForPresentation` and `assertDecisionDossierForPresentation`.
|
|
13
|
+
The schema additions are optional, and `validateDecisionDossierDocument` still
|
|
14
|
+
accepts historical data. Legacy Track projections cannot be presented until they
|
|
15
|
+
supply this information; Focus never invents an owner request to pass the gate.
|
|
16
|
+
|
|
8
17
|
This package is **private** (`"private": true`) and **app-local-first**: it is not yet published.
|
|
9
18
|
It is extracted to `@sentropic/focus` on npm only once a real external consumer wires it
|
|
10
19
|
(repo real-consumption rule).
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAiBH,iFAAiF;AACjF,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AA2G3C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAiBD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAiBH,iFAAiF;AACjF,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AA2G3C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAiBD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,GAAG,GACd,MAAM,SAAS,MAAM,EAAE,EACvB,OAAM,YAAiB,KACtB,OAAO,CAAC,MAAM,CAkDhB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* `@sentropic/track/read` `DecisionDossierView` + `amendmentTrace` (L2 replaced L1's local
|
|
8
8
|
* `DecisionDossierViewFixture` type + mapper).
|
|
9
9
|
*/
|
|
10
|
-
export type { Affordance, AmendmentStep, AmendmentTraceNode, ComprehensionEvidence, DecisionDossierDocument, DiagramNode, DiagramSyntax, FocusNode, FocusProvenance, FocusRef, OptionAnnotationState, OptionNode, OptionSetNode, OutcomeModality, OutcomeNode, ProseNode, QuestionNode, QuestionValidationState, TargetRef, } from "./model.js";
|
|
10
|
+
export type { Affordance, AmendmentStep, AmendmentTraceNode, ComprehensionEvidence, DecisionDossierDocument, DiagramNode, DiagramSyntax, DossierReadability, FocusNode, FocusProvenance, FocusRef, GlossaryEntry, OptionAnnotationState, OptionNode, OptionSetNode, OutcomeModality, OutcomeNode, ProseNode, QuestionNode, QuestionValidationState, TargetRef, } from "./model.js";
|
|
11
11
|
export type { HtmlRenderHooks, MdRenderHooks, RenderMarkdown, SanitizeHtml, } from "./render/hooks.js";
|
|
12
12
|
export { renderTerminal } from "./render/terminal.js";
|
|
13
13
|
export type { TerminalRenderOptions } from "./render/terminal.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,SAAS,EACT,eAAe,EACf,QAAQ,EACR,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,uBAAuB,EACvB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,QAAQ,EACR,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,uBAAuB,EACvB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiCH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/model.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ interface FocusNodeBase {
|
|
|
37
37
|
export interface ProseNode extends FocusNodeBase {
|
|
38
38
|
readonly kind: "prose";
|
|
39
39
|
readonly markdown: string;
|
|
40
|
+
/** Explicit question covered by any choice discussed in this prose. */
|
|
41
|
+
readonly questionId?: string;
|
|
40
42
|
}
|
|
41
43
|
/** A question with a recommended answer (préco) and a validation state. */
|
|
42
44
|
export interface QuestionNode extends FocusNodeBase {
|
|
@@ -44,9 +46,22 @@ export interface QuestionNode extends FocusNodeBase {
|
|
|
44
46
|
readonly question: string;
|
|
45
47
|
/** The recommended answer (préco). Optional — a question may be open with no préco yet. */
|
|
46
48
|
readonly recommendedAnswer?: string;
|
|
49
|
+
/** Recommended option among those linked to this question; reason in recommendedAnswer. */
|
|
50
|
+
readonly recommendedOptionId?: string;
|
|
47
51
|
/** The actual answer, when answered. */
|
|
48
52
|
readonly answer?: string;
|
|
49
53
|
readonly state: QuestionValidationState;
|
|
54
|
+
/**
|
|
55
|
+
* Readability: the decision context in plain words (what the owner needs to
|
|
56
|
+
* know to answer in ~2 minutes). Optional at schema level; the readability
|
|
57
|
+
* gate requires it before presentation.
|
|
58
|
+
*/
|
|
59
|
+
readonly context?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Readability: estimated reading time for this question (minutes, ≤ 2).
|
|
62
|
+
* Optional at schema level; the readability gate requires it.
|
|
63
|
+
*/
|
|
64
|
+
readonly readingTimeMinutes?: number;
|
|
50
65
|
}
|
|
51
66
|
/** A single option/proposal/alternative with a Claude-style annotation state. */
|
|
52
67
|
export interface OptionNode extends FocusNodeBase {
|
|
@@ -56,18 +71,31 @@ export interface OptionNode extends FocusNodeBase {
|
|
|
56
71
|
readonly annotation: OptionAnnotationState;
|
|
57
72
|
/** Optional free-text comment carried with a `comment` annotation. */
|
|
58
73
|
readonly annotationComment?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Readability: the one-line consequence of this option for the owner.
|
|
76
|
+
* Optional at schema level; the readability gate requires it.
|
|
77
|
+
*/
|
|
78
|
+
readonly consequence?: string;
|
|
59
79
|
}
|
|
60
80
|
/** A set of mutually-related options/proposals. */
|
|
61
81
|
export interface OptionSetNode extends FocusNodeBase {
|
|
62
82
|
readonly kind: "optionSet";
|
|
63
83
|
readonly title?: string;
|
|
64
84
|
readonly options: readonly OptionNode[];
|
|
85
|
+
/**
|
|
86
|
+
* Readability: the id of the explicit question these options answer.
|
|
87
|
+
* Optional at schema level; the readability gate requires it so no choice
|
|
88
|
+
* is ever implied without an explicit question (no hidden decision).
|
|
89
|
+
*/
|
|
90
|
+
readonly questionId?: string;
|
|
65
91
|
}
|
|
66
92
|
/** The modality-tagged outcome of the focus. */
|
|
67
93
|
export interface OutcomeNode extends FocusNodeBase {
|
|
68
94
|
readonly kind: "outcome";
|
|
69
95
|
readonly modality: OutcomeModality;
|
|
70
96
|
readonly statement: string;
|
|
97
|
+
/** The explicit question this decision, orientation or amendment resolves. */
|
|
98
|
+
readonly questionId?: string;
|
|
71
99
|
}
|
|
72
100
|
/** One ordered step of the amendment trace. */
|
|
73
101
|
export interface AmendmentStep {
|
|
@@ -86,6 +114,9 @@ export interface DiagramNode extends FocusNodeBase {
|
|
|
86
114
|
readonly syntax: DiagramSyntax;
|
|
87
115
|
readonly source: string;
|
|
88
116
|
readonly alt: string;
|
|
117
|
+
/** diagram-core SemanticDocument, generic@1, without views/geometry/layout hints.
|
|
118
|
+
* Kept as plain JSON until the private DS package publishes its schema. */
|
|
119
|
+
readonly scene?: Readonly<Record<string, unknown>>;
|
|
89
120
|
}
|
|
90
121
|
/** The node families needed to render a decision-dossier. */
|
|
91
122
|
export type FocusNode = ProseNode | QuestionNode | OptionSetNode | OutcomeNode | AmendmentTraceNode | DiagramNode;
|
|
@@ -96,7 +127,11 @@ export type FocusNode = ProseNode | QuestionNode | OptionSetNode | OutcomeNode |
|
|
|
96
127
|
*/
|
|
97
128
|
export interface Affordance {
|
|
98
129
|
readonly name: string;
|
|
99
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* The target this affordance would act on. Resolves to the dossier `ref`
|
|
132
|
+
* (whole-dossier amend), a section `id`/`targetRef`, or a nested option
|
|
133
|
+
* `id`/`targetRef` — the same resolution scope the validator enforces.
|
|
134
|
+
*/
|
|
100
135
|
readonly targetRef: TargetRef;
|
|
101
136
|
/** Human-readable label for the disabled-affordance metadata. */
|
|
102
137
|
readonly label: string;
|
|
@@ -121,6 +156,37 @@ export interface FocusProvenance {
|
|
|
121
156
|
readonly readAt: string;
|
|
122
157
|
readonly comprehensionEvidence?: ComprehensionEvidence;
|
|
123
158
|
}
|
|
159
|
+
/** One glossary entry: an opaque code mapped to plain words for the reader. */
|
|
160
|
+
export interface GlossaryEntry {
|
|
161
|
+
readonly term: string;
|
|
162
|
+
readonly definition: string;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Dossier-level readability statement: owner traceability, plain-words stakes,
|
|
166
|
+
* the reading budget the per-question times must fit, and the glossary that
|
|
167
|
+
* defines every code shown to the reader. Entirely optional at schema level
|
|
168
|
+
* (backward compatible); the readability gate requires it before presentation.
|
|
169
|
+
*/
|
|
170
|
+
export interface DossierReadability {
|
|
171
|
+
/**
|
|
172
|
+
* The owner's literal request this dossier serves, quoted verbatim
|
|
173
|
+
* (traceability). Exactly one of `ownerRequestQuote` / `noOwnerRequest`.
|
|
174
|
+
*/
|
|
175
|
+
readonly ownerRequestQuote?: string;
|
|
176
|
+
/**
|
|
177
|
+
* Explicit flag: no owner request backs this dossier. Blocks presentation
|
|
178
|
+
* until a request is quoted — never present a dossier carrying it.
|
|
179
|
+
*/
|
|
180
|
+
readonly noOwnerRequest?: boolean;
|
|
181
|
+
/** Why this matters to the owner, in plain words (not internal jargon). */
|
|
182
|
+
readonly stakes?: string;
|
|
183
|
+
/** Declared impact: low (reversible), medium (cost/disruption), high (lasting impact). */
|
|
184
|
+
readonly stakesLevel?: "low" | "medium" | "high";
|
|
185
|
+
/** Total reading budget in minutes (≤ 30), proportionate to the stakes. */
|
|
186
|
+
readonly readingBudgetMinutes?: number;
|
|
187
|
+
/** Every code shown to the reader, defined in plain words. */
|
|
188
|
+
readonly glossary?: readonly GlossaryEntry[];
|
|
189
|
+
}
|
|
124
190
|
/**
|
|
125
191
|
* The CONCRETE decision-dossier document — a FocusDocument whose primary outcome modality is a
|
|
126
192
|
* decision. Maps to track `DecisionDossierView{outcome,dossier,comprehensionEvidence}` +
|
|
@@ -139,6 +205,12 @@ export interface DecisionDossierDocument {
|
|
|
139
205
|
readonly interactions: readonly Affordance[];
|
|
140
206
|
readonly provenance: FocusProvenance;
|
|
141
207
|
readonly amendmentTrace: readonly AmendmentStep[];
|
|
208
|
+
/**
|
|
209
|
+
* Readability statement. Optional at schema level (backward compatible);
|
|
210
|
+
* the readability gate (`@sentropic/focus/validate`) requires it and
|
|
211
|
+
* refuses presentation without it.
|
|
212
|
+
*/
|
|
213
|
+
readonly readability?: DossierReadability;
|
|
142
214
|
}
|
|
143
215
|
export {};
|
|
144
216
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnF,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAExE,kFAAkF;AAClF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7E,0FAA0F;AAC1F,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,4FAA4F;AAC5F,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@sentropic/focus/registry/definitions` — the publisher-owned definition
|
|
3
|
+
* surface for the `sentropic.focus` skill entry (contract §§3–4, R4).
|
|
4
|
+
*
|
|
5
|
+
* This module is SIDE-EFFECT-FREE: importing it reads no file, opens no
|
|
6
|
+
* handle and touches no network. The JSON manifest is read only when
|
|
7
|
+
* {@link loadFocusSkillDescriptor} is called; instruction text is read only
|
|
8
|
+
* through the caller-supplied loader in {@link resolveFocusPresentation},
|
|
9
|
+
* and only AFTER the presentation preflight succeeds — so an unavailable
|
|
10
|
+
* presentation refuses with `unsupported_presentation` with zero instruction
|
|
11
|
+
* loads.
|
|
12
|
+
*/
|
|
13
|
+
/** Canonical registry ID of the Focus skill. */
|
|
14
|
+
export declare const FOCUS_SKILL_ID = "sentropic.focus";
|
|
15
|
+
/** Public entry version of the first Focus registry release. */
|
|
16
|
+
export declare const FOCUS_ENTRY_VERSION = "1.0.0";
|
|
17
|
+
/** Entry-contract version this descriptor conforms to. */
|
|
18
|
+
export declare const FOCUS_CONTRACT_VERSION = "1.1.4";
|
|
19
|
+
/** Parameter-schema version of the Focus entry (contract §5.4). */
|
|
20
|
+
export declare const FOCUS_PARAMETERS_SCHEMA_VERSION = "1.0.0";
|
|
21
|
+
/** Existing skill-description limit enforced by the contract. */
|
|
22
|
+
export declare const MAX_SKILL_DESCRIPTION_LENGTH = 280;
|
|
23
|
+
export type FocusPresentation = "terminal" | "markdown" | "html" | "mcp-app";
|
|
24
|
+
export type FocusLocale = "en" | "fr";
|
|
25
|
+
export interface FocusParameters {
|
|
26
|
+
readonly mode: "snapshot";
|
|
27
|
+
readonly preferredPresentation: FocusPresentation;
|
|
28
|
+
readonly locale: FocusLocale;
|
|
29
|
+
}
|
|
30
|
+
/** Exact §5.4 defaults, applied once before validation. */
|
|
31
|
+
export declare const FOCUS_PARAMETER_DEFAULTS: FocusParameters;
|
|
32
|
+
export interface DefinitionIssue {
|
|
33
|
+
readonly path: string;
|
|
34
|
+
readonly code: string;
|
|
35
|
+
readonly message: string;
|
|
36
|
+
}
|
|
37
|
+
export type DefinitionResult<T> = {
|
|
38
|
+
readonly ok: true;
|
|
39
|
+
readonly value: T;
|
|
40
|
+
} | {
|
|
41
|
+
readonly ok: false;
|
|
42
|
+
readonly issues: readonly DefinitionIssue[];
|
|
43
|
+
};
|
|
44
|
+
export interface FocusAsset {
|
|
45
|
+
readonly role: string;
|
|
46
|
+
readonly path: string;
|
|
47
|
+
readonly mediaType: string;
|
|
48
|
+
readonly sha256: string;
|
|
49
|
+
}
|
|
50
|
+
export interface FocusDocumentSchemaRef {
|
|
51
|
+
readonly name: string;
|
|
52
|
+
readonly schemaId: string;
|
|
53
|
+
readonly version: string;
|
|
54
|
+
readonly assetPath: string;
|
|
55
|
+
readonly sha256: string;
|
|
56
|
+
}
|
|
57
|
+
export interface FocusSkillPayload {
|
|
58
|
+
readonly profile: "instructions";
|
|
59
|
+
readonly metadata: {
|
|
60
|
+
readonly category: string;
|
|
61
|
+
readonly contextFilters: readonly string[];
|
|
62
|
+
readonly permissions: readonly string[];
|
|
63
|
+
readonly toolNames: readonly string[];
|
|
64
|
+
};
|
|
65
|
+
readonly instructionsAsset: string;
|
|
66
|
+
readonly capabilities: ReadonlyArray<{
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly description: string;
|
|
69
|
+
readonly effect: "read-only" | "mutation";
|
|
70
|
+
readonly permissions: readonly string[];
|
|
71
|
+
readonly inputSchemaRef?: string;
|
|
72
|
+
readonly outputSchemaRef?: string;
|
|
73
|
+
}>;
|
|
74
|
+
readonly tools: readonly unknown[];
|
|
75
|
+
readonly documentSchemas: readonly FocusDocumentSchemaRef[];
|
|
76
|
+
readonly dependencies: readonly unknown[];
|
|
77
|
+
}
|
|
78
|
+
export interface FocusEntryDescriptor {
|
|
79
|
+
readonly format: "sentropic.registry-entry/v1";
|
|
80
|
+
readonly contractVersion: string;
|
|
81
|
+
readonly kind: "skill";
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly name: string;
|
|
84
|
+
readonly description: string;
|
|
85
|
+
readonly entryVersion: string;
|
|
86
|
+
readonly publisher: {
|
|
87
|
+
readonly packageName: string;
|
|
88
|
+
readonly packageVersion: string;
|
|
89
|
+
};
|
|
90
|
+
readonly compatibility: {
|
|
91
|
+
readonly entryContract: string;
|
|
92
|
+
readonly packages: ReadonlyArray<{
|
|
93
|
+
readonly name: string;
|
|
94
|
+
readonly range: string;
|
|
95
|
+
}>;
|
|
96
|
+
readonly schemaProfiles: readonly string[];
|
|
97
|
+
readonly requiredHostFeatures: readonly string[];
|
|
98
|
+
readonly optionalHostFeatures: readonly string[];
|
|
99
|
+
};
|
|
100
|
+
readonly parameters: {
|
|
101
|
+
readonly schemaVersion: string;
|
|
102
|
+
readonly schema: Record<string, unknown>;
|
|
103
|
+
readonly defaults: Record<string, unknown>;
|
|
104
|
+
};
|
|
105
|
+
readonly bindings: readonly unknown[];
|
|
106
|
+
readonly assets: readonly FocusAsset[];
|
|
107
|
+
readonly skill: FocusSkillPayload;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Closed validation of the publisher-owned Focus entry descriptor.
|
|
111
|
+
* Pure: no I/O, so catalog-time checks perform zero instruction reads.
|
|
112
|
+
*/
|
|
113
|
+
export declare const validateFocusEntryDescriptor: (value: unknown) => DefinitionResult<FocusEntryDescriptor>;
|
|
114
|
+
/**
|
|
115
|
+
* Validate Focus configuration values against the exact §5.4 profile.
|
|
116
|
+
* Declared defaults apply once before validation; unknown keys refuse.
|
|
117
|
+
*/
|
|
118
|
+
export declare const validateFocusParameters: (value: unknown) => DefinitionResult<FocusParameters>;
|
|
119
|
+
export interface PresentationGate {
|
|
120
|
+
/** True when the host registry holds a UI entry for Focus. */
|
|
121
|
+
readonly uiRegistered: boolean;
|
|
122
|
+
/** True when the host selected that UI entry for this session. */
|
|
123
|
+
readonly uiSelected: boolean;
|
|
124
|
+
/** True when the host qualified the selected UI entry. */
|
|
125
|
+
readonly uiQualified: boolean;
|
|
126
|
+
/** True only when the host supplies an HTML sanitization hook. */
|
|
127
|
+
readonly htmlSanitizerAvailable: boolean;
|
|
128
|
+
}
|
|
129
|
+
export type PresentationResolution = {
|
|
130
|
+
readonly ok: true;
|
|
131
|
+
readonly instructions: string;
|
|
132
|
+
} | {
|
|
133
|
+
readonly ok: false;
|
|
134
|
+
readonly code: "unsupported_presentation";
|
|
135
|
+
readonly message: string;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Presentation preflight for the selected Focus configuration.
|
|
139
|
+
* `loadInstructions` runs ONLY when the requested presentation is usable, so
|
|
140
|
+
* an unavailable `mcp-app` (or an unsanitized `html`) refuses with
|
|
141
|
+
* `unsupported_presentation` with zero instruction reads/loads.
|
|
142
|
+
*/
|
|
143
|
+
export declare const resolveFocusPresentation: (params: FocusParameters, gate: PresentationGate, loadInstructions: () => string) => PresentationResolution;
|
|
144
|
+
/**
|
|
145
|
+
* Read the package-owned registry manifest (`registry/entries.v1.json`).
|
|
146
|
+
* Called explicitly by the host; importing this module alone reads nothing.
|
|
147
|
+
*
|
|
148
|
+
* The compiled snapshot vendored into `@sentropic/track`
|
|
149
|
+
* (`packages/track/src/focus-vendor/registry/entries.v1.json`) ships the
|
|
150
|
+
* pinned 1.0.0 manifest alongside the compiled helper, so the vendor never
|
|
151
|
+
* resolves a foreign `@sentropic/focus` copy: package layout first,
|
|
152
|
+
* vendor-adjacent manifest second, and no cross-package fallback.
|
|
153
|
+
*/
|
|
154
|
+
export declare const loadFocusSkillDescriptor: () => unknown;
|
|
155
|
+
/** Recompute every asset/schema digest over the supplied bytes. */
|
|
156
|
+
export declare const verifyAssetDigests: (entry: FocusEntryDescriptor, readFile: (packageRelativePath: string) => Uint8Array | null) => DefinitionIssue[];
|
|
157
|
+
/** Refuse absolute paths, traversal, escapes and duplicates. */
|
|
158
|
+
export declare const assertSafeAssetPaths: (entry: Pick<FocusEntryDescriptor, "assets">) => DefinitionIssue[];
|
|
159
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/registry/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,gDAAgD;AAChD,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAE3C,0DAA0D;AAC1D,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,mEAAmE;AACnE,eAAO,MAAM,+BAA+B,UAAU,CAAC;AAEvD,iEAAiE;AACjE,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAC7E,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,EAAE,eAItC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACxC;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AA+CxE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;QACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;KACvC,CAAC;IACF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;QAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;QACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3C,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;QACjD,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAcD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,OAAO,OAAO,KACb,gBAAgB,CAAC,oBAAoB,CA0UvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,OAAO,KACb,gBAAgB,CAAC,eAAe,CAoClC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;CAC1C;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,eAAe,EACvB,MAAM,gBAAgB,EACtB,kBAAkB,MAAM,MAAM,KAC7B,sBAwBF,CAAC;AAIF;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,QAAO,OAM3C,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,GAC7B,OAAO,oBAAoB,EAC3B,UAAU,CAAC,mBAAmB,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,KAC3D,eAAe,EAqBjB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,GAC/B,OAAO,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,KAC1C,eAAe,EAoBjB,CAAC"}
|