aimeat 1.2.6 → 1.3.0

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.
Files changed (128) hide show
  1. package/dist/.env.example +4 -0
  2. package/dist/locales/en.json +74 -2
  3. package/dist/locales/fi.json +74 -2
  4. package/dist/public/css/views/capabilities.css +211 -0
  5. package/dist/public/llms-template.txt +152 -89
  6. package/dist/public/spa.html +1 -0
  7. package/dist/public/views/admin/capabilities-tab.js +114 -0
  8. package/dist/public/views/admin.js +2 -0
  9. package/dist/public/views/aimeat-os.js +194 -34
  10. package/dist/public/views/profile/capabilities-tab.js +252 -0
  11. package/dist/public/views/profile/extensions-tab.js +404 -50
  12. package/dist/public/views/profile/landing-page.js +2 -0
  13. package/dist/public/views/profile.js +2 -0
  14. package/dist/src/config.d.ts +11 -0
  15. package/dist/src/config.d.ts.map +1 -1
  16. package/dist/src/config.js +11 -0
  17. package/dist/src/config.js.map +1 -1
  18. package/dist/src/mcp/apps.d.ts +18 -0
  19. package/dist/src/mcp/apps.d.ts.map +1 -0
  20. package/dist/src/mcp/apps.js +241 -0
  21. package/dist/src/mcp/apps.js.map +1 -0
  22. package/dist/src/mcp/capabilities.d.ts +12 -0
  23. package/dist/src/mcp/capabilities.d.ts.map +1 -0
  24. package/dist/src/mcp/capabilities.js +187 -0
  25. package/dist/src/mcp/capabilities.js.map +1 -0
  26. package/dist/src/mcp/cortex.d.ts +17 -0
  27. package/dist/src/mcp/cortex.d.ts.map +1 -0
  28. package/dist/src/mcp/cortex.js +237 -0
  29. package/dist/src/mcp/cortex.js.map +1 -0
  30. package/dist/src/mcp/extensions.d.ts +4 -3
  31. package/dist/src/mcp/extensions.d.ts.map +1 -1
  32. package/dist/src/mcp/extensions.js +233 -3
  33. package/dist/src/mcp/extensions.js.map +1 -1
  34. package/dist/src/mcp/index.d.ts.map +1 -1
  35. package/dist/src/mcp/index.js +6 -0
  36. package/dist/src/mcp/index.js.map +1 -1
  37. package/dist/src/routes/admin-capabilities.d.ts +11 -0
  38. package/dist/src/routes/admin-capabilities.d.ts.map +1 -0
  39. package/dist/src/routes/admin-capabilities.js +54 -0
  40. package/dist/src/routes/admin-capabilities.js.map +1 -0
  41. package/dist/src/routes/capabilities.d.ts +11 -0
  42. package/dist/src/routes/capabilities.d.ts.map +1 -0
  43. package/dist/src/routes/capabilities.js +289 -0
  44. package/dist/src/routes/capabilities.js.map +1 -0
  45. package/dist/src/routes/cortex.d.ts.map +1 -1
  46. package/dist/src/routes/cortex.js +2 -0
  47. package/dist/src/routes/cortex.js.map +1 -1
  48. package/dist/src/routes/extensions.d.ts.map +1 -1
  49. package/dist/src/routes/extensions.js +9 -0
  50. package/dist/src/routes/extensions.js.map +1 -1
  51. package/dist/src/routes/lib-capabilities.d.ts +9 -0
  52. package/dist/src/routes/lib-capabilities.d.ts.map +1 -0
  53. package/dist/src/routes/lib-capabilities.js +190 -0
  54. package/dist/src/routes/lib-capabilities.js.map +1 -0
  55. package/dist/src/routes/libs.d.ts.map +1 -1
  56. package/dist/src/routes/libs.js +13 -0
  57. package/dist/src/routes/libs.js.map +1 -1
  58. package/dist/src/routes/verification.d.ts +10 -1
  59. package/dist/src/routes/verification.d.ts.map +1 -1
  60. package/dist/src/routes/verification.js +174 -24
  61. package/dist/src/routes/verification.js.map +1 -1
  62. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  63. package/dist/src/server-bootstrap/routes-loader.js +35 -2
  64. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  65. package/dist/src/services/capability-aggregator.d.ts +8 -0
  66. package/dist/src/services/capability-aggregator.d.ts.map +1 -0
  67. package/dist/src/services/capability-aggregator.js +239 -0
  68. package/dist/src/services/capability-aggregator.js.map +1 -0
  69. package/dist/src/services/capability-invoke.d.ts +20 -0
  70. package/dist/src/services/capability-invoke.d.ts.map +1 -0
  71. package/dist/src/services/capability-invoke.js +95 -0
  72. package/dist/src/services/capability-invoke.js.map +1 -0
  73. package/dist/src/services/config-schema.d.ts.map +1 -1
  74. package/dist/src/services/config-schema.js +4 -0
  75. package/dist/src/services/config-schema.js.map +1 -1
  76. package/dist/src/services/core-jobs.d.ts.map +1 -1
  77. package/dist/src/services/core-jobs.js +16 -0
  78. package/dist/src/services/core-jobs.js.map +1 -1
  79. package/dist/src/services/did-document.d.ts +25 -0
  80. package/dist/src/services/did-document.d.ts.map +1 -0
  81. package/dist/src/services/did-document.js +31 -0
  82. package/dist/src/services/did-document.js.map +1 -0
  83. package/dist/src/services/eudiw.d.ts +11 -1
  84. package/dist/src/services/eudiw.d.ts.map +1 -1
  85. package/dist/src/services/eudiw.js +43 -48
  86. package/dist/src/services/eudiw.js.map +1 -1
  87. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  88. package/dist/src/services/extension-runtime.js +8 -5
  89. package/dist/src/services/extension-runtime.js.map +1 -1
  90. package/dist/src/services/job-seeding.d.ts.map +1 -1
  91. package/dist/src/services/job-seeding.js +4 -0
  92. package/dist/src/services/job-seeding.js.map +1 -1
  93. package/dist/src/services/oidc-client.d.ts +32 -0
  94. package/dist/src/services/oidc-client.d.ts.map +1 -0
  95. package/dist/src/services/oidc-client.js +67 -0
  96. package/dist/src/services/oidc-client.js.map +1 -0
  97. package/dist/src/services/sd-jwt.d.ts +21 -0
  98. package/dist/src/services/sd-jwt.d.ts.map +1 -0
  99. package/dist/src/services/sd-jwt.js +87 -0
  100. package/dist/src/services/sd-jwt.js.map +1 -0
  101. package/dist/src/services/vc-issuer.d.ts +20 -1
  102. package/dist/src/services/vc-issuer.d.ts.map +1 -1
  103. package/dist/src/services/vc-issuer.js +75 -15
  104. package/dist/src/services/vc-issuer.js.map +1 -1
  105. package/dist/src/storage/interface.d.ts +118 -1
  106. package/dist/src/storage/interface.d.ts.map +1 -1
  107. package/dist/src/storage/providers/mongodb/index.d.ts +37 -1
  108. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  109. package/dist/src/storage/providers/mongodb/index.js +282 -0
  110. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  111. package/dist/src/storage/providers/sqlite/index.d.ts +37 -1
  112. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  113. package/dist/src/storage/providers/sqlite/index.js +241 -0
  114. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  115. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  116. package/dist/src/storage/providers/sqlite/schema.js +77 -0
  117. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  118. package/dist/src/storage/repositories/capability.repository.d.ts +35 -0
  119. package/dist/src/storage/repositories/capability.repository.d.ts.map +1 -0
  120. package/dist/src/storage/repositories/capability.repository.js +2 -0
  121. package/dist/src/storage/repositories/capability.repository.js.map +1 -0
  122. package/dist/src/storage/repositories/index.d.ts +1 -0
  123. package/dist/src/storage/repositories/index.d.ts.map +1 -1
  124. package/dist/src/storage/repositories/node.repository.d.ts +5 -1
  125. package/dist/src/storage/repositories/node.repository.d.ts.map +1 -1
  126. package/dist/static/app-catalog.html +156 -29
  127. package/package.json +6 -1
  128. package/prisma/schema.prisma +86 -0
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/storage/providers/sqlite/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA+jC5D"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/storage/providers/sqlite/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA4oC5D"}
@@ -526,6 +526,18 @@ export function initializeSchema(db) {
526
526
  createdAt TEXT NOT NULL
527
527
  );
