@miadi/episodic-memory-schema 0.6.2 → 0.7.1
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/dist/observation.d.ts +86 -15
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +64 -12
- package/dist/observation.js.map +1 -1
- package/package.json +4 -3
package/dist/observation.d.ts
CHANGED
|
@@ -99,10 +99,8 @@ export interface CaptureProvenance {
|
|
|
99
99
|
export declare const ARTIFACT_REPLACEABILITY: readonly ["irreplaceable", "regenerable", "unknown"];
|
|
100
100
|
export type ArtifactReplaceability = (typeof ARTIFACT_REPLACEABILITY)[number];
|
|
101
101
|
/**
|
|
102
|
-
* Whether one
|
|
103
|
-
* given and performs no walk
|
|
104
|
-
* `sourceArtifact` edges, and any member reporting `unknown` makes the whole set
|
|
105
|
-
* `unknown` rather than the optimistic answer.
|
|
102
|
+
* Whether one LEAF may be rebuilt. Pure and local — it reads the artifact it is
|
|
103
|
+
* given and performs no walk.
|
|
106
104
|
*
|
|
107
105
|
* - `captured` is irreplaceable, always. A device, an instant, one chance.
|
|
108
106
|
* - `authored` is irreplaceable UNLESS it names a `sourceArtifact` — an authored
|
|
@@ -117,8 +115,41 @@ export type ArtifactReplaceability = (typeof ARTIFACT_REPLACEABILITY)[number];
|
|
|
117
115
|
* renders, counts zero captured leaves, and reports the set safe to regenerate.
|
|
118
116
|
* The `.abc` is the only thing in it that cannot be remade. The rule was right
|
|
119
117
|
* about recordings and exactly wrong about the composed work this exists for.
|
|
118
|
+
*
|
|
119
|
+
* ## Why a set is refused here rather than answered
|
|
120
|
+
*
|
|
121
|
+
* 0.6.2 typed the parameter `Pick<ArtifactReference, "origin" | "sourceArtifact">`,
|
|
122
|
+
* which an {@link ArtifactSet} satisfies structurally — a set carries `origin`
|
|
123
|
+
* too. A film folder whose manifest said `origin: "derived"` therefore returned
|
|
124
|
+
* `regenerable` without a single member being looked at, and that answer is what
|
|
125
|
+
* authorises deleting a directory holding the only copy of a melody. A set's
|
|
126
|
+
* answer needs a walk; this function does not walk, so it must not answer.
|
|
127
|
+
*
|
|
128
|
+
* Two layers refuse it, because neither alone is enough:
|
|
129
|
+
*
|
|
130
|
+
* 1. **The type.** `kind` is required and must be an {@link ArtifactKind}, and
|
|
131
|
+
* `members` is forbidden. `ArtifactSet` declares `kind?: ArtifactSetKind` and
|
|
132
|
+
* a required `members: string[]`, so it fits neither clause.
|
|
133
|
+
* **This is partial and must be read as partial:** `"other"` belongs to BOTH
|
|
134
|
+
* `ARTIFACT_KINDS` and `ARTIFACT_SET_KINDS`, so a hand-written literal of
|
|
135
|
+
* `{ kind: "other", origin }` carrying no `members` field is indistinguishable
|
|
136
|
+
* from a leaf and still passes. The overlap is deliberate elsewhere and is not
|
|
137
|
+
* worth breaking to close this hole.
|
|
138
|
+
* 2. **The runtime.** A TypeScript type vanishes at the compile step, and the
|
|
139
|
+
* consumer this contract exists for reads plain JavaScript — the whole lesson
|
|
140
|
+
* of 0.6.1. So a value carrying a `members` array is answered `unknown`:
|
|
141
|
+
* provenance not established, because no walk happened. `unknown` is the
|
|
142
|
+
* honest state here for the same reason it exists at all.
|
|
143
|
+
*
|
|
144
|
+
* A caller holding a resolver may compose a set's answer from its members' leaf
|
|
145
|
+
* answers — `irreplaceable` dominates, then `unknown`, and only an all-
|
|
146
|
+
* `regenerable` set is `regenerable`. That walk is deliberately NOT exported:
|
|
147
|
+
* it needs an id-to-artifact resolver this observation-only package cannot
|
|
148
|
+
* supply, and until it can, an exported name would promise more than it does.
|
|
120
149
|
*/
|
|
121
|
-
export declare function artifactReplaceability(artifact: Pick<ArtifactReference, "origin" | "sourceArtifact">
|
|
150
|
+
export declare function artifactReplaceability(artifact: Pick<ArtifactReference, "kind" | "origin" | "sourceArtifact"> & {
|
|
151
|
+
members?: never;
|
|
152
|
+
}): ArtifactReplaceability;
|
|
122
153
|
export interface ArtifactReference {
|
|
123
154
|
id: string;
|
|
124
155
|
kind: ArtifactKind;
|
|
@@ -148,13 +179,25 @@ export interface ArtifactReference {
|
|
|
148
179
|
/**
|
|
149
180
|
* What a set gathers.
|
|
150
181
|
*
|
|
151
|
-
* Composition, Episode, Melody and Film are siblings at the same level —
|
|
152
|
-
* an extension of another, and none is a special case of a recording.
|
|
153
|
-
* is the IAIP folder. Absent means the gathering was observed without
|
|
154
|
-
* classified — an absence, not an error — and `other` is a set whose
|
|
155
|
-
* named a kind this list does not carry yet.
|
|
182
|
+
* Composition, Episode, Melody, Scene and Film are siblings at the same level —
|
|
183
|
+
* none is an extension of another, and none is a special case of a recording.
|
|
184
|
+
* `inquiry` is the IAIP folder. Absent means the gathering was observed without
|
|
185
|
+
* being classified — an absence, not an error — and `other` is a set whose
|
|
186
|
+
* source named a kind this list does not carry yet.
|
|
187
|
+
*
|
|
188
|
+
* `scene` was added 2026-07-31 from William's own sentence: *"Inside of one of
|
|
189
|
+
* my film, there are scenes. And inside of a scene, there is a musical
|
|
190
|
+
* composition. And inside of musical composition, there are multiple melodies.
|
|
191
|
+
* And all of that could be related to an artifact that we captured on the land,
|
|
192
|
+
* or can come from that."* Scene sits between `film` and `composition` in that
|
|
193
|
+
* hierarchy — a film gathers scenes, a scene gathers compositions.
|
|
194
|
+
*
|
|
195
|
+
* The ORDER of this array carries none of that. It is accretion order, and the
|
|
196
|
+
* hierarchy lives in the membership edges (`ArtifactRelation`) where it can
|
|
197
|
+
* differ per film. Reading containment out of this array's index would be
|
|
198
|
+
* reading a fact that was never written.
|
|
156
199
|
*/
|
|
157
|
-
export declare const ARTIFACT_SET_KINDS: readonly ["inquiry", "composition", "episode", "melody", "film", "other"];
|
|
200
|
+
export declare const ARTIFACT_SET_KINDS: readonly ["inquiry", "composition", "scene", "episode", "melody", "film", "other"];
|
|
158
201
|
export type ArtifactSetKind = (typeof ARTIFACT_SET_KINDS)[number];
|
|
159
202
|
/** Narrows an unvalidated string to {@link ArtifactSetKind}. */
|
|
160
203
|
export declare function isArtifactSetKind(value: unknown): value is ArtifactSetKind;
|
|
@@ -184,11 +227,34 @@ export interface ArtifactSet {
|
|
|
184
227
|
kind?: ArtifactSetKind;
|
|
185
228
|
/** How the gathering came to exist; same axis and same absence rule as a leaf. */
|
|
186
229
|
origin?: ArtifactOrigin;
|
|
230
|
+
/**
|
|
231
|
+
* The came-from pointer for the SET, same name and same semantics as on
|
|
232
|
+
* {@link ArtifactReference}: the artifact this gathering was made from.
|
|
233
|
+
*
|
|
234
|
+
* This is what lets a scene say it came from a take captured on the land, and
|
|
235
|
+
* a melody set say it came from the recording someone sang into a phone —
|
|
236
|
+
* William's *"can come from that"*. Without it the origin of a gathering could
|
|
237
|
+
* only be inferred by guessing at its members, which is exactly the guess this
|
|
238
|
+
* package refuses to make.
|
|
239
|
+
*
|
|
240
|
+
* It describes how the SET came to be, and never its members — the same rule
|
|
241
|
+
* `origin` already follows here, where a set's `origin` describes its own
|
|
242
|
+
* manifest and says nothing about what is inside it. A scene derived from a
|
|
243
|
+
* take may hold members that were authored, and neither field contradicts the
|
|
244
|
+
* other. Anything that needs the members' answer must walk them.
|
|
245
|
+
*/
|
|
246
|
+
sourceArtifact?: string;
|
|
187
247
|
label?: string;
|
|
188
248
|
/**
|
|
189
249
|
* Artifact ids gathered here. An empty array is meaningful: `scaffoldVessel`
|
|
190
250
|
* creates a named, empty inquiry directory on purpose, and that emptiness is
|
|
191
251
|
* the state of the inquiry, not missing data.
|
|
252
|
+
*
|
|
253
|
+
* Order carries no guarantee. Nothing may read sequence, priority or time out
|
|
254
|
+
* of this array's index — `observeEpisodeDirectory` re-sorts entries lexically,
|
|
255
|
+
* so a document's own order does not survive the round trip. Where order is
|
|
256
|
+
* meant, it is stated: `SegmentDescriptor` carries an explicit `order: number`
|
|
257
|
+
* precisely so it does not depend on position.
|
|
192
258
|
*/
|
|
193
259
|
members: string[];
|
|
194
260
|
metadata: Record<string, unknown>;
|
|
@@ -210,11 +276,16 @@ export type ArtifactRelationKind = (typeof ARTIFACT_RELATION_KINDS)[number];
|
|
|
210
276
|
export declare function isArtifactRelationKind(value: unknown): value is ArtifactRelationKind;
|
|
211
277
|
/**
|
|
212
278
|
* What can sit on the container end of a membership edge. Composition, Episode,
|
|
213
|
-
* Melody and Film are named at the same level because they are peers
|
|
214
|
-
* root; `artifact-set` covers a gathering whose kind is unclassified,
|
|
215
|
-
* `artifact` lets a set be a member of another set.
|
|
279
|
+
* Melody, Scene and Film are named at the same level because they are peers
|
|
280
|
+
* under one root; `artifact-set` covers a gathering whose kind is unclassified,
|
|
281
|
+
* and `artifact` lets a set be a member of another set.
|
|
282
|
+
*
|
|
283
|
+
* `scene` is named here for the same reason the others are: without it, the edge
|
|
284
|
+
* that puts a composition inside a scene degrades to `artifact-set`, and a
|
|
285
|
+
* reader can no longer tell a scene from any other unclassified gathering — the
|
|
286
|
+
* one relation in William's hierarchy that would have been lost silently.
|
|
216
287
|
*/
|
|
217
|
-
export declare const ARTIFACT_RELATION_TARGET_KINDS: readonly ["episode", "composition", "melody", "film", "artifact-set", "artifact"];
|
|
288
|
+
export declare const ARTIFACT_RELATION_TARGET_KINDS: readonly ["episode", "composition", "scene", "melody", "film", "artifact-set", "artifact"];
|
|
218
289
|
export type ArtifactRelationTargetKind = (typeof ARTIFACT_RELATION_TARGET_KINDS)[number];
|
|
219
290
|
/** Narrows an unvalidated string to {@link ArtifactRelationTargetKind}. */
|
|
220
291
|
export declare function isArtifactRelationTargetKind(value: unknown): value is ArtifactRelationTargetKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,WAAW,GACX,oBAAoB,CAAA;AAExB,MAAM,MAAM,mBAAmB,GAC3B,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,iBAAiB,CAAA;AAErB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IAClD,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,6EAQhB,CAAA;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,8CAA8D,CAAA;AAE3F,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,sDAIzB,CAAA;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7E
|
|
1
|
+
{"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"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"}
|
package/dist/observation.js
CHANGED
|
@@ -77,10 +77,8 @@ export const ARTIFACT_REPLACEABILITY = Object.freeze([
|
|
|
77
77
|
"unknown",
|
|
78
78
|
]);
|
|
79
79
|
/**
|
|
80
|
-
* Whether one
|
|
81
|
-
* given and performs no walk
|
|
82
|
-
* `sourceArtifact` edges, and any member reporting `unknown` makes the whole set
|
|
83
|
-
* `unknown` rather than the optimistic answer.
|
|
80
|
+
* Whether one LEAF may be rebuilt. Pure and local — it reads the artifact it is
|
|
81
|
+
* given and performs no walk.
|
|
84
82
|
*
|
|
85
83
|
* - `captured` is irreplaceable, always. A device, an instant, one chance.
|
|
86
84
|
* - `authored` is irreplaceable UNLESS it names a `sourceArtifact` — an authored
|
|
@@ -95,8 +93,43 @@ export const ARTIFACT_REPLACEABILITY = Object.freeze([
|
|
|
95
93
|
* renders, counts zero captured leaves, and reports the set safe to regenerate.
|
|
96
94
|
* The `.abc` is the only thing in it that cannot be remade. The rule was right
|
|
97
95
|
* about recordings and exactly wrong about the composed work this exists for.
|
|
96
|
+
*
|
|
97
|
+
* ## Why a set is refused here rather than answered
|
|
98
|
+
*
|
|
99
|
+
* 0.6.2 typed the parameter `Pick<ArtifactReference, "origin" | "sourceArtifact">`,
|
|
100
|
+
* which an {@link ArtifactSet} satisfies structurally — a set carries `origin`
|
|
101
|
+
* too. A film folder whose manifest said `origin: "derived"` therefore returned
|
|
102
|
+
* `regenerable` without a single member being looked at, and that answer is what
|
|
103
|
+
* authorises deleting a directory holding the only copy of a melody. A set's
|
|
104
|
+
* answer needs a walk; this function does not walk, so it must not answer.
|
|
105
|
+
*
|
|
106
|
+
* Two layers refuse it, because neither alone is enough:
|
|
107
|
+
*
|
|
108
|
+
* 1. **The type.** `kind` is required and must be an {@link ArtifactKind}, and
|
|
109
|
+
* `members` is forbidden. `ArtifactSet` declares `kind?: ArtifactSetKind` and
|
|
110
|
+
* a required `members: string[]`, so it fits neither clause.
|
|
111
|
+
* **This is partial and must be read as partial:** `"other"` belongs to BOTH
|
|
112
|
+
* `ARTIFACT_KINDS` and `ARTIFACT_SET_KINDS`, so a hand-written literal of
|
|
113
|
+
* `{ kind: "other", origin }` carrying no `members` field is indistinguishable
|
|
114
|
+
* from a leaf and still passes. The overlap is deliberate elsewhere and is not
|
|
115
|
+
* worth breaking to close this hole.
|
|
116
|
+
* 2. **The runtime.** A TypeScript type vanishes at the compile step, and the
|
|
117
|
+
* consumer this contract exists for reads plain JavaScript — the whole lesson
|
|
118
|
+
* of 0.6.1. So a value carrying a `members` array is answered `unknown`:
|
|
119
|
+
* provenance not established, because no walk happened. `unknown` is the
|
|
120
|
+
* honest state here for the same reason it exists at all.
|
|
121
|
+
*
|
|
122
|
+
* A caller holding a resolver may compose a set's answer from its members' leaf
|
|
123
|
+
* answers — `irreplaceable` dominates, then `unknown`, and only an all-
|
|
124
|
+
* `regenerable` set is `regenerable`. That walk is deliberately NOT exported:
|
|
125
|
+
* it needs an id-to-artifact resolver this observation-only package cannot
|
|
126
|
+
* supply, and until it can, an exported name would promise more than it does.
|
|
98
127
|
*/
|
|
99
128
|
export function artifactReplaceability(artifact) {
|
|
129
|
+
// The type is gone by now. A JavaScript caller can still hand us a set, and
|
|
130
|
+
// the leaf answer for a set is the one that gets a folder deleted.
|
|
131
|
+
if (Array.isArray(artifact.members))
|
|
132
|
+
return "unknown";
|
|
100
133
|
switch (artifact.origin) {
|
|
101
134
|
case "captured":
|
|
102
135
|
return "irreplaceable";
|
|
@@ -111,15 +144,28 @@ export function artifactReplaceability(artifact) {
|
|
|
111
144
|
/**
|
|
112
145
|
* What a set gathers.
|
|
113
146
|
*
|
|
114
|
-
* Composition, Episode, Melody and Film are siblings at the same level —
|
|
115
|
-
* an extension of another, and none is a special case of a recording.
|
|
116
|
-
* is the IAIP folder. Absent means the gathering was observed without
|
|
117
|
-
* classified — an absence, not an error — and `other` is a set whose
|
|
118
|
-
* named a kind this list does not carry yet.
|
|
147
|
+
* Composition, Episode, Melody, Scene and Film are siblings at the same level —
|
|
148
|
+
* none is an extension of another, and none is a special case of a recording.
|
|
149
|
+
* `inquiry` is the IAIP folder. Absent means the gathering was observed without
|
|
150
|
+
* being classified — an absence, not an error — and `other` is a set whose
|
|
151
|
+
* source named a kind this list does not carry yet.
|
|
152
|
+
*
|
|
153
|
+
* `scene` was added 2026-07-31 from William's own sentence: *"Inside of one of
|
|
154
|
+
* my film, there are scenes. And inside of a scene, there is a musical
|
|
155
|
+
* composition. And inside of musical composition, there are multiple melodies.
|
|
156
|
+
* And all of that could be related to an artifact that we captured on the land,
|
|
157
|
+
* or can come from that."* Scene sits between `film` and `composition` in that
|
|
158
|
+
* hierarchy — a film gathers scenes, a scene gathers compositions.
|
|
159
|
+
*
|
|
160
|
+
* The ORDER of this array carries none of that. It is accretion order, and the
|
|
161
|
+
* hierarchy lives in the membership edges (`ArtifactRelation`) where it can
|
|
162
|
+
* differ per film. Reading containment out of this array's index would be
|
|
163
|
+
* reading a fact that was never written.
|
|
119
164
|
*/
|
|
120
165
|
export const ARTIFACT_SET_KINDS = Object.freeze([
|
|
121
166
|
"inquiry",
|
|
122
167
|
"composition",
|
|
168
|
+
"scene",
|
|
123
169
|
"episode",
|
|
124
170
|
"melody",
|
|
125
171
|
"film",
|
|
@@ -140,13 +186,19 @@ export function isArtifactRelationKind(value) {
|
|
|
140
186
|
}
|
|
141
187
|
/**
|
|
142
188
|
* What can sit on the container end of a membership edge. Composition, Episode,
|
|
143
|
-
* Melody and Film are named at the same level because they are peers
|
|
144
|
-
* root; `artifact-set` covers a gathering whose kind is unclassified,
|
|
145
|
-
* `artifact` lets a set be a member of another set.
|
|
189
|
+
* Melody, Scene and Film are named at the same level because they are peers
|
|
190
|
+
* under one root; `artifact-set` covers a gathering whose kind is unclassified,
|
|
191
|
+
* and `artifact` lets a set be a member of another set.
|
|
192
|
+
*
|
|
193
|
+
* `scene` is named here for the same reason the others are: without it, the edge
|
|
194
|
+
* that puts a composition inside a scene degrades to `artifact-set`, and a
|
|
195
|
+
* reader can no longer tell a scene from any other unclassified gathering — the
|
|
196
|
+
* one relation in William's hierarchy that would have been lost silently.
|
|
146
197
|
*/
|
|
147
198
|
export const ARTIFACT_RELATION_TARGET_KINDS = Object.freeze([
|
|
148
199
|
"episode",
|
|
149
200
|
"composition",
|
|
201
|
+
"scene",
|
|
150
202
|
"melody",
|
|
151
203
|
"film",
|
|
152
204
|
"artifact-set",
|
package/dist/observation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation.js","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,OAAO;IACP,YAAY;IACZ,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC,CAAA;AAIX,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC,CAAA;AAI3F;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7F,CAAC;AA4BD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,eAAe;IACf,aAAa;IACb,SAAS;CACD,CAAC,CAAA;AAIX
|
|
1
|
+
{"version":3,"file":"observation.js","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,OAAO;IACP,YAAY;IACZ,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC,CAAA;AAIX,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC,CAAA;AAI3F;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7F,CAAC;AA4BD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,eAAe;IACf,aAAa;IACb,SAAS;CACD,CAAC,CAAA;AAIX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAEC;IAED,4EAA4E;IAC5E,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAE,QAAkC,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IAEhF,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,eAAe,CAAA;QACxB,KAAK,SAAS;YACZ,OAAO,aAAa,CAAA;QACtB,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAA;QAClE;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AA6BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,SAAS;IACT,aAAa;IACb,OAAO;IACP,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;CACC,CAAC,CAAA;AAIX,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,kBAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/F,CAAC;AAsED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,SAAS,CAAU,CAAC,CAAA;AAIvF,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACpG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,SAAS;IACT,aAAa;IACb,OAAO;IACP,QAAQ;IACR,MAAM;IACN,cAAc;IACd,UAAU;CACF,CAAC,CAAA;AAIX,2EAA2E;AAC3E,MAAM,UAAU,4BAA4B,CAC1C,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,8BAAoD,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtE,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miadi/episodic-memory-schema",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "TypeScript types and JSON Schema for episodic memory
|
|
3
|
+
"version": "0.7.1",
|
|
4
|
+
"description": "TypeScript types and JSON Schema for episodic memory \u2014 the durable session-to-session memory layer in the Miadi orchestration kit. Narrative layer is NCP-aligned; provenance layer is W3C PROV-DM and OAIS-informed.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"miadi",
|
|
7
7
|
"storyweaver",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
29
|
"types": "./dist/index.d.ts",
|
|
30
|
-
"import": "./dist/index.js"
|
|
30
|
+
"import": "./dist/index.js",
|
|
31
|
+
"default": "./dist/index.js"
|
|
31
32
|
},
|
|
32
33
|
"./schema": "./schema/episodic-memory.schema.json",
|
|
33
34
|
"./package.json": "./package.json"
|