@audiofool/moondog 0.1.0 → 0.2.0-beta.2

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 (121) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +153 -68
  3. package/contracts/v1/definitions.schema.json +1 -169
  4. package/package.json +7 -23
  5. package/scripts/contract-lib.mjs +0 -7
  6. package/scripts/contract-semantics.mjs +0 -1904
  7. package/scripts/moondog.mjs +285 -74
  8. package/src/core/apple-library-source-status.mjs +0 -16
  9. package/src/core/apple-projection-domain-services.mjs +168 -36
  10. package/src/core/application-update.mjs +320 -0
  11. package/src/core/capability-catalog.mjs +278 -55
  12. package/src/core/listening-now.mjs +108 -0
  13. package/src/core/listening-profile-domain-services.mjs +153 -41
  14. package/src/core/listening-upkeep.mjs +31 -0
  15. package/src/core/moondog-application.mjs +1908 -104
  16. package/src/core/playback-preferences.mjs +97 -0
  17. package/src/core/spotify-listening-intent.mjs +121 -0
  18. package/src/core/synthetic-domain-services.mjs +24 -3
  19. package/src/demo/moondog-demo.mjs +4 -22
  20. package/src/i18n/index.mjs +285 -0
  21. package/src/i18n/messages/de.mjs +128 -0
  22. package/src/i18n/messages/en.mjs +129 -0
  23. package/src/i18n/messages/es.mjs +128 -0
  24. package/src/i18n/messages/fr.mjs +128 -0
  25. package/src/i18n/messages/it.mjs +128 -0
  26. package/src/i18n/messages/ja.mjs +128 -0
  27. package/src/i18n/messages/ko.mjs +128 -0
  28. package/src/i18n/messages/pt.mjs +128 -0
  29. package/src/i18n/messages/zh-Hant.mjs +128 -0
  30. package/src/i18n/messages/zh.mjs +128 -0
  31. package/src/i18n/preferences.mjs +34 -0
  32. package/src/i18n/screen/es.mjs +966 -0
  33. package/src/i18n/screen/ja.mjs +966 -0
  34. package/src/i18n/screen/pt.mjs +966 -0
  35. package/src/i18n/screen/zh.mjs +966 -0
  36. package/src/importers/apple-music-library/index.mjs +0 -16
  37. package/src/importers/apple-music-library/sqlite-projection.mjs +51 -9
  38. package/src/integrations/apple-music/catalog.mjs +123 -14
  39. package/src/integrations/apple-music/music-app.mjs +232 -0
  40. package/src/integrations/apple-music/storefront.mjs +28 -0
  41. package/src/integrations/apple-music/terminal-preview-player.mjs +221 -0
  42. package/src/integrations/lastfm/history.mjs +221 -0
  43. package/src/integrations/lastfm/settings.mjs +75 -0
  44. package/src/integrations/netease/ncm-cli-player.mjs +321 -0
  45. package/src/integrations/open-music-similarity/artist-radio.mjs +26 -18
  46. package/src/integrations/public-playlists.mjs +2 -1
  47. package/src/integrations/spotify/account-data-profile.mjs +14 -6
  48. package/src/integrations/spotify/authentication.mjs +149 -15
  49. package/src/integrations/spotify/catalog-resolver.mjs +8 -4
  50. package/src/integrations/spotify/connection.mjs +2 -1
  51. package/src/integrations/spotify/credential-store.mjs +4 -0
  52. package/src/integrations/spotify/extended-streaming-history.mjs +11 -11
  53. package/src/integrations/spotify/history-archive.mjs +1 -1
  54. package/src/integrations/spotify/library-snapshot.mjs +227 -0
  55. package/src/integrations/spotify/recent-activity.mjs +2 -0
  56. package/src/integrations/spotify/service.mjs +873 -69
  57. package/src/integrations/spotify/web-api-client.mjs +407 -127
  58. package/src/integrations/web/brave-web.mjs +45 -0
  59. package/src/integrations/web/codex-web.mjs +15 -82
  60. package/src/integrations/web/deepseek-web.mjs +81 -0
  61. package/src/integrations/web/web-research.mjs +119 -0
  62. package/src/integrations/web/web-result.mjs +215 -0
  63. package/src/integrations/youtube-music/takeout.mjs +3 -1
  64. package/src/memory/local-memory-store.mjs +469 -41
  65. package/src/profile/history-import.mjs +42 -6
  66. package/src/profile/listener-profile-build.mjs +378 -0
  67. package/src/profile/listener-profile-store.mjs +130 -0
  68. package/src/profile/listener-profile-verification.mjs +68 -0
  69. package/src/profile/listener-profile-worker.mjs +172 -0
  70. package/src/profile/listening-history-store.mjs +424 -8
  71. package/src/profile/listening-profile-projection.mjs +242 -76
  72. package/src/profile/local-music-data.mjs +1 -1
  73. package/src/profile/music-providers.mjs +11 -7
  74. package/src/profile/profile-exploration.mjs +84 -0
  75. package/src/profile/recorded-measures.mjs +24 -0
  76. package/src/profile/spotify-archive-taste.mjs +0 -4
  77. package/src/runtime/pi/agent-runtime.mjs +2204 -605
  78. package/src/runtime/pi/authentication.mjs +34 -1
  79. package/src/runtime/pi/configured-runtime.mjs +22 -6
  80. package/src/runtime/pi/conversation-name.mjs +53 -0
  81. package/src/runtime/pi/memory-agent-runtime.mjs +2 -2
  82. package/src/runtime/pi/model-catalog.mjs +28 -5
  83. package/src/runtime/pi/model-settings.mjs +202 -0
  84. package/src/runtime/pi/model-transport.mjs +10 -0
  85. package/src/runtime/pi/persistent-credential-store.mjs +67 -31
  86. package/src/runtime/pi/profile-build-runtime.mjs +160 -0
  87. package/src/runtime/pi/public-model-catalog.mjs +288 -0
  88. package/src/runtime/pi/runtime-settings.mjs +10 -2
  89. package/src/runtime/pi/skills/listener-profile/SKILL.md +46 -0
  90. package/src/runtime/pi/tool-trace.mjs +37 -0
  91. package/src/surfaces/cli/auth-command.mjs +12 -4
  92. package/src/surfaces/cli/brand-components.mjs +310 -132
  93. package/src/surfaces/cli/brand-theme.mjs +51 -28
  94. package/src/surfaces/cli/command-completions.mjs +58 -42
  95. package/src/surfaces/cli/format-output.mjs +199 -388
  96. package/src/surfaces/cli/history-import-view.mjs +292 -139
  97. package/src/surfaces/cli/import-guides.mjs +2 -0
  98. package/src/surfaces/cli/listener-profile-command.mjs +92 -0
  99. package/src/surfaces/cli/listening-menu.mjs +7 -4
  100. package/src/surfaces/cli/profile-command.mjs +30 -21
  101. package/src/surfaces/cli/seasons-chart.mjs +87 -0
  102. package/src/surfaces/cli/spotify-command.mjs +54 -6
  103. package/src/surfaces/cli/taste-profile-model.mjs +78 -79
  104. package/src/surfaces/cli/taste-profile-view.mjs +33 -26
  105. package/src/surfaces/cli/terminal-art.mjs +140 -35
  106. package/src/surfaces/cli/tui.mjs +1066 -357
  107. package/src/surfaces/cli/update-command.mjs +32 -0
  108. package/src/surfaces/cli/web-command.mjs +53 -14
  109. package/src/surfaces/html/tasteprint.mjs +43 -70
  110. package/contracts/v1/capability-policy.schema.json +0 -572
  111. package/contracts/v1/profile-evidence.schema.json +0 -237
  112. package/contracts/v1/tool-invocation.schema.json +0 -318
  113. package/contracts/v1/tool-receipt.schema.json +0 -1066
  114. package/scripts/demo-studio.mjs +0 -58
  115. package/src/core/apple-data-migration.mjs +0 -50
  116. package/src/demo/moondog-interactive-tasteprint-demo.mjs +0 -293
  117. package/src/demo/moondog-tasteprint-demo.mjs +0 -631
  118. package/src/integrations/spotify/index.mjs +0 -80
  119. package/src/surfaces/web/showcase.mjs +0 -272
  120. package/src/surfaces/web/studio-page.mjs +0 -4148
  121. package/src/surfaces/web/studio.mjs +0 -2288