528
528
 
529
+ -- ── Verification Nonces ──
530
+ CREATE TABLE IF NOT EXISTS verification_nonces (
531
+ id TEXT PRIMARY KEY,
532
+ owner TEXT NOT NULL,
533
+ type TEXT NOT NULL,
534
+ state TEXT NOT NULL UNIQUE,
535
+ nonce TEXT NOT NULL,
536
+ redirectUri TEXT NOT NULL DEFAULT '',
537
+ createdAt TEXT NOT NULL,
538
+ expiresAt TEXT NOT NULL
539
+ );
540
+
529
541
  -- ── Genesis Peers ──
530
542
  CREATE TABLE IF NOT EXISTS genesis_peers (
531
543
  id TEXT PRIMARY KEY,
@@ -1065,6 +1077,71 @@ export function initializeSchema(db) {
1065
1077
  CREATE INDEX IF NOT EXISTS idx_package_instances_owner ON package_instances(owner);
1066
1078
  CREATE INDEX IF NOT EXISTS idx_package_instances_package ON package_instances(packageGroupId);
1067
1079
 
1080
+ -- Capabilities
1081
+ CREATE TABLE IF NOT EXISTS capabilities (
1082
+ id TEXT PRIMARY KEY,
1083
+ name TEXT NOT NULL,
1084
+ summary TEXT NOT NULL DEFAULT '',
1085
+ ownerGhii TEXT NOT NULL,
1086
+ visibility TEXT NOT NULL DEFAULT 'private',
1087
+ scope TEXT NOT NULL DEFAULT 'local',
1088
+ status TEXT NOT NULL DEFAULT 'draft',
1089
+ rejectionReason TEXT,
1090
+ deprecationMessage TEXT,
1091
+ replacedBy TEXT,
1092
+ sourceType TEXT NOT NULL,
1093
+ sourceRef TEXT NOT NULL,
1094
+ sourceVersion TEXT NOT NULL DEFAULT '',
1095
+ authRequired TEXT NOT NULL DEFAULT 'registered',
1096
+ callable INTEGER NOT NULL DEFAULT 0,
1097
+ inputSchema TEXT,
1098
+ outputSchema TEXT,
1099
+ exports TEXT,
1100
+ usage TEXT NOT NULL DEFAULT '',
1101
+ whenToUse TEXT NOT NULL DEFAULT '',
1102
+ whenNotToUse TEXT NOT NULL DEFAULT '',
1103
+ examples TEXT NOT NULL DEFAULT '[]',
1104
+ dependencies TEXT NOT NULL DEFAULT '[]',
1105
+ schemaHash TEXT NOT NULL DEFAULT '',
1106
+ webhookUrl TEXT,
1107
+ cost TEXT,
1108
+ trustRequired REAL,
1109
+ trust TEXT NOT NULL DEFAULT '{"operatorReviewed":false,"reviewedAt":null,"vouchCount":0,"publisherTrustScore":0,"codeAudited":false,"auditNotes":null}',
1110
+ redactedFields TEXT NOT NULL DEFAULT '[]',
1111
+ operatorOverride TEXT,
1112
+ stats TEXT NOT NULL DEFAULT '{"totalInvocations":0,"successCount":0,"errorCount":0,"lastInvokedAt":null,"avgResponseMs":0,"lastError":null}',
1113
+ tags TEXT NOT NULL DEFAULT '[]',
1114
+ createdAt TEXT NOT NULL,
1115
+ updatedAt TEXT NOT NULL
1116
+ );
1117
+ CREATE INDEX IF NOT EXISTS idx_capabilities_owner ON capabilities(ownerGhii);
1118
+ CREATE INDEX IF NOT EXISTS idx_capabilities_source ON capabilities(sourceType, sourceRef);
1119
+ CREATE INDEX IF NOT EXISTS idx_capabilities_status ON capabilities(status);
1120
+ CREATE INDEX IF NOT EXISTS idx_capabilities_visibility ON capabilities(visibility);
1121
+
1122
+ CREATE TABLE IF NOT EXISTS capability_logs (
1123
+ id TEXT PRIMARY KEY,
1124
+ capabilityId TEXT NOT NULL,
1125
+ callerGhii TEXT NOT NULL,
1126
+ input TEXT NOT NULL DEFAULT '{}',
1127
+ status TEXT NOT NULL,
1128
+ durationMs INTEGER NOT NULL DEFAULT 0,
1129
+ error TEXT,
1130
+ timestamp TEXT NOT NULL,
1131
+ FOREIGN KEY (capabilityId) REFERENCES capabilities(id) ON DELETE CASCADE
1132
+ );
1133
+ CREATE INDEX IF NOT EXISTS idx_capability_logs_cap ON capability_logs(capabilityId, timestamp);
1134
+ CREATE INDEX IF NOT EXISTS idx_capability_logs_status ON capability_logs(capabilityId, status);
1135
+
1136
+ CREATE TABLE IF NOT EXISTS capability_vouches (
1137
+ capabilityId TEXT NOT NULL,
1138
+ userGhii TEXT NOT NULL,
1139
+ comment TEXT,
1140
+ createdAt TEXT NOT NULL,
1141
+ PRIMARY KEY (capabilityId, userGhii),
1142
+ FOREIGN KEY (capabilityId) REFERENCES capabilities(id) ON DELETE CASCADE
1143
+ );
1144
+
1068
1145
  `);
1069
1146
  // ── Schema migrations for existing databases ──
1070
1147
  // ALTER TABLE ADD COLUMN is idempotent-safe: if the column exists, it throws
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../src/storage/providers/sqlite/schema.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAqB;IACpD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsiCP,CAAC,CAAC;IAEH,iDAAiD;IACjD,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;QACpE,IAAI,CAAC;YAAC,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAC7G,CAAC,CAAC;IAEF,4CAA4C;IAC5C,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAEjD,6CAA6C;IAC7C,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAElD,8CAA8C;IAC9C,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAElD,wDAAwD;IACxD,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEvD,yDAAyD;IACzD,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../src/storage/providers/sqlite/schema.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAqB;IACpD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmnCP,CAAC,CAAC;IAEH,iDAAiD;IACjD,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;QACpE,IAAI,CAAC;YAAC,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAC7G,CAAC,CAAC;IAEF,4CAA4C;IAC5C,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAEjD,6CAA6C;IAC7C,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAElD,8CAA8C;IAC9C,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAElD,wDAAwD;IACxD,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEvD,yDAAyD;IACzD,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { CapabilityRecord, CapabilityLogEntry, CapabilityOverride, CapabilityTrust, CapabilityFilter } from '../interface.js';
2
+ export interface CapabilityRepository {
3
+ createCapability(record: CapabilityRecord): Promise<CapabilityRecord>;
4
+ getCapability(id: string): Promise<CapabilityRecord | null>;
5
+ updateCapability(id: string, updates: Partial<CapabilityRecord>): Promise<CapabilityRecord | null>;
6
+ deleteCapability(id: string): Promise<boolean>;
7
+ listCapabilities(filters: CapabilityFilter): Promise<{
8
+ capabilities: CapabilityRecord[];
9
+ total: number;
10
+ }>;
11
+ listCapabilitiesByOwner(ownerGhii: string): Promise<CapabilityRecord[]>;
12
+ getCapabilityBySourceRef(sourceRef: string): Promise<CapabilityRecord | null>;
13
+ listCapabilitiesBySourceType(sourceType: string): Promise<CapabilityRecord[]>;
14
+ incrementCapabilityStats(id: string, delta: {
15
+ success: number;
16
+ error: number;
17
+ totalMs: number;
18
+ lastError?: string;
19
+ }): Promise<void>;
20
+ addCapabilityLog(entry: CapabilityLogEntry): Promise<void>;
21
+ listCapabilityLogs(capabilityId: string, filters: {
22
+ status?: 'success' | 'error';
23
+ page?: number;
24
+ perPage?: number;
25
+ }): Promise<{
26
+ logs: CapabilityLogEntry[];
27
+ total: number;
28
+ }>;
29
+ deleteCapabilityLogsBefore(before: string): Promise<number>;
30
+ setCapabilityOverride(id: string, override: CapabilityOverride | null): Promise<void>;
31
+ setCapabilityTrust(id: string, trust: Partial<CapabilityTrust>): Promise<void>;
32
+ incrementVouchCount(id: string): Promise<void>;
33
+ decrementVouchCount(id: string): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=capability.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.repository.d.ts","sourceRoot":"","sources":["../../../../src/storage/repositories/capability.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnI,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC5D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnG,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1G,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACxE,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC9E,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE9E,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;QAC1C,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KACrE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE;QAChD,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=capability.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/capability.repository.ts"],"names":[],"mappings":""}
@@ -31,4 +31,5 @@ export type { SystemPromptRepository } from './system-prompt.repository.js';
31
31
  export type { PackageRepository } from './package.repository.js';
32
32
  export type { TemplateListingRepository } from './template-listing.repository.js';
33
33
  export type { PackageInstanceRepository } from './package-instance.repository.js';
34
+ export type { CapabilityRepository } from './capability.repository.js';
34
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/repositories/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,YAAY,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAC5F,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACtF,YAAY,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACpF,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/repositories/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,YAAY,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAC5F,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACtF,YAAY,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACpF,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { MaintenanceState, PushSubscriptionRecord, TrustedIssuerRecord, RealtimeRoomRecord, SiteChangeLogEntry, ExtensionRecord, EscrowHoldRecord, CortexExtensionRecord } from '../interface.js';
1
+ import type { MaintenanceState, PushSubscriptionRecord, TrustedIssuerRecord, VerificationNonceRecord, RealtimeRoomRecord, SiteChangeLogEntry, ExtensionRecord, EscrowHoldRecord, CortexExtensionRecord } from '../interface.js';
2
2
  export interface NodeRepository {
3
3
  setNodeKey(publicKey: string, privateKey: string): Promise<void>;
4
4
  getNodeKey(): Promise<{
@@ -18,6 +18,10 @@ export interface NodeRepository {
18
18
  type?: string;
19
19
  }): Promise<TrustedIssuerRecord[]>;
20
20
  deleteTrustedIssuer(id: string): Promise<boolean>;
21
+ createVerificationNonce(record: VerificationNonceRecord): Promise<VerificationNonceRecord>;
22
+ getVerificationNonce(state: string): Promise<VerificationNonceRecord | null>;
23
+ deleteVerificationNonce(state: string): Promise<void>;
24
+ cleanExpiredNonces(): Promise<number>;
21
25
  createRealtimeRoom(room: RealtimeRoomRecord): Promise<RealtimeRoomRecord>;
22
26
  getRealtimeRoom(id: string): Promise<RealtimeRoomRecord | null>;
23
27
  listRealtimeRooms(filter?: {
@@ -1 +1 @@
1
- {"version":3,"file":"node.repository.d.ts","sourceRoot":"","sources":["../../../../src/storage/repositories/node.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.repository.d.ts","sourceRoot":"","sources":["../../../../src/storage/repositories/node.repository.ts"],"names":[],"mappings":"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"}
@@ -1110,6 +1110,36 @@
1110
1110
  font-size: .85rem;
1111
1111
  }
1112
1112
 
1113
+ .published-source-badge {
1114
+ display: inline-block;
1115
+ font-size: .62rem;
1116
+ font-weight: 600;
1117
+ text-transform: uppercase;
1118
+ letter-spacing: .03em;
1119
+ padding: 2px 6px;
1120
+ border-radius: 4px;
1121
+ vertical-align: middle;
1122
+ margin-left: 6px;
1123
+ }
1124
+
1125
+ .published-source-badge.local {
1126
+ background: rgba(52, 211, 153, .12);
1127
+ color: #34d399;
1128
+ border: 1px solid rgba(52, 211, 153, .3);
1129
+ }
1130
+
1131
+ .published-source-badge.server {
1132
+ background: rgba(99, 102, 241, .10);
1133
+ color: #6366f1;
1134
+ border: 1px solid rgba(99, 102, 241, .25);
1135
+ }
1136
+
1137
+ .published-source-badge.both {
1138
+ background: rgba(245, 158, 11, .10);
1139
+ color: #d97706;
1140
+ border: 1px solid rgba(245, 158, 11, .25);
1141
+ }
1142
+
1113
1143
  /* ── Cortex Extensions Bar ──────────────────────── */
1114
1144
 
1115
1145
  .cortex-mini-card{background:#FFFFFF;border:1px solid #E5E7EB;border-radius:10px;padding:.75rem 1rem;cursor:pointer;min-width:160px;flex-shrink:0;transition:all .15s}
@@ -3082,43 +3112,140 @@
3082
3112
  }
3083
3113
 
3084
3114
  function loadPublishedApps() {
3115
+ var config = loadConfig();
3116
+ var aimeatUrl = config.aimeatUrl ? config.aimeatUrl.replace(/\/+$/, '') : '';
3117
+ var section = document.getElementById('published-section');
3118
+ var grid = document.getElementById('published-grid');
3119
+ var countEl = document.getElementById('published-count');
3120
+
3121
+ // Get current owner name from session (if logged in)
3122
+ var currentOwner = null;
3123
+ try {
3124
+ if (window.AIMEAT && window.AIMEAT.auth && window.AIMEAT.auth.getSession()) {
3125
+ currentOwner = window.AIMEAT.auth.getSession().owner || null;
3126
+ }
3127
+ if (!currentOwner) {
3128
+ var stored = localStorage.getItem('aimeat_session');
3129
+ if (stored) {
3130
+ currentOwner = JSON.parse(stored).owner || null;
3131
+ }
3132
+ }
3133
+ } catch(e) {}
3134
+
3135
+ // Always load local published apps
3085
3136
  getAllApps().then(function(apps) {
3086
- var published = apps.filter(function(a) { return a.published; });
3087
- var section = document.getElementById('published-section');
3088
- var grid = document.getElementById('published-grid');
3089
- var countEl = document.getElementById('published-count');
3137
+ var localPublished = apps.filter(function(a) { return a.published; });
3138
+
3139
+ // Build a lookup of local published apps by filename
3140
+ var localByFilename = {};
3141
+ for (var i = 0; i < localPublished.length; i++) {
3142
+ var lp = localPublished[i];
3143
+ if (lp.publishedFilename) {
3144
+ localByFilename[lp.publishedFilename] = lp;
3145
+ }
3146
+ }
3090
3147
 
3091
- if (published.length === 0) {
3092
- section.style.display = 'none';
3148
+ // If no aimeatUrl, fall back to local-only display
3149
+ if (!aimeatUrl) {
3150
+ renderPublishedApps(localPublished, [], localByFilename, aimeatUrl, section, grid, countEl);
3093
3151
  return;
3094
3152
  }
3095
3153
 
3096
- section.style.display = '';
3097
- countEl.textContent = '(' + published.length + ')';
3098
- var config = loadConfig();
3099
- var aimeatUrl = config.aimeatUrl ? config.aimeatUrl.replace(/\/+$/, '') : '';
3100
-
3101
- var html = '';
3102
- for (var i = 0; i < published.length; i++) {
3103
- var app = published[i];
3104
- var url = app.publishedUrl ? (aimeatUrl + app.publishedUrl) : '';
3105
- html +=
3106
- '<div class="published-card">' +
3107
- '<div class="published-card-name">' + escapeHtml(app.name || app.publishedFilename || 'Untitled') + (app.publishedVersionNumber ? ' <span style="opacity:.5;font-size:.85em">v' + app.publishedVersionNumber + '</span>' : '') + '</div>' +
3108
- '<div class="published-card-meta">' +
3109
- '<span>' + escapeHtml(app.publishedFilename || '') + '</span>' +
3110
- '<span>' + (app.publishedAt ? new Date(app.publishedAt).toLocaleDateString() : '') + '</span>' +
3111
- '</div>' +
3112
- '<div class="published-card-actions">' +
3113
- (url ? '<button onclick="window.open(\'' + escapeHtml(url) + '?mode=inline\', \'_blank\')">&#x1F441; View</button>' : '') +
3114
- '<button onclick="window._launcher.unpublishApp(\'' + escapeHtml(app.id) + '\')" class="danger">&#x1F5D1; Remove</button>' +
3115
- '</div>' +
3116
- '</div>';
3117
- }
3118
- grid.innerHTML = html;
3154
+ // Fetch server apps
3155
+ fetch(aimeatUrl + '/v1/apps')
3156
+ .then(function(resp) {
3157
+ if (!resp.ok) throw new Error('Server returned ' + resp.status);
3158
+ return resp.json();
3159
+ })
3160
+ .then(function(json) {
3161
+ var serverApps = json.data && json.data.apps ? json.data.apps : [];
3162
+
3163
+ // Filter to current owner's apps if we know who they are
3164
+ if (currentOwner) {
3165
+ serverApps = serverApps.filter(function(a) { return a.owner === currentOwner; });
3166
+ }
3167
+
3168
+ renderPublishedApps(localPublished, serverApps, localByFilename, aimeatUrl, section, grid, countEl);
3169
+ })
3170
+ .catch(function() {
3171
+ // Server fetch failed - fall back to local only
3172
+ renderPublishedApps(localPublished, [], localByFilename, aimeatUrl, section, grid, countEl);
3173
+ });
3119
3174
  });
3120
3175
  }
3121
3176
 
3177
+ function renderPublishedApps(localPublished, serverApps, localByFilename, aimeatUrl, section, grid, countEl) {
3178
+ // Merge: build a combined list. Server apps take priority for display data,
3179
+ // but we note which source(s) each app comes from.
3180
+ var merged = [];
3181
+ var seenFilenames = {};
3182
+
3183
+ // Add server apps first
3184
+ for (var s = 0; s < serverApps.length; s++) {
3185
+ var sa = serverApps[s];
3186
+ var filename = sa.filename || '';
3187
+ var localMatch = localByFilename[filename] || null;
3188
+ var source = localMatch ? 'both' : 'server';
3189
+ seenFilenames[filename] = true;
3190
+ merged.push({
3191
+ name: (sa.manifest && sa.manifest.name) ? sa.manifest.name : filename,
3192
+ filename: filename,
3193
+ version: sa.version_number ? 'v' + sa.version_number : '',
3194
+ date: sa.created_at ? new Date(sa.created_at).toLocaleDateString() : '',
3195
+ viewUrl: aimeatUrl + '/v1/apps/' + encodeURIComponent(sa.owner || '') + '/' + encodeURIComponent(filename),
3196
+ source: source,
3197
+ localId: localMatch ? localMatch.id : null
3198
+ });
3199
+ }
3200
+
3201
+ // Add local-only apps (not already seen from server)
3202
+ for (var l = 0; l < localPublished.length; l++) {
3203
+ var lp = localPublished[l];
3204
+ var lpFilename = lp.publishedFilename || '';
3205
+ if (lpFilename && seenFilenames[lpFilename]) continue;
3206
+ var lpUrl = lp.publishedUrl ? (aimeatUrl + lp.publishedUrl) : '';
3207
+ merged.push({
3208
+ name: lp.name || lpFilename || 'Untitled',
3209
+ filename: lpFilename,
3210
+ version: lp.publishedVersionNumber ? 'v' + lp.publishedVersionNumber : '',
3211
+ date: lp.publishedAt ? new Date(lp.publishedAt).toLocaleDateString() : '',
3212
+ viewUrl: lpUrl,
3213
+ source: 'local',
3214
+ localId: lp.id
3215
+ });
3216
+ }
3217
+
3218
+ if (merged.length === 0) {
3219
+ section.style.display = 'none';
3220
+ return;
3221
+ }
3222
+
3223
+ section.style.display = '';
3224
+ countEl.textContent = '(' + merged.length + ')';
3225
+
3226
+ var html = '';
3227
+ for (var i = 0; i < merged.length; i++) {
3228
+ var app = merged[i];
3229
+ var badgeClass = app.source === 'both' ? 'both' : (app.source === 'server' ? 'server' : 'local');
3230
+ var badgeLabel = app.source === 'both' ? 'local + server' : app.source;
3231
+ html +=
3232
+ '<div class="published-card">' +
3233
+ '<div class="published-card-name">' + escapeHtml(app.name) + (app.version ? ' <span style="opacity:.5;font-size:.85em">' + escapeHtml(app.version) + '</span>' : '') +
3234
+ ' <span class="published-source-badge ' + badgeClass + '">' + badgeLabel + '</span>' +
3235
+ '</div>' +
3236
+ '<div class="published-card-meta">' +
3237
+ '<span>' + escapeHtml(app.filename) + '</span>' +
3238
+ '<span>' + app.date + '</span>' +
3239
+ '</div>' +
3240
+ '<div class="published-card-actions">' +
3241
+ (app.viewUrl ? '<button onclick="window.open(\'' + escapeHtml(app.viewUrl) + '?mode=inline\', \'_blank\')">&#x1F441; View</button>' : '') +
3242
+ (app.localId ? '<button onclick="window._launcher.unpublishApp(\'' + escapeHtml(app.localId) + '\')" class="danger">&#x1F5D1; Remove</button>' : '') +
3243
+ '</div>' +
3244
+ '</div>';
3245
+ }
3246
+ grid.innerHTML = html;
3247
+ }
3248
+
3122
3249
  function unpublishApp(appId) {
3123
3250
  if (!confirm('Remove this published app from the server?')) return;
3124
3251
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aimeat",
3
- "version": "1.2.6",
3
+ "version": "1.3.0",
4
4
  "description": "AIME AT — AI Memory Exchange and Action Transfer — reference implementation",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -115,6 +115,10 @@
115
115
  "@modelcontextprotocol/sdk": "^1.27.1",
116
116
  "@noble/ed25519": "^3.0.0",
117
117
  "@noble/hashes": "^2.0.1",
118
+ "@sd-jwt/core": "^0.19.0",
119
+ "@sd-jwt/decode": "^0.19.0",
120
+ "@sd-jwt/types": "^0.19.0",
121
+ "@sd-jwt/utils": "^0.19.0",
118
122
  "ajv": "^8.18.0",
119
123
  "ajv-formats": "^3.0.1",
120
124
  "archiver": "^7.0.1",
@@ -128,6 +132,7 @@
128
132
  "jose": "^6.1.3",
129
133
  "minidenticons": "^4.2.1",
130
134
  "nodemailer": "^8.0.5",
135
+ "openid-client": "^6.8.4",
131
136
  "otpauth": "^9.5.0",
132
137
  "prom-client": "^15.1.3",
133
138
  "qrcode": "^1.5.4",
@@ -687,6 +687,19 @@ model TrustedIssuer {
687
687
  @@index([url])
688
688
  }
689
689
 
690
+ model VerificationNonce {
691
+ id String @id @map("_id")
692
+ owner String
693
+ type String
694
+ state String @unique
695
+ nonce String
696
+ redirectUri String @default("")
697
+ createdAt DateTime @default(now())
698
+ expiresAt DateTime
699
+
700
+ @@index([expiresAt])
701
+ }
702
+
690
703
  model GenesisPeer {
691
704
  id String @id @map("_id")
692
705
  genesisNodeId String
@@ -1084,3 +1097,76 @@ model PackageInstance {
1084
1097
  @@index([owner])
1085
1098
  @@index([packageGroupId])
1086
1099
  }
1100
+
1101
+ model Capability {
1102
+ id String @id @map("_id")
1103
+ name String
1104
+ summary String @default("")
1105
+ ownerGhii String
1106
+ visibility String @default("private")
1107
+ scope String @default("local")
1108
+ status String @default("draft")
1109
+ rejectionReason String?
1110
+ deprecationMessage String?
1111
+ replacedBy String?
1112
+ sourceType String
1113
+ sourceRef String
1114
+ sourceVersion String @default("")
1115
+ authRequired String @default("registered")
1116
+ callable Boolean @default(false)
1117
+ inputSchema Json?
1118
+ outputSchema Json?
1119
+ exports Json? // CapabilityExport[]
1120
+ usage String @default("")
1121
+ whenToUse String @default("")
1122
+ whenNotToUse String @default("")
1123
+ examples Json @default("[]") // Array<{ description, input, output }>
1124
+ dependencies Json @default("[]") // CapabilityDependency[]
1125
+ schemaHash String @default("")
1126
+ webhookUrl String?
1127
+ cost Json? // { morsels, perUnit? }
1128
+ trustRequired Float?
1129
+ trust Json // CapabilityTrust
1130
+ redactedFields Json @default("[]") // string[]
1131
+ operatorOverride Json? // CapabilityOverride
1132
+ stats Json // CapabilityStats
1133
+ tags Json @default("[]") // string[]
1134
+ createdAt DateTime @default(now())
1135
+ updatedAt DateTime @updatedAt
1136
+
1137
+ logs CapabilityLog[]
1138
+ vouches CapabilityVouch[]
1139
+
1140
+ @@index([ownerGhii])
1141
+ @@index([sourceType, sourceRef])
1142
+ @@index([status])
1143
+ @@index([visibility])
1144
+ }
1145
+
1146
+ model CapabilityLog {
1147
+ id String @id @default(auto()) @map("_id") @db.ObjectId
1148
+ capabilityId String
1149
+ callerGhii String
1150
+ input Json @default("{}")
1151
+ status String
1152
+ durationMs Int @default(0)
1153
+ error String?
1154
+ timestamp DateTime @default(now())
1155
+
1156
+ capability Capability @relation(fields: [capabilityId], references: [id], onDelete: Cascade)
1157
+
1158
+ @@index([capabilityId, timestamp])
1159
+ @@index([capabilityId, status])
1160
+ }
1161
+
1162
+ model CapabilityVouch {
1163
+ id String @id @default(auto()) @map("_id") @db.ObjectId
1164
+ capabilityId String
1165
+ userGhii String
1166
+ comment String?
1167
+ createdAt DateTime @default(now())
1168
+
1169
+ capability Capability @relation(fields: [capabilityId], references: [id], onDelete: Cascade)
1170
+
1171
+ @@unique([capabilityId, userGhii])
1172
+ }