@audiofool/moondog 0.1.0 → 0.2.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +156 -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 +253 -53
  10. package/src/core/application-update.mjs +320 -0
  11. package/src/core/capability-catalog.mjs +290 -55
  12. package/src/core/listener-avoids.mjs +101 -0
  13. package/src/core/listening-now.mjs +108 -0
  14. package/src/core/listening-profile-domain-services.mjs +189 -41
  15. package/src/core/listening-upkeep.mjs +31 -0
  16. package/src/core/moondog-application.mjs +2115 -107
  17. package/src/core/playback-preferences.mjs +97 -0
  18. package/src/core/spotify-listening-intent.mjs +124 -0
  19. package/src/core/synthetic-domain-services.mjs +24 -3
  20. package/src/core/track-title.mjs +107 -0
  21. package/src/demo/moondog-demo.mjs +4 -22
  22. package/src/i18n/index.mjs +285 -0
  23. package/src/i18n/messages/de.mjs +135 -0
  24. package/src/i18n/messages/en.mjs +136 -0
  25. package/src/i18n/messages/es.mjs +135 -0
  26. package/src/i18n/messages/fr.mjs +135 -0
  27. package/src/i18n/messages/it.mjs +135 -0
  28. package/src/i18n/messages/ja.mjs +135 -0
  29. package/src/i18n/messages/ko.mjs +135 -0
  30. package/src/i18n/messages/pt.mjs +135 -0
  31. package/src/i18n/messages/zh-Hant.mjs +135 -0
  32. package/src/i18n/messages/zh.mjs +135 -0
  33. package/src/i18n/preferences.mjs +34 -0
  34. package/src/i18n/screen/es.mjs +967 -0
  35. package/src/i18n/screen/ja.mjs +967 -0
  36. package/src/i18n/screen/pt.mjs +967 -0
  37. package/src/i18n/screen/zh.mjs +967 -0
  38. package/src/importers/apple-music-library/index.mjs +0 -16
  39. package/src/importers/apple-music-library/sqlite-projection.mjs +51 -9
  40. package/src/integrations/apple-music/catalog.mjs +166 -14
  41. package/src/integrations/apple-music/music-app.mjs +232 -0
  42. package/src/integrations/apple-music/storefront.mjs +28 -0
  43. package/src/integrations/apple-music/terminal-preview-player.mjs +221 -0
  44. package/src/integrations/lastfm/history.mjs +221 -0
  45. package/src/integrations/lastfm/settings.mjs +75 -0
  46. package/src/integrations/netease/ncm-cli-player.mjs +328 -0
  47. package/src/integrations/open-music-similarity/artist-radio.mjs +26 -18
  48. package/src/integrations/public-playlists.mjs +2 -1
  49. package/src/integrations/spotify/account-data-profile.mjs +14 -6
  50. package/src/integrations/spotify/authentication.mjs +149 -15
  51. package/src/integrations/spotify/catalog-resolver.mjs +9 -6
  52. package/src/integrations/spotify/connection.mjs +2 -1
  53. package/src/integrations/spotify/credential-store.mjs +4 -0
  54. package/src/integrations/spotify/extended-streaming-history.mjs +11 -11
  55. package/src/integrations/spotify/history-archive.mjs +1 -1
  56. package/src/integrations/spotify/library-snapshot.mjs +227 -0
  57. package/src/integrations/spotify/recent-activity.mjs +2 -0
  58. package/src/integrations/spotify/service.mjs +873 -69
  59. package/src/integrations/spotify/web-api-client.mjs +410 -127
  60. package/src/integrations/web/brave-web.mjs +45 -0
  61. package/src/integrations/web/codex-web.mjs +15 -82
  62. package/src/integrations/web/deepseek-web.mjs +81 -0
  63. package/src/integrations/web/web-research.mjs +119 -0
  64. package/src/integrations/web/web-result.mjs +215 -0
  65. package/src/integrations/youtube-music/takeout.mjs +3 -1
  66. package/src/memory/local-memory-store.mjs +542 -57
  67. package/src/profile/history-import.mjs +42 -6
  68. package/src/profile/listener-corrections.mjs +22 -0
  69. package/src/profile/listener-profile-build.mjs +461 -0
  70. package/src/profile/listener-profile-store.mjs +130 -0
  71. package/src/profile/listener-profile-verification.mjs +68 -0
  72. package/src/profile/listener-profile-worker.mjs +179 -0
  73. package/src/profile/listening-history-store.mjs +640 -17
  74. package/src/profile/listening-profile-projection.mjs +454 -86
  75. package/src/profile/local-music-data.mjs +1 -1
  76. package/src/profile/moondog-suggestions.mjs +184 -0
  77. package/src/profile/music-providers.mjs +11 -7
  78. package/src/profile/profile-exploration.mjs +92 -0
  79. package/src/profile/recorded-measures.mjs +24 -0
  80. package/src/profile/spotify-archive-taste.mjs +0 -4
  81. package/src/runtime/pi/agent-runtime.mjs +2536 -692
  82. package/src/runtime/pi/authentication.mjs +34 -1
  83. package/src/runtime/pi/configured-runtime.mjs +22 -6
  84. package/src/runtime/pi/conversation-name.mjs +53 -0
  85. package/src/runtime/pi/memory-agent-runtime.mjs +2 -2
  86. package/src/runtime/pi/model-catalog.mjs +28 -5
  87. package/src/runtime/pi/model-settings.mjs +202 -0
  88. package/src/runtime/pi/model-transport.mjs +10 -0
  89. package/src/runtime/pi/persistent-credential-store.mjs +67 -31
  90. package/src/runtime/pi/profile-build-runtime.mjs +161 -0
  91. package/src/runtime/pi/public-model-catalog.mjs +288 -0
  92. package/src/runtime/pi/runtime-settings.mjs +10 -2
  93. package/src/runtime/pi/skills/listener-profile/SKILL.md +48 -0
  94. package/src/runtime/pi/tool-trace.mjs +37 -0
  95. package/src/surfaces/cli/auth-command.mjs +12 -4
  96. package/src/surfaces/cli/brand-components.mjs +310 -132
  97. package/src/surfaces/cli/brand-theme.mjs +51 -28
  98. package/src/surfaces/cli/command-completions.mjs +58 -42
  99. package/src/surfaces/cli/format-output.mjs +199 -388
  100. package/src/surfaces/cli/history-import-view.mjs +292 -139
  101. package/src/surfaces/cli/import-guides.mjs +2 -0
  102. package/src/surfaces/cli/listener-profile-command.mjs +92 -0
  103. package/src/surfaces/cli/listening-menu.mjs +7 -4
  104. package/src/surfaces/cli/profile-command.mjs +30 -21
  105. package/src/surfaces/cli/seasons-chart.mjs +87 -0
  106. package/src/surfaces/cli/spotify-command.mjs +54 -6
  107. package/src/surfaces/cli/taste-profile-model.mjs +78 -79
  108. package/src/surfaces/cli/taste-profile-view.mjs +33 -26
  109. package/src/surfaces/cli/terminal-art.mjs +140 -35
  110. package/src/surfaces/cli/tui.mjs +1066 -357
  111. package/src/surfaces/cli/update-command.mjs +32 -0
  112. package/src/surfaces/cli/web-command.mjs +53 -14
  113. package/src/surfaces/html/tasteprint.mjs +43 -70
  114. package/contracts/v1/capability-policy.schema.json +0 -572
  115. package/contracts/v1/profile-evidence.schema.json +0 -237
  116. package/contracts/v1/tool-invocation.schema.json +0 -318
  117. package/contracts/v1/tool-receipt.schema.json +0 -1066
  118. package/scripts/demo-studio.mjs +0 -58
  119. package/src/core/apple-data-migration.mjs +0 -50
  120. package/src/demo/moondog-interactive-tasteprint-demo.mjs +0 -293
  121. package/src/demo/moondog-tasteprint-demo.mjs +0 -631
  122. package/src/integrations/spotify/index.mjs +0 -80
  123. package/src/surfaces/web/showcase.mjs +0 -272
  124. package/src/surfaces/web/studio-page.mjs +0 -4148
  125. 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.3",
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) {