@@ -73,10 +73,7 @@
73
73
  "track_ref",
74
74
  "listening_event",
75
75
  "taste_event",
76
- "profile_evidence",
77
- "capability_policy",
78
- "tool_invocation",
79
- "tool_receipt"
76
+ "profile_evidence"
80
77
  ]
81
78
  },
82
79
  "record_id": {
@@ -136,26 +133,6 @@
136
133
  ],
137
134
  "additionalProperties": false
138
135
  },
139
- "actor_ref": {
140
- "type": "object",
141
- "properties": {
142
- "actor_type": {
143
- "enum": [
144
- "user",
145
- "agent",
146
- "service"
147
- ]
148
- },
149
- "actor_id": {
150
- "$ref": "#/$defs/uuid"
151
- }
152
- },
153
- "required": [
154
- "actor_type",
155
- "actor_id"
156
- ],
157
- "additionalProperties": false
158
- },
159
136
  "context": {
160
137
  "type": "object",
161
138
  "properties": {
@@ -215,151 +192,6 @@
215
192
  "captured_at"
216
193
  ],
217
194
  "additionalProperties": false
218
- },
219
- "data_class": {
220
- "enum": [
221
- "public_metadata",
222
- "personal_profile",
223
- "raw_listening_history",
224
- "user_content",
225
- "generated_content",
226
- "credentials"
227
- ]
228
- },
229
- "effect_kind": {
230
- "enum": [
231
- "read_external",
232
- "write_local",
233
- "write_external",
234
- "send_message",
235
- "spend",
236
- "publish",
237
- "delete",
238
- "use_credentials"
239
- ]
240
- },
241
- "risk_domain": {
242
- "enum": [
243
- "privacy",
244
- "account",
245
- "copyright",
246
- "spend"
247
- ]
248
- },
249
- "budget_amount": {
250
- "type": "object",
251
- "properties": {
252
- "resource": {
253
- "$ref": "#/$defs/namespaced_key"
254
- },
255
- "quantity": {
256
- "type": "integer",
257
- "minimum": 0
258
- },
259
- "unit": {
260
- "$ref": "#/$defs/non_empty_string"
261
- }
262
- },
263
- "required": [
264
- "resource",
265
- "quantity",
266
- "unit"
267
- ],
268
- "additionalProperties": false
269
- },
270
- "policy_ref": {
271
- "type": "object",
272
- "properties": {
273
- "policy_id": {
274
- "$ref": "#/$defs/uuid"
275
- },
276
- "policy_version": {
277
- "type": "integer",
278
- "minimum": 1
279
- }
280
- },
281
- "required": [
282
- "policy_id",
283
- "policy_version"
284
- ],
285
- "additionalProperties": false
286
- },
287
- "tool_ref": {
288
- "type": "object",
289
- "properties": {
290
- "tool_id": {
291
- "$ref": "#/$defs/namespaced_key"
292
- },
293
- "contract_version": {
294
- "type": "integer",
295
- "minimum": 1
296
- }
297
- },
298
- "required": [
299
- "tool_id",
300
- "contract_version"
301
- ],
302
- "additionalProperties": false
303
- },
304
- "artifact_ref": {
305
- "type": "object",
306
- "properties": {
307
- "artifact_id": {
308
- "$ref": "#/$defs/uuid"
309
- },
310
- "media_type": {
311
- "type": "string",
312
- "pattern": "^[A-Za-z0-9!#$&^_.+-]+/[A-Za-z0-9!#$&^_.+-]+$"
313
- },
314
- "uri": {
315
- "type": "string",
316
- "format": "uri",
317
- "pattern": "^(?:https://[^?#]+|urn:moondog:artifact:[A-Za-z0-9._~-]+)$"
318
- },
319
- "sha256": {
320
- "$ref": "#/$defs/sha256"
321
- },
322
- "external_refs": {
323
- "type": "array",
324
- "items": {
325
- "$ref": "#/$defs/external_ref"
326
- },
327
- "uniqueItems": true
328
- }
329
- },
330
- "required": [
331
- "artifact_id",
332
- "media_type",
333
- "sha256"
334
- ],
335
- "additionalProperties": false
336
- },
337
- "external_destination": {
338
- "type": "object",
339
- "properties": {
340
- "destination_type": {
341
- "enum": [
342
- "local",
343
- "external"
344
- ]
345
- },
346
- "system": {
347
- "$ref": "#/$defs/non_empty_string"
348
- },
349
- "purpose_id": {
350
- "$ref": "#/$defs/namespaced_key"
351
- },
352
- "purpose": {
353
- "$ref": "#/$defs/non_empty_string"
354
- }
355
- },
356
- "required": [
357
- "destination_type",
358
- "system",
359
- "purpose_id",
360
- "purpose"
361
- ],
362
- "additionalProperties": false
363
195
  }
