mcard-js 2.1.13 → 2.1.15
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 +48 -0
- package/dist/model/CardCollection.d.ts +55 -0
- package/dist/model/CardCollection.d.ts.map +1 -1
- package/dist/model/CardCollection.js +55 -0
- package/dist/model/CardCollection.js.map +1 -1
- package/dist/model/MCard.d.ts +79 -2
- package/dist/model/MCard.d.ts.map +1 -1
- package/dist/model/MCard.js +80 -1
- package/dist/model/MCard.js.map +1 -1
- package/dist/model/PCard.d.ts +50 -0
- package/dist/model/PCard.d.ts.map +1 -0
- package/dist/model/PCard.js +110 -0
- package/dist/model/PCard.js.map +1 -0
- package/dist/model/VCard.d.ts +162 -0
- package/dist/model/VCard.d.ts.map +1 -0
- package/dist/model/VCard.js +298 -0
- package/dist/model/VCard.js.map +1 -0
- package/dist/model/vcard_ext/core.d.ts +22 -0
- package/dist/model/vcard_ext/core.d.ts.map +1 -0
- package/dist/model/vcard_ext/core.js +41 -0
- package/dist/model/vcard_ext/core.js.map +1 -0
- package/dist/model/vcard_ext/index.d.ts +14 -0
- package/dist/model/vcard_ext/index.d.ts.map +1 -0
- package/dist/model/vcard_ext/index.js +24 -0
- package/dist/model/vcard_ext/index.js.map +1 -0
- package/dist/model/vcard_ext/network.d.ts +6 -0
- package/dist/model/vcard_ext/network.d.ts.map +1 -0
- package/dist/model/vcard_ext/network.js +23 -0
- package/dist/model/vcard_ext/network.js.map +1 -0
- package/dist/model/vcard_ext/observability.d.ts +6 -0
- package/dist/model/vcard_ext/observability.d.ts.map +1 -0
- package/dist/model/vcard_ext/observability.js +62 -0
- package/dist/model/vcard_ext/observability.js.map +1 -0
- package/dist/model/vcard_ext/storage.d.ts +6 -0
- package/dist/model/vcard_ext/storage.d.ts.map +1 -0
- package/dist/model/vcard_ext/storage.js +47 -0
- package/dist/model/vcard_ext/storage.js.map +1 -0
- package/dist/model/vcard_ext/vendors.d.ts +12 -0
- package/dist/model/vcard_ext/vendors.d.ts.map +1 -0
- package/dist/model/vcard_ext/vendors.js +210 -0
- package/dist/model/vcard_ext/vendors.js.map +1 -0
- package/dist/model/vcard_vocabulary.d.ts +174 -0
- package/dist/model/vcard_vocabulary.d.ts.map +1 -0
- package/dist/model/vcard_vocabulary.js +187 -0
- package/dist/model/vcard_vocabulary.js.map +1 -0
- package/dist/ptr/node/runtimes/loader.d.ts.map +1 -1
- package/dist/ptr/node/runtimes/loader.js +17 -1
- package/dist/ptr/node/runtimes/loader.js.map +1 -1
- package/dist/types/dots.d.ts +206 -0
- package/dist/types/dots.d.ts.map +1 -0
- package/dist/types/dots.js +201 -0
- package/dist/types/dots.js.map +1 -0
- package/dist/util/Loader.d.ts.map +1 -1
- package/dist/util/Loader.js +23 -1
- package/dist/util/Loader.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -607,6 +607,54 @@ To run integration tests against a live Ollama instance:
|
|
|
607
607
|
npx vitest tests/rag/Integration.test.ts
|
|
608
608
|
```
|
|
609
609
|
|
|
610
|
+
## Version 2.1.14 Release Notes (December 13, 2025)
|
|
611
|
+
> VCard Application Vocabulary — Data-Driven Resource Factory
|
|
612
|
+
|
|
613
|
+
### 🏗️ Modular VCard Vocabulary
|
|
614
|
+
|
|
615
|
+
Refactored `vcard_vocabulary.ts` to be **fully data-driven** following the Empty Schema principle. All 31 resource types are now defined as pure data in modular extension files (`vcard_ext/`).
|
|
616
|
+
|
|
617
|
+
**New Structure** (`src/model/vcard_ext/`):
|
|
618
|
+
```
|
|
619
|
+
vcard_ext/
|
|
620
|
+
├── index.ts # Auto-loader and exports
|
|
621
|
+
├── core.ts # env, file, directory (3 types)
|
|
622
|
+
├── storage.ts # sqlite, postgres, s3, litefs, turso (5 types)
|
|
623
|
+
├── network.ts # api, webhook (2 types)
|
|
624
|
+
├── observability.ts # grafana, prometheus, loki, tempo, faro, otlp (6 types)
|
|
625
|
+
└── vendors.ts # google, github, meta, whatsapp, telegram, line, wechat, slack, trello, miro, figma, linkedin, aws, azure, gcp (15 types)
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
### 📦 31 Resource Types
|
|
629
|
+
|
|
630
|
+
| Category | Types |
|
|
631
|
+
|----------|-------|
|
|
632
|
+
| **Core** | `env`, `file`, `directory` |
|
|
633
|
+
| **Storage** | `sqlite`, `postgres`, `s3`, `litefs`, `turso` |
|
|
634
|
+
| **Network** | `api`, `webhook` |
|
|
635
|
+
| **Observability** | `grafana`, `prometheus`, `loki`, `tempo`, `faro`, `otlp` |
|
|
636
|
+
| **Vendors** | `google`, `github`, `meta`, `whatsapp`, `telegram`, `line`, `wechat`, `slack`, `trello`, `miro`, `figma`, `linkedin`, `aws`, `azure`, `gcp` |
|
|
637
|
+
|
|
638
|
+
### 🚀 Unified Factory API
|
|
639
|
+
|
|
640
|
+
```typescript
|
|
641
|
+
import { Resource } from 'mcard-js/model/vcard_vocabulary';
|
|
642
|
+
|
|
643
|
+
// Any resource type via unified factory
|
|
644
|
+
const ref = await Resource.create('github', 'xlp0', 'MCard_TDD');
|
|
645
|
+
const ref = await Resource.create('slack', 'my-workspace', 'general');
|
|
646
|
+
const ref = await Resource.create('turso', 'my-database', { group: 'us-east' });
|
|
647
|
+
|
|
648
|
+
// Check available types
|
|
649
|
+
console.log(Resource.types()); // ['env', 'file', 'sqlite', 'github', ...]
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
### 📉 Code Reduction
|
|
653
|
+
* `vcard_vocabulary.ts`: **700 → 221 lines** (68% reduction)
|
|
654
|
+
* Resource types now defined as data (no code changes needed to add new types)
|
|
655
|
+
|
|
656
|
+
---
|
|
657
|
+
|
|
610
658
|
## Version 2.1.13 Release Notes (December 11, 2025)
|
|
611
659
|
> Lean 4.25.2 Support & CLM Test Case Improvements
|
|
612
660
|
|
|
@@ -3,6 +3,61 @@ import { StorageEngine, Page } from '../storage/StorageAdapter';
|
|
|
3
3
|
import { Maybe } from '../monads/Maybe';
|
|
4
4
|
/**
|
|
5
5
|
* CardCollection - High-level interface for MCard operations with monadic API
|
|
6
|
+
*
|
|
7
|
+
* ## DOTS Vocabulary Role: CARRIER CATEGORY Car(S)
|
|
8
|
+
*
|
|
9
|
+
* CardCollection is the **Carrier Category** in the Double Operadic Theory of Systems.
|
|
10
|
+
* - **Objects**: Individual MCards (data artifacts)
|
|
11
|
+
* - **Morphisms**: Hash references between MCards (content-addressable links)
|
|
12
|
+
* - **Composition**: Morphisms compose via hash chains (Merkle-DAG structure)
|
|
13
|
+
*
|
|
14
|
+
* The Carrier is where **actual systems live**. While the Target (CLM design space)
|
|
15
|
+
* defines possible interfaces and interactions, the Carrier holds the real data.
|
|
16
|
+
*
|
|
17
|
+
* ## The Action: Loose(I) ⊛ Car(S) → Car(S)
|
|
18
|
+
*
|
|
19
|
+
* In DOTS, the **Action** is how interactions (from Target) act on systems (in Carrier)
|
|
20
|
+
* to produce new systems. For CardCollection:
|
|
21
|
+
* - PCard (Chart/Lens) defines the interaction pattern
|
|
22
|
+
* - CardCollection.add() produces new MCard in the Carrier
|
|
23
|
+
* - The result is a new Object in Car(S)
|
|
24
|
+
*
|
|
25
|
+
* ## Empty Schema Principle
|
|
26
|
+
*
|
|
27
|
+
* CardCollection embodies the Wordless Book principle:
|
|
28
|
+
* - At t₀: Empty collection = "Wordless Book"
|
|
29
|
+
* - At t_n: Billions of cards = "Infinite Library"
|
|
30
|
+
* - Schema (structure) never changes; only data (content) grows
|
|
31
|
+
*
|
|
32
|
+
* ## CRD-Only Operations (No UPDATE)
|
|
33
|
+
*
|
|
34
|
+
* Following MCard design principles, this collection supports only:
|
|
35
|
+
* - **C**reate: `add()`, `addWithHandle()`
|
|
36
|
+
* - **R**ead: `get()`, `getByHandle()`, `getPage()`, `search*()`
|
|
37
|
+
* - **D**elete: `delete()`, `clear()`
|
|
38
|
+
*
|
|
39
|
+
* There is NO `update()` method. Instead, to "update":
|
|
40
|
+
* 1. Create a new MCard with new content
|
|
41
|
+
* 2. Use `updateHandle()` to point the handle to the new hash
|
|
42
|
+
* 3. The old MCard remains in the collection (immutable history)
|
|
43
|
+
*
|
|
44
|
+
* ## CRDT Foundation (G-Set)
|
|
45
|
+
*
|
|
46
|
+
* CardCollection implements **Grow-Only Set (G-Set) CRDT** semantics:
|
|
47
|
+
* - **Commutative**: merge(A, B) = merge(B, A)
|
|
48
|
+
* - **Associative**: merge(A, merge(B, C)) = merge(merge(A, B), C)
|
|
49
|
+
* - **Idempotent**: merge(A, A) = A (same hash = same card)
|
|
50
|
+
*
|
|
51
|
+
* This enables **Strong Eventual Consistency** without coordination.
|
|
52
|
+
*
|
|
53
|
+
* ## Monadic API
|
|
54
|
+
*
|
|
55
|
+
* The `*M` methods (getM, getByHandleM, etc.) return Maybe<T> monads
|
|
56
|
+
* for composable, null-safe operations following functional programming patterns.
|
|
57
|
+
*
|
|
58
|
+
* @see {@link MCard} for the individual Carrier objects
|
|
59
|
+
* @see {@link DOTSRole.CARRIER} for DOTS vocabulary definition
|
|
60
|
+
* @see docs/WorkingNotes/Permanent/Projects/PKC Kernel/MCard.md for full specification
|
|
6
61
|
*/
|
|
7
62
|
export declare class CardCollection {
|
|
8
63
|
private engine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardCollection.d.ts","sourceRoot":"","sources":["../../src/model/CardCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CardCollection.d.ts","sourceRoot":"","sources":["../../src/model/CardCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,61 @@ import { MCard } from './MCard';
|
|
|
2
2
|
import { Maybe } from '../monads/Maybe';
|
|
3
3
|
/**
|
|
4
4
|
* CardCollection - High-level interface for MCard operations with monadic API
|
|
5
|
+
*
|
|
6
|
+
* ## DOTS Vocabulary Role: CARRIER CATEGORY Car(S)
|
|
7
|
+
*
|
|
8
|
+
* CardCollection is the **Carrier Category** in the Double Operadic Theory of Systems.
|
|
9
|
+
* - **Objects**: Individual MCards (data artifacts)
|
|
10
|
+
* - **Morphisms**: Hash references between MCards (content-addressable links)
|
|
11
|
+
* - **Composition**: Morphisms compose via hash chains (Merkle-DAG structure)
|
|
12
|
+
*
|
|
13
|
+
* The Carrier is where **actual systems live**. While the Target (CLM design space)
|
|
14
|
+
* defines possible interfaces and interactions, the Carrier holds the real data.
|
|
15
|
+
*
|
|
16
|
+
* ## The Action: Loose(I) ⊛ Car(S) → Car(S)
|
|
17
|
+
*
|
|
18
|
+
* In DOTS, the **Action** is how interactions (from Target) act on systems (in Carrier)
|
|
19
|
+
* to produce new systems. For CardCollection:
|
|
20
|
+
* - PCard (Chart/Lens) defines the interaction pattern
|
|
21
|
+
* - CardCollection.add() produces new MCard in the Carrier
|
|
22
|
+
* - The result is a new Object in Car(S)
|
|
23
|
+
*
|
|
24
|
+
* ## Empty Schema Principle
|
|
25
|
+
*
|
|
26
|
+
* CardCollection embodies the Wordless Book principle:
|
|
27
|
+
* - At t₀: Empty collection = "Wordless Book"
|
|
28
|
+
* - At t_n: Billions of cards = "Infinite Library"
|
|
29
|
+
* - Schema (structure) never changes; only data (content) grows
|
|
30
|
+
*
|
|
31
|
+
* ## CRD-Only Operations (No UPDATE)
|
|
32
|
+
*
|
|
33
|
+
* Following MCard design principles, this collection supports only:
|
|
34
|
+
* - **C**reate: `add()`, `addWithHandle()`
|
|
35
|
+
* - **R**ead: `get()`, `getByHandle()`, `getPage()`, `search*()`
|
|
36
|
+
* - **D**elete: `delete()`, `clear()`
|
|
37
|
+
*
|
|
38
|
+
* There is NO `update()` method. Instead, to "update":
|
|
39
|
+
* 1. Create a new MCard with new content
|
|
40
|
+
* 2. Use `updateHandle()` to point the handle to the new hash
|
|
41
|
+
* 3. The old MCard remains in the collection (immutable history)
|
|
42
|
+
*
|
|
43
|
+
* ## CRDT Foundation (G-Set)
|
|
44
|
+
*
|
|
45
|
+
* CardCollection implements **Grow-Only Set (G-Set) CRDT** semantics:
|
|
46
|
+
* - **Commutative**: merge(A, B) = merge(B, A)
|
|
47
|
+
* - **Associative**: merge(A, merge(B, C)) = merge(merge(A, B), C)
|
|
48
|
+
* - **Idempotent**: merge(A, A) = A (same hash = same card)
|
|
49
|
+
*
|
|
50
|
+
* This enables **Strong Eventual Consistency** without coordination.
|
|
51
|
+
*
|
|
52
|
+
* ## Monadic API
|
|
53
|
+
*
|
|
54
|
+
* The `*M` methods (getM, getByHandleM, etc.) return Maybe<T> monads
|
|
55
|
+
* for composable, null-safe operations following functional programming patterns.
|
|
56
|
+
*
|
|
57
|
+
* @see {@link MCard} for the individual Carrier objects
|
|
58
|
+
* @see {@link DOTSRole.CARRIER} for DOTS vocabulary definition
|
|
59
|
+
* @see docs/WorkingNotes/Permanent/Projects/PKC Kernel/MCard.md for full specification
|
|
5
60
|
*/
|
|
6
61
|
export class CardCollection {
|
|
7
62
|
engine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardCollection.js","sourceRoot":"","sources":["../../src/model/CardCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CardCollection.js","sourceRoot":"","sources":["../../src/model/CardCollection.ts"],"names":[],"mappings":"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"}
|
package/dist/model/MCard.d.ts
CHANGED
|
@@ -1,9 +1,65 @@
|
|
|
1
|
+
import { DOTSMetadata } from '../types/dots';
|
|
1
2
|
/**
|
|
2
3
|
* MCard - Content-addressable data container
|
|
3
4
|
*
|
|
5
|
+
* ## DOTS Vocabulary Role: CARRIER
|
|
6
|
+
*
|
|
7
|
+
* MCard is the **Carrier** in the Double Operadic Theory of Systems (DOTS).
|
|
8
|
+
* - Each MCard is an **Object** in the Carrier category Car(S)
|
|
9
|
+
* - Hash-links between MCards are **Morphisms** in Car(S)
|
|
10
|
+
* - The Carrier is the category of all actual data/systems
|
|
11
|
+
*
|
|
12
|
+
* ## EOS Role: Invariant Content (Galois Root)
|
|
13
|
+
*
|
|
14
|
+
* MCard provides the **Invariant Substrate** in Experimental-Operational Symmetry:
|
|
15
|
+
* - `Hash(Content)` is a **pure function** with no side effects
|
|
16
|
+
* - Same content in Dev = Same hash in Prod (environment-invariant)
|
|
17
|
+
* - This is the "Joint Reality" P(H,E) = P(E,H) in Bayesian terms
|
|
18
|
+
*
|
|
19
|
+
* ## MVP Cards Architecture: Data Plane
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* ┌───────────────────────────────────────────────────────┐
|
|
23
|
+
* │ APPLICATION PLANE (VCard) │
|
|
24
|
+
* │ Value Exchange / AuthN/AuthZ / Sovereign Memory │
|
|
25
|
+
* └─────────────────────────┬─────────────────────────────┘
|
|
26
|
+
* │ (Policy Triggers)
|
|
27
|
+
* ┌─────────────────────────▼─────────────────────────────┐
|
|
28
|
+
* │ CONTROL PLANE (PCard) │
|
|
29
|
+
* │ Polynomial Functor Composition / Monadic Execution │
|
|
30
|
+
* └─────────────────────────┬─────────────────────────────┘
|
|
31
|
+
* │ (Hash References)
|
|
32
|
+
* ┌─────────────────────────▼─────────────────────────────┐
|
|
33
|
+
* │ DATA PLANE (MCard) ◀── YOU ARE HERE │
|
|
34
|
+
* │ Immutable, Content-Addressable Storage / Monad │
|
|
35
|
+
* └───────────────────────────────────────────────────────┘
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* ## The Empty Schema Principle
|
|
39
|
+
*
|
|
40
|
+
* MCard embodies the Empty Schema Principle from the Wordless Book:
|
|
41
|
+
* - Schema contains NO domain-specific terms (only hash, content, g_time)
|
|
42
|
+
* - Domain customization happens via data (INSERT), not schema changes
|
|
43
|
+
* - Universal applicability: same structure for ANY domain
|
|
44
|
+
*
|
|
45
|
+
* ## Functional Requirements (from design docs)
|
|
46
|
+
*
|
|
47
|
+
* | ID | Requirement | Implementation |
|
|
48
|
+
* |----|-------------|----------------|
|
|
49
|
+
* | M-1 | Content-addressable via hash | `this.hash = SHA-256(content)` |
|
|
50
|
+
* | M-2 | CRD-only (no UPDATE) | Immutable class, `readonly` fields |
|
|
51
|
+
* | M-3 | Include g_time for ordering | `this.g_time` field |
|
|
52
|
+
* | M-4 | Human-readable content | `getContentAsText()` method |
|
|
53
|
+
* | EOS-M1 | Hash is pure function | No side effects in hash computation |
|
|
54
|
+
* | EOS-M2 | Content is immutable | All fields are `readonly` |
|
|
55
|
+
*
|
|
56
|
+
* @see {@link DOTSRole.CARRIER} for DOTS vocabulary definition
|
|
57
|
+
* @see {@link EOSRole.INVARIANT_CONTENT} for EOS role definition
|
|
58
|
+
* @see docs/WorkingNotes/Permanent/Projects/PKC Kernel/MCard.md for full specification
|
|
59
|
+
*
|
|
4
60
|
* Each MCard has:
|
|
5
61
|
* - content: Raw bytes (Uint8Array)
|
|
6
|
-
* - hash: SHA-256 cryptographic hash
|
|
62
|
+
* - hash: SHA-256 cryptographic hash (the Carrier Object identity)
|
|
7
63
|
* - g_time: Global timestamp with algorithm identifier
|
|
8
64
|
*/
|
|
9
65
|
export declare class MCard {
|
|
@@ -12,7 +68,7 @@ export declare class MCard {
|
|
|
12
68
|
readonly g_time: string;
|
|
13
69
|
readonly contentType: string;
|
|
14
70
|
readonly hashFunction: string;
|
|
15
|
-
|
|
71
|
+
protected constructor(content: Uint8Array, hash: string, g_time: string, contentType: string, hashFunction: string);
|
|
16
72
|
/**
|
|
17
73
|
* Create a new MCard from content
|
|
18
74
|
*/
|
|
@@ -39,5 +95,26 @@ export declare class MCard {
|
|
|
39
95
|
contentType: string;
|
|
40
96
|
hashFunction: string;
|
|
41
97
|
};
|
|
98
|
+
/**
|
|
99
|
+
* Get DOTS vocabulary metadata for this MCard
|
|
100
|
+
*
|
|
101
|
+
* Returns the DOTS role information that positions this MCard
|
|
102
|
+
* in the Double Operadic Theory of Systems framework.
|
|
103
|
+
*
|
|
104
|
+
* MCard is always a CARRIER object in the Data Plane.
|
|
105
|
+
*
|
|
106
|
+
* @param tightRefs - Optional array of prerequisite MCard hashes (vertical composition)
|
|
107
|
+
* @param looseRefs - Optional array of alternative MCard hashes (horizontal composition)
|
|
108
|
+
* @returns DOTSMetadata describing this card's role in the compositional system
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const card = await MCard.create('Hello World');
|
|
113
|
+
* const meta = card.getDOTSMetadata();
|
|
114
|
+
* console.log(meta.role); // 'Carrier'
|
|
115
|
+
* console.log(meta.plane); // 'Data'
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
getDOTSMetadata(tightRefs?: string[], looseRefs?: string[]): DOTSMetadata;
|
|
42
119
|
}
|
|
43
120
|
//# sourceMappingURL=MCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MCard.d.ts","sourceRoot":"","sources":["../../src/model/MCard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MCard.d.ts","sourceRoot":"","sources":["../../src/model/MCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgC,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEpG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,qBAAa,KAAK;IACd,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,SAAS,aAAa,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAQlH;;OAEG;WACU,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,aAAa,GAAE,MAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAoBnG;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK;IAMzE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,UAAU,IAAI,UAAU;IAIxB;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAUxG;;;;;;;;;;;;;;;;;;;OAmBG;IACH,eAAe,CAAC,SAAS,GAAE,MAAM,EAAO,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,YAAY;CAGpF"}
|
package/dist/model/MCard.js
CHANGED
|
@@ -1,12 +1,68 @@
|
|
|
1
1
|
import { HashValidator } from '../hash/HashValidator';
|
|
2
2
|
import { GTime } from './GTime';
|
|
3
3
|
import { ContentTypeInterpreter } from './detectors/ContentTypeInterpreter';
|
|
4
|
+
import { createMCardDOTSMetadata } from '../types/dots';
|
|
4
5
|
/**
|
|
5
6
|
* MCard - Content-addressable data container
|
|
6
7
|
*
|
|
8
|
+
* ## DOTS Vocabulary Role: CARRIER
|
|
9
|
+
*
|
|
10
|
+
* MCard is the **Carrier** in the Double Operadic Theory of Systems (DOTS).
|
|
11
|
+
* - Each MCard is an **Object** in the Carrier category Car(S)
|
|
12
|
+
* - Hash-links between MCards are **Morphisms** in Car(S)
|
|
13
|
+
* - The Carrier is the category of all actual data/systems
|
|
14
|
+
*
|
|
15
|
+
* ## EOS Role: Invariant Content (Galois Root)
|
|
16
|
+
*
|
|
17
|
+
* MCard provides the **Invariant Substrate** in Experimental-Operational Symmetry:
|
|
18
|
+
* - `Hash(Content)` is a **pure function** with no side effects
|
|
19
|
+
* - Same content in Dev = Same hash in Prod (environment-invariant)
|
|
20
|
+
* - This is the "Joint Reality" P(H,E) = P(E,H) in Bayesian terms
|
|
21
|
+
*
|
|
22
|
+
* ## MVP Cards Architecture: Data Plane
|
|
23
|
+
*
|
|
24
|
+
* ```
|
|
25
|
+
* ┌───────────────────────────────────────────────────────┐
|
|
26
|
+
* │ APPLICATION PLANE (VCard) │
|
|
27
|
+
* │ Value Exchange / AuthN/AuthZ / Sovereign Memory │
|
|
28
|
+
* └─────────────────────────┬─────────────────────────────┘
|
|
29
|
+
* │ (Policy Triggers)
|
|
30
|
+
* ┌─────────────────────────▼─────────────────────────────┐
|
|
31
|
+
* │ CONTROL PLANE (PCard) │
|
|
32
|
+
* │ Polynomial Functor Composition / Monadic Execution │
|
|
33
|
+
* └─────────────────────────┬─────────────────────────────┘
|
|
34
|
+
* │ (Hash References)
|
|
35
|
+
* ┌─────────────────────────▼─────────────────────────────┐
|
|
36
|
+
* │ DATA PLANE (MCard) ◀── YOU ARE HERE │
|
|
37
|
+
* │ Immutable, Content-Addressable Storage / Monad │
|
|
38
|
+
* └───────────────────────────────────────────────────────┘
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## The Empty Schema Principle
|
|
42
|
+
*
|
|
43
|
+
* MCard embodies the Empty Schema Principle from the Wordless Book:
|
|
44
|
+
* - Schema contains NO domain-specific terms (only hash, content, g_time)
|
|
45
|
+
* - Domain customization happens via data (INSERT), not schema changes
|
|
46
|
+
* - Universal applicability: same structure for ANY domain
|
|
47
|
+
*
|
|
48
|
+
* ## Functional Requirements (from design docs)
|
|
49
|
+
*
|
|
50
|
+
* | ID | Requirement | Implementation |
|
|
51
|
+
* |----|-------------|----------------|
|
|
52
|
+
* | M-1 | Content-addressable via hash | `this.hash = SHA-256(content)` |
|
|
53
|
+
* | M-2 | CRD-only (no UPDATE) | Immutable class, `readonly` fields |
|
|
54
|
+
* | M-3 | Include g_time for ordering | `this.g_time` field |
|
|
55
|
+
* | M-4 | Human-readable content | `getContentAsText()` method |
|
|
56
|
+
* | EOS-M1 | Hash is pure function | No side effects in hash computation |
|
|
57
|
+
* | EOS-M2 | Content is immutable | All fields are `readonly` |
|
|
58
|
+
*
|
|
59
|
+
* @see {@link DOTSRole.CARRIER} for DOTS vocabulary definition
|
|
60
|
+
* @see {@link EOSRole.INVARIANT_CONTENT} for EOS role definition
|
|
61
|
+
* @see docs/WorkingNotes/Permanent/Projects/PKC Kernel/MCard.md for full specification
|
|
62
|
+
*
|
|
7
63
|
* Each MCard has:
|
|
8
64
|
* - content: Raw bytes (Uint8Array)
|
|
9
|
-
* - hash: SHA-256 cryptographic hash
|
|
65
|
+
* - hash: SHA-256 cryptographic hash (the Carrier Object identity)
|
|
10
66
|
* - g_time: Global timestamp with algorithm identifier
|
|
11
67
|
*/
|
|
12
68
|
export class MCard {
|
|
@@ -72,5 +128,28 @@ export class MCard {
|
|
|
72
128
|
hashFunction: this.hashFunction
|
|
73
129
|
};
|
|
74
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Get DOTS vocabulary metadata for this MCard
|
|
133
|
+
*
|
|
134
|
+
* Returns the DOTS role information that positions this MCard
|
|
135
|
+
* in the Double Operadic Theory of Systems framework.
|
|
136
|
+
*
|
|
137
|
+
* MCard is always a CARRIER object in the Data Plane.
|
|
138
|
+
*
|
|
139
|
+
* @param tightRefs - Optional array of prerequisite MCard hashes (vertical composition)
|
|
140
|
+
* @param looseRefs - Optional array of alternative MCard hashes (horizontal composition)
|
|
141
|
+
* @returns DOTSMetadata describing this card's role in the compositional system
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* const card = await MCard.create('Hello World');
|
|
146
|
+
* const meta = card.getDOTSMetadata();
|
|
147
|
+
* console.log(meta.role); // 'Carrier'
|
|
148
|
+
* console.log(meta.plane); // 'Data'
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
getDOTSMetadata(tightRefs = [], looseRefs = []) {
|
|
152
|
+
return createMCardDOTSMetadata(tightRefs, looseRefs);
|
|
153
|
+
}
|
|
75
154
|
}
|
|
76
155
|
//# sourceMappingURL=MCard.js.map
|
package/dist/model/MCard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MCard.js","sourceRoot":"","sources":["../../src/model/MCard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"MCard.js","sourceRoot":"","sources":["../../src/model/MCard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PCard Model (Control Plane) - Implementation of LENS/CHART.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the PCard, which represents the execution unit in the DOTS framework.
|
|
5
|
+
* PCards are MCards that contain a valid CLM (Cubical Logic Model) specification.
|
|
6
|
+
*/
|
|
7
|
+
import { MCard } from './MCard';
|
|
8
|
+
import { DOTSMetadata } from '../types/dots';
|
|
9
|
+
/**
|
|
10
|
+
* PCard - The Control Plane unit (Lens + Chart)
|
|
11
|
+
*
|
|
12
|
+
* A PCard is an MCard whose content is a valid CLM specification.
|
|
13
|
+
* It represents a transformation (Lens) with a specific interaction pattern (Chart).
|
|
14
|
+
*/
|
|
15
|
+
export declare class PCard extends MCard {
|
|
16
|
+
private readonly parsedClm;
|
|
17
|
+
private readonly isLens;
|
|
18
|
+
protected constructor(content: Uint8Array, hash: string, g_time: string, contentType: string, hashFunction: string, parsedClm: any, isLens: boolean);
|
|
19
|
+
/**
|
|
20
|
+
* Create a new PCard from CLM content
|
|
21
|
+
*
|
|
22
|
+
* @param content - The CLM YAML string or bytes
|
|
23
|
+
* @param hashAlgorithm - Hash algorithm to use
|
|
24
|
+
* @param isLens - Whether this acts primarily as a Lens (default true)
|
|
25
|
+
*/
|
|
26
|
+
static create(content: string | Uint8Array, hashAlgorithm?: string, isLens?: boolean): Promise<PCard>;
|
|
27
|
+
/**
|
|
28
|
+
* Get DOTS vocabulary metadata for this PCard
|
|
29
|
+
*
|
|
30
|
+
* Automatically extracts dependencies from the CLM structure if available.
|
|
31
|
+
*/
|
|
32
|
+
getDOTSMetadata(): DOTSMetadata;
|
|
33
|
+
/**
|
|
34
|
+
* Get the parsed CLM object
|
|
35
|
+
*/
|
|
36
|
+
get clm(): any;
|
|
37
|
+
/**
|
|
38
|
+
* Get the Abstract Specification section
|
|
39
|
+
*/
|
|
40
|
+
get abstractSpec(): any;
|
|
41
|
+
/**
|
|
42
|
+
* Get the Concrete Implementation section
|
|
43
|
+
*/
|
|
44
|
+
get concreteImpl(): any;
|
|
45
|
+
/**
|
|
46
|
+
* Get the Balanced Expectations (tests) section
|
|
47
|
+
*/
|
|
48
|
+
get balancedExpectations(): any;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=PCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PCard.d.ts","sourceRoot":"","sources":["../../src/model/PCard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,OAAO,EAAE,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,KAAM,SAAQ,KAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,SAAS,aACL,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,OAAO;IAOnB;;;;;;OAMG;WACU,MAAM,CACf,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,aAAa,GAAE,MAAiB,EAChC,MAAM,GAAE,OAAc,GACvB,OAAO,CAAC,KAAK,CAAC;IA+BjB;;;;OAIG;IACH,eAAe,IAAI,YAAY;IA0B/B;;OAEG;IACH,IAAI,GAAG,IAAI,GAAG,CAEb;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,GAAG,CAEtB;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,GAAG,CAEtB;IAED;;OAEG;IACH,IAAI,oBAAoB,IAAI,GAAG,CAE9B;CACJ"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PCard Model (Control Plane) - Implementation of LENS/CHART.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the PCard, which represents the execution unit in the DOTS framework.
|
|
5
|
+
* PCards are MCards that contain a valid CLM (Cubical Logic Model) specification.
|
|
6
|
+
*/
|
|
7
|
+
import { parse } from 'yaml';
|
|
8
|
+
import { MCard } from './MCard';
|
|
9
|
+
import { HashValidator } from '../hash/HashValidator';
|
|
10
|
+
import { GTime } from './GTime';
|
|
11
|
+
import { ContentTypeInterpreter } from './detectors/ContentTypeInterpreter';
|
|
12
|
+
import { createPCardDOTSMetadata } from '../types/dots';
|
|
13
|
+
/**
|
|
14
|
+
* PCard - The Control Plane unit (Lens + Chart)
|
|
15
|
+
*
|
|
16
|
+
* A PCard is an MCard whose content is a valid CLM specification.
|
|
17
|
+
* It represents a transformation (Lens) with a specific interaction pattern (Chart).
|
|
18
|
+
*/
|
|
19
|
+
export class PCard extends MCard {
|
|
20
|
+
parsedClm;
|
|
21
|
+
isLens;
|
|
22
|
+
constructor(content, hash, g_time, contentType, hashFunction, parsedClm, isLens) {
|
|
23
|
+
super(content, hash, g_time, contentType, hashFunction);
|
|
24
|
+
this.parsedClm = parsedClm;
|
|
25
|
+
this.isLens = isLens;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a new PCard from CLM content
|
|
29
|
+
*
|
|
30
|
+
* @param content - The CLM YAML string or bytes
|
|
31
|
+
* @param hashAlgorithm - Hash algorithm to use
|
|
32
|
+
* @param isLens - Whether this acts primarily as a Lens (default true)
|
|
33
|
+
*/
|
|
34
|
+
static async create(content, hashAlgorithm = 'sha256', isLens = true) {
|
|
35
|
+
let textContent;
|
|
36
|
+
let bytes;
|
|
37
|
+
// Ensure we have both text and bytes
|
|
38
|
+
if (typeof content === 'string') {
|
|
39
|
+
textContent = content;
|
|
40
|
+
bytes = new TextEncoder().encode(content);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
bytes = content;
|
|
44
|
+
textContent = new TextDecoder().decode(content);
|
|
45
|
+
}
|
|
46
|
+
// Validate YAML and CLM structure
|
|
47
|
+
let parsedClm;
|
|
48
|
+
try {
|
|
49
|
+
parsedClm = parse(textContent);
|
|
50
|
+
if (typeof parsedClm !== 'object' || parsedClm === null) {
|
|
51
|
+
throw new Error('PCard content must be a YAML dictionary');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw new Error(`Invalid YAML content for PCard: ${e.message}`);
|
|
56
|
+
}
|
|
57
|
+
const hash = await HashValidator.computeHash(bytes, hashAlgorithm);
|
|
58
|
+
const g_time = GTime.stampNow(hashAlgorithm);
|
|
59
|
+
const contentType = ContentTypeInterpreter.detect(bytes);
|
|
60
|
+
return new PCard(bytes, hash, g_time, contentType, hashAlgorithm, parsedClm, isLens);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get DOTS vocabulary metadata for this PCard
|
|
64
|
+
*
|
|
65
|
+
* Automatically extracts dependencies from the CLM structure if available.
|
|
66
|
+
*/
|
|
67
|
+
getDOTSMetadata() {
|
|
68
|
+
const tightRefs = [];
|
|
69
|
+
const looseRefs = [];
|
|
70
|
+
// Extract dependencies from standard CLM fields
|
|
71
|
+
if (Array.isArray(this.parsedClm.tight_deps)) {
|
|
72
|
+
tightRefs.push(...this.parsedClm.tight_deps);
|
|
73
|
+
}
|
|
74
|
+
if (Array.isArray(this.parsedClm.dependencies)) {
|
|
75
|
+
tightRefs.push(...this.parsedClm.dependencies);
|
|
76
|
+
}
|
|
77
|
+
if (Array.isArray(this.parsedClm.loose_deps)) {
|
|
78
|
+
looseRefs.push(...this.parsedClm.loose_deps);
|
|
79
|
+
}
|
|
80
|
+
if (Array.isArray(this.parsedClm.alternatives)) {
|
|
81
|
+
looseRefs.push(...this.parsedClm.alternatives);
|
|
82
|
+
}
|
|
83
|
+
return createPCardDOTSMetadata(this.isLens, tightRefs, looseRefs);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the parsed CLM object
|
|
87
|
+
*/
|
|
88
|
+
get clm() {
|
|
89
|
+
return this.parsedClm;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the Abstract Specification section
|
|
93
|
+
*/
|
|
94
|
+
get abstractSpec() {
|
|
95
|
+
return this.parsedClm.abstract_spec;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get the Concrete Implementation section
|
|
99
|
+
*/
|
|
100
|
+
get concreteImpl() {
|
|
101
|
+
return this.parsedClm.concrete_impl || this.parsedClm.impl;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the Balanced Expectations (tests) section
|
|
105
|
+
*/
|
|
106
|
+
get balancedExpectations() {
|
|
107
|
+
return this.parsedClm.balanced_expectations || this.parsedClm.expectations;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=PCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PCard.js","sourceRoot":"","sources":["../../src/model/PCard.ts"],"names":[],"mappings":"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"}
|