@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.
- package/LICENSE +202 -0
- package/README.md +153 -68
- package/contracts/v1/definitions.schema.json +1 -169
- package/package.json +7 -23
- package/scripts/contract-lib.mjs +0 -7
- package/scripts/contract-semantics.mjs +0 -1904
- package/scripts/moondog.mjs +285 -74
- package/src/core/apple-library-source-status.mjs +0 -16
- package/src/core/apple-projection-domain-services.mjs +168 -36
- package/src/core/application-update.mjs +320 -0
- package/src/core/capability-catalog.mjs +278 -55
- package/src/core/listening-now.mjs +108 -0
- package/src/core/listening-profile-domain-services.mjs +153 -41
- package/src/core/listening-upkeep.mjs +31 -0
- package/src/core/moondog-application.mjs +1908 -104
- package/src/core/playback-preferences.mjs +97 -0
- package/src/core/spotify-listening-intent.mjs +121 -0
- package/src/core/synthetic-domain-services.mjs +24 -3
- package/src/demo/moondog-demo.mjs +4 -22
- package/src/i18n/index.mjs +285 -0
- package/src/i18n/messages/de.mjs +128 -0
- package/src/i18n/messages/en.mjs +129 -0
- package/src/i18n/messages/es.mjs +128 -0
- package/src/i18n/messages/fr.mjs +128 -0
- package/src/i18n/messages/it.mjs +128 -0
- package/src/i18n/messages/ja.mjs +128 -0
- package/src/i18n/messages/ko.mjs +128 -0
- package/src/i18n/messages/pt.mjs +128 -0
- package/src/i18n/messages/zh-Hant.mjs +128 -0
- package/src/i18n/messages/zh.mjs +128 -0
- package/src/i18n/preferences.mjs +34 -0
- package/src/i18n/screen/es.mjs +966 -0
- package/src/i18n/screen/ja.mjs +966 -0
- package/src/i18n/screen/pt.mjs +966 -0
- package/src/i18n/screen/zh.mjs +966 -0
- package/src/importers/apple-music-library/index.mjs +0 -16
- package/src/importers/apple-music-library/sqlite-projection.mjs +51 -9
- package/src/integrations/apple-music/catalog.mjs +123 -14
- package/src/integrations/apple-music/music-app.mjs +232 -0
- package/src/integrations/apple-music/storefront.mjs +28 -0
- package/src/integrations/apple-music/terminal-preview-player.mjs +221 -0
- package/src/integrations/lastfm/history.mjs +221 -0
- package/src/integrations/lastfm/settings.mjs +75 -0
- package/src/integrations/netease/ncm-cli-player.mjs +321 -0
- package/src/integrations/open-music-similarity/artist-radio.mjs +26 -18
- package/src/integrations/public-playlists.mjs +2 -1
- package/src/integrations/spotify/account-data-profile.mjs +14 -6
- package/src/integrations/spotify/authentication.mjs +149 -15
- package/src/integrations/spotify/catalog-resolver.mjs +8 -4
- package/src/integrations/spotify/connection.mjs +2 -1
- package/src/integrations/spotify/credential-store.mjs +4 -0
- package/src/integrations/spotify/extended-streaming-history.mjs +11 -11
- package/src/integrations/spotify/history-archive.mjs +1 -1
- package/src/integrations/spotify/library-snapshot.mjs +227 -0
- package/src/integrations/spotify/recent-activity.mjs +2 -0
- package/src/integrations/spotify/service.mjs +873 -69
- package/src/integrations/spotify/web-api-client.mjs +407 -127
- package/src/integrations/web/brave-web.mjs +45 -0
- package/src/integrations/web/codex-web.mjs +15 -82
- package/src/integrations/web/deepseek-web.mjs +81 -0
- package/src/integrations/web/web-research.mjs +119 -0
- package/src/integrations/web/web-result.mjs +215 -0
- package/src/integrations/youtube-music/takeout.mjs +3 -1
- package/src/memory/local-memory-store.mjs +469 -41
- package/src/profile/history-import.mjs +42 -6
- package/src/profile/listener-profile-build.mjs +378 -0
- package/src/profile/listener-profile-store.mjs +130 -0
- package/src/profile/listener-profile-verification.mjs +68 -0
- package/src/profile/listener-profile-worker.mjs +172 -0
- package/src/profile/listening-history-store.mjs +424 -8
- package/src/profile/listening-profile-projection.mjs +242 -76
- package/src/profile/local-music-data.mjs +1 -1
- package/src/profile/music-providers.mjs +11 -7
- package/src/profile/profile-exploration.mjs +84 -0
- package/src/profile/recorded-measures.mjs +24 -0
- package/src/profile/spotify-archive-taste.mjs +0 -4
- package/src/runtime/pi/agent-runtime.mjs +2204 -605
- package/src/runtime/pi/authentication.mjs +34 -1
- package/src/runtime/pi/configured-runtime.mjs +22 -6
- package/src/runtime/pi/conversation-name.mjs +53 -0
- package/src/runtime/pi/memory-agent-runtime.mjs +2 -2
- package/src/runtime/pi/model-catalog.mjs +28 -5
- package/src/runtime/pi/model-settings.mjs +202 -0
- package/src/runtime/pi/model-transport.mjs +10 -0
- package/src/runtime/pi/persistent-credential-store.mjs +67 -31
- package/src/runtime/pi/profile-build-runtime.mjs +160 -0
- package/src/runtime/pi/public-model-catalog.mjs +288 -0
- package/src/runtime/pi/runtime-settings.mjs +10 -2
- package/src/runtime/pi/skills/listener-profile/SKILL.md +46 -0
- package/src/runtime/pi/tool-trace.mjs +37 -0
- package/src/surfaces/cli/auth-command.mjs +12 -4
- package/src/surfaces/cli/brand-components.mjs +310 -132
- package/src/surfaces/cli/brand-theme.mjs +51 -28
- package/src/surfaces/cli/command-completions.mjs +58 -42
- package/src/surfaces/cli/format-output.mjs +199 -388
- package/src/surfaces/cli/history-import-view.mjs +292 -139
- package/src/surfaces/cli/import-guides.mjs +2 -0
- package/src/surfaces/cli/listener-profile-command.mjs +92 -0
- package/src/surfaces/cli/listening-menu.mjs +7 -4
- package/src/surfaces/cli/profile-command.mjs +30 -21
- package/src/surfaces/cli/seasons-chart.mjs +87 -0
- package/src/surfaces/cli/spotify-command.mjs +54 -6
- package/src/surfaces/cli/taste-profile-model.mjs +78 -79
- package/src/surfaces/cli/taste-profile-view.mjs +33 -26
- package/src/surfaces/cli/terminal-art.mjs +140 -35
- package/src/surfaces/cli/tui.mjs +1066 -357
- package/src/surfaces/cli/update-command.mjs +32 -0
- package/src/surfaces/cli/web-command.mjs +53 -14
- package/src/surfaces/html/tasteprint.mjs +43 -70
- package/contracts/v1/capability-policy.schema.json +0 -572
- package/contracts/v1/profile-evidence.schema.json +0 -237
- package/contracts/v1/tool-invocation.schema.json +0 -318
- package/contracts/v1/tool-receipt.schema.json +0 -1066
- package/scripts/demo-studio.mjs +0 -58
- package/src/core/apple-data-migration.mjs +0 -50
- package/src/demo/moondog-interactive-tasteprint-demo.mjs +0 -293
- package/src/demo/moondog-tasteprint-demo.mjs +0 -631
- package/src/integrations/spotify/index.mjs +0 -80
- package/src/surfaces/web/showcase.mjs +0 -272
- package/src/surfaces/web/studio-page.mjs +0 -4148
- 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.
|
|
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/
|
|
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:
|
|
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
|
-
"@earendil-works/pi-ai": "0.
|
|
85
|
-
"@earendil-works/pi-tui": "0.
|
|
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"
|
package/scripts/contract-lib.mjs
CHANGED
|
@@ -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) {
|