364
196
  }
365
197
  }
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@audiofool/moondog",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-beta.2",
4
4
  "type": "module",
5
5
  "description": "Local-first personal AI music agent.",
6
+ "license": "Apache-2.0",
6
7
  "keywords": [
7
8
  "ai-agent",
8
9
  "listenbrainz",
@@ -24,12 +25,10 @@
24
25
  "scripts/contract-semantics.mjs",
25
26
  "scripts/moondog",
26
27
  "scripts/moondog.mjs",
27
- "scripts/demo-studio.mjs",
28
28
  "src/core",
29
- "src/demo/moondog-interactive-tasteprint-demo.mjs",
29
+ "src/i18n",
30
30
  "src/demo/moondog-demo.mjs",
31
31
  "src/demo/fictional-spotify-history.mjs",
32
- "src/demo/moondog-tasteprint-demo.mjs",
33
32
  "src/importers",
34
33
  "src/integrations",
35
34
  "src/memory",
@@ -48,41 +47,26 @@
48
47
  "scripts": {
49
48
  "start": "node --disable-warning=ExperimentalWarning scripts/moondog.mjs",
50
49
  "moondog": "node --disable-warning=ExperimentalWarning scripts/moondog.mjs",
51
- "studio": "node --disable-warning=ExperimentalWarning scripts/moondog.mjs studio",
52
- "demo:studio": "node --disable-warning=ExperimentalWarning scripts/demo-studio.mjs",
53
50
  "generate:demo-history": "node --disable-warning=ExperimentalWarning scripts/moondog.mjs demo-history",
54
- "showcase": "node --disable-warning=ExperimentalWarning scripts/showcase.mjs",
55
- "export:showcase": "node --disable-warning=ExperimentalWarning scripts/export-showcase.mjs",
56
51
  "demo": "node --disable-warning=ExperimentalWarning scripts/moondog.mjs demo --offline",
57
- "generate:tasteprint-demo": "node --disable-warning=ExperimentalWarning scripts/generate-tasteprint-demo.mjs",
58
- "generate:studio-tour": "node --disable-warning=ExperimentalWarning scripts/capture-studio-tour.mjs",
59
52
  "generate:demo-screens": "node --disable-warning=ExperimentalWarning scripts/capture-demo-screens.mjs",
60
- "verify:showcase": "node --disable-warning=ExperimentalWarning scripts/verify-showcase.mjs",
61
- "verify:showcase-export": "node --test tests/core/showcase-export.test.mjs",
62
53
  "verify:demo-history": "node --test tests/runtime/moondog-demo-history.test.mjs",
63
54
  "verify:demo": "node --disable-warning=ExperimentalWarning scripts/verify-public-demo.mjs",
64
- "verify:demo-media": "node --disable-warning=ExperimentalWarning scripts/verify-demo-media.mjs",
65
55
  "verify:community": "node --disable-warning=ExperimentalWarning scripts/verify-community.mjs",
66
56
  "verify:package": "node --disable-warning=ExperimentalWarning scripts/verify-package.mjs",
67
57
  "verify:release-tree": "node --disable-warning=ExperimentalWarning scripts/verify-release-tree.mjs",
68
58
  "verify:clean-source": "node --disable-warning=ExperimentalWarning scripts/verify-clean-source.mjs",
69
59
  "verify:clean-linux": "node --disable-warning=ExperimentalWarning scripts/verify-clean-source.mjs --linux-container",
70
60
  "export:public-source": "node --disable-warning=ExperimentalWarning scripts/export-public-source.mjs",
71
- "verify": "npm run verify:release-tree && npm run verify:showcase && npm run verify:showcase-export && npm run verify:demo-history && npm run verify:demo && npm run verify:demo-media && npm run verify:community && npm run verify:package && npm run validate:contracts && npm test",
61
+ "verify": "npm run verify:release-tree && npm run verify:demo-history && npm run verify:demo && npm run verify:community && npm run verify:package && npm run validate:contracts && npm test",
72
62
  "doctor": "node --disable-warning=ExperimentalWarning scripts/moondog.mjs doctor",
73
- "inspect:apple-library": "node scripts/import-apple-music-library.mjs inspect",
74
- "import:apple-library": "node scripts/import-apple-music-library.mjs import",
75
- "rebuild:apple-projection": "node --disable-warning=ExperimentalWarning scripts/rebuild-apple-music-projection.mjs",
76
- "eval:discovery": "node --disable-warning=ExperimentalWarning scripts/evaluate-discovery.mjs",
77
- "eval:review": "node --disable-warning=ExperimentalWarning scripts/review-discovery.mjs",
78
- "eval:usability": "node --disable-warning=ExperimentalWarning scripts/evaluate-usability.mjs",
79
63
  "validate:contracts": "node scripts/validate-contracts.mjs",
80
64
  "test": "node --test tests/contracts/*.test.mjs tests/core/*.test.mjs tests/importers/*.test.mjs tests/runtime/*.test.mjs"
81
65
  },
82
66
  "dependencies": {
83
- "@earendil-works/pi-agent-core": "0.84.3",
84
- "@earendil-works/pi-ai": "0.84.3",
85
- "@earendil-works/pi-tui": "0.84.3",
67
+ "@earendil-works/pi-agent-core": "1.0.1",
68
+ "@earendil-works/pi-ai": "1.0.1",
69
+ "@earendil-works/pi-tui": "1.0.1",
86
70
  "ajv": "8.20.0",
87
71
  "ajv-formats": "3.0.1",
88
72
  "plist": "5.0.0"
@@ -25,11 +25,7 @@ export const contractSchemaIdsByVersion = new Map([
25
25
  ["listening-event:1", "urn:moondog:contract:listening-event:1"],
26
26
  ["taste-event:1", "urn:moondog:contract:taste-event:1"],
27
27
  ["library-track-observation:1", "urn:moondog:contract:library-track-observation:1"],
28
- ["profile-evidence:1", "urn:moondog:contract:profile-evidence:1"],
29
28
  ["profile-evidence:2", "urn:moondog:contract:profile-evidence:2"],
30
- ["capability-policy:1", "urn:moondog:contract:capability-policy:1"],
31
- ["tool-invocation:1", "urn:moondog:contract:tool-invocation:1"],
32
- ["tool-receipt:1", "urn:moondog:contract:tool-receipt:1"],
33
29
  ]);
34
30
 
35
31
  export const contractCurrentVersions = new Map([
@@ -38,9 +34,6 @@ export const contractCurrentVersions = new Map([
38
34
  ["taste-event", 1],
39
35
  ["library-track-observation", 1],
40
36
  ["profile-evidence", 2],
41
- ["capability-policy", 1],
42
- ["tool-invocation", 1],
43
- ["tool-receipt", 1],
44
37
  ]);
45
38
 
46
39
  export function contractSchemaId(contractName, schemaVersion) {