@elizaos/plugin-contacts 2.0.3-beta.2 → 2.0.3-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 (59) hide show
  1. package/dist/components/ContactsAppView.d.ts +16 -0
  2. package/dist/components/ContactsAppView.d.ts.map +1 -0
  3. package/dist/components/ContactsAppView.helpers.d.ts +11 -0
  4. package/dist/components/ContactsAppView.helpers.d.ts.map +1 -0
  5. package/dist/components/ContactsAppView.helpers.js +36 -0
  6. package/dist/components/ContactsAppView.helpers.js.map +1 -0
  7. package/dist/components/ContactsAppView.interact.d.ts +2 -0
  8. package/dist/components/ContactsAppView.interact.d.ts.map +1 -0
  9. package/dist/components/ContactsAppView.interact.js +59 -0
  10. package/dist/components/ContactsAppView.interact.js.map +1 -0
  11. package/dist/components/ContactsAppView.js +747 -0
  12. package/dist/components/ContactsAppView.js.map +1 -0
  13. package/dist/components/ContactsSpatialView.d.ts +48 -0
  14. package/dist/components/ContactsSpatialView.d.ts.map +1 -0
  15. package/dist/components/ContactsSpatialView.js +254 -0
  16. package/dist/components/ContactsSpatialView.js.map +1 -0
  17. package/dist/components/ContactsView.d.ts +18 -0
  18. package/dist/components/ContactsView.d.ts.map +1 -0
  19. package/dist/components/ContactsView.js +163 -0
  20. package/dist/components/ContactsView.js.map +1 -0
  21. package/dist/components/contacts-app.d.ts +13 -0
  22. package/dist/components/contacts-app.d.ts.map +1 -0
  23. package/dist/components/contacts-app.js +20 -0
  24. package/dist/components/contacts-app.js.map +1 -0
  25. package/dist/components/contacts-view-bundle.d.ts +3 -0
  26. package/dist/components/contacts-view-bundle.d.ts.map +1 -0
  27. package/dist/components/contacts-view-bundle.js +7 -0
  28. package/dist/components/contacts-view-bundle.js.map +1 -0
  29. package/dist/index.d.ts +7 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +20 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/plugin.d.ts +13 -0
  34. package/dist/plugin.d.ts.map +1 -0
  35. package/dist/plugin.js +32 -0
  36. package/dist/plugin.js.map +1 -0
  37. package/dist/providers/contacts.d.ts +11 -0
  38. package/dist/providers/contacts.d.ts.map +1 -0
  39. package/dist/providers/contacts.js +68 -0
  40. package/dist/providers/contacts.js.map +1 -0
  41. package/dist/register-terminal-view.d.ts +15 -0
  42. package/dist/register-terminal-view.d.ts.map +1 -0
  43. package/dist/register-terminal-view.js +21 -0
  44. package/dist/register-terminal-view.js.map +1 -0
  45. package/dist/register.d.ts +10 -0
  46. package/dist/register.d.ts.map +1 -0
  47. package/dist/register.js +10 -0
  48. package/dist/register.js.map +1 -0
  49. package/dist/ui.d.ts +4 -0
  50. package/dist/ui.d.ts.map +1 -0
  51. package/dist/ui.js +15 -0
  52. package/dist/ui.js.map +1 -0
  53. package/dist/views/bundle.js +467 -0
  54. package/dist/views/bundle.js.map +1 -0
  55. package/dist/views/dist-Cd2YtKy4.js +270 -0
  56. package/dist/views/dist-Cd2YtKy4.js.map +1 -0
  57. package/dist/views/web-DMSWpoWr.js +39 -0
  58. package/dist/views/web-DMSWpoWr.js.map +1 -0
  59. package/package.json +7 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/ContactsView.tsx"],"sourcesContent":["/**\n * ContactsView — the single GUI/XR data wrapper for the Contacts surface.\n *\n * It owns the live Android address-book data (contact fetch, permission gate,\n * background poll, list/detail/new mode, the new-contact form, and the\n * Call/Text handoffs to the Phone/Messages views) and renders the one\n * presentational {@link ContactsSpatialView} inside a {@link SpatialSurface}.\n * Omitting the `modality` prop lets `SpatialSurface` auto-detect GUI vs XR via\n * `window.__elizaXRContext`, so the SAME component serves both surfaces. The\n * TUI surface renders the same `ContactsSpatialView` through the terminal\n * registry (see `register-terminal-view.tsx`).\n *\n * The full-screen overlay-app variant (with vCard import + permission-recovery\n * callout) remains `ContactsAppView`, loaded by the overlay-app registry on\n * ElizaOS; this wrapper is the cross-modality view-bundle export.\n */\n\nimport {\n type ContactSummary,\n Contacts,\n type CreateContactOptions,\n} from \"@elizaos/capacitor-contacts\";\nimport {\n navigateToMessagesWithNumber,\n navigateToPhoneWithNumber,\n} from \"@elizaos/ui/app-navigate-view\";\nimport { isNative } from \"@elizaos/ui/platform\";\nimport { SpatialSurface } from \"@elizaos/ui/spatial\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { matchesQuery } from \"./ContactsAppView.helpers.js\";\nimport {\n type ContactsFormDraft,\n type ContactsMode,\n type ContactsSnapshot,\n ContactsSpatialView,\n} from \"./ContactsSpatialView.js\";\n\nconst EMPTY_FORM: ContactsFormDraft = {\n displayName: \"\",\n phoneNumber: \"\",\n emailAddress: \"\",\n};\n\nexport function ContactsView() {\n const [contacts, setContacts] = useState<ContactSummary[]>([]);\n const [query, setQuery] = useState(\"\");\n const [mode, setMode] = useState<ContactsMode>(\"list\");\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [form, setForm] = useState<ContactsFormDraft>(EMPTY_FORM);\n const [loading, setLoading] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n if (!isNative) {\n setContacts([]);\n setError(null);\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n const status = await Contacts.requestPermissions().catch(() => null);\n if (status && status.contacts !== \"granted\") {\n setContacts([]);\n setError(\n \"Contacts access is needed to show your address book. Grant it in your device settings, then retry.\",\n );\n return;\n }\n const result = await Contacts.listContacts({});\n setContacts(result.contacts);\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n setContacts([]);\n } finally {\n setLoading(false);\n }\n }, []);\n\n // Load the address book on mount, then keep it fresh with a quiet 20s poll.\n // Torn down on unmount.\n const autoLoadedRef = useRef(false);\n useEffect(() => {\n if (!autoLoadedRef.current) {\n autoLoadedRef.current = true;\n void refresh();\n }\n const interval = setInterval(() => {\n void refresh();\n }, 20_000);\n return () => clearInterval(interval);\n }, [refresh]);\n\n // The native bridge has no server-side filter we depend on here; apply the\n // active query client-side so search reacts instantly without a refetch.\n const visibleContacts = useMemo(() => {\n const needle = query.trim();\n if (!needle) return contacts;\n return contacts.filter((contact) => matchesQuery(contact, needle));\n }, [contacts, query]);\n\n const createContact = useCallback(async () => {\n const displayName = form.displayName.trim();\n if (!displayName || submitting) return;\n const payload: CreateContactOptions = { displayName };\n const phone = form.phoneNumber.trim();\n const email = form.emailAddress.trim();\n if (phone) payload.phoneNumber = phone;\n if (email) payload.emailAddress = email;\n\n setSubmitting(true);\n setError(null);\n try {\n await Contacts.createContact(payload);\n setForm(EMPTY_FORM);\n setMode(\"list\");\n await refresh();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setSubmitting(false);\n }\n }, [form, refresh, submitting]);\n\n const onAction = useCallback(\n (action: string) => {\n if (action.startsWith(\"select:\")) {\n setSelectedId(action.slice(\"select:\".length));\n setMode(\"detail\");\n return;\n }\n if (action.startsWith(\"call:\")) {\n navigateToPhoneWithNumber(action.slice(\"call:\".length));\n return;\n }\n if (action.startsWith(\"text:\")) {\n navigateToMessagesWithNumber(action.slice(\"text:\".length));\n return;\n }\n if (action.startsWith(\"search:\")) {\n setQuery(action.slice(\"search:\".length));\n return;\n }\n if (action.startsWith(\"name:\")) {\n const value = action.slice(\"name:\".length);\n setForm((prev) => ({ ...prev, displayName: value }));\n return;\n }\n if (action.startsWith(\"phone:\")) {\n const value = action.slice(\"phone:\".length);\n setForm((prev) => ({ ...prev, phoneNumber: value }));\n return;\n }\n if (action.startsWith(\"email:\")) {\n const value = action.slice(\"email:\".length);\n setForm((prev) => ({ ...prev, emailAddress: value }));\n return;\n }\n switch (action) {\n case \"refresh\":\n void refresh();\n return;\n case \"new\":\n setForm(EMPTY_FORM);\n setMode(\"new\");\n return;\n case \"back\":\n case \"cancel\":\n setMode(\"list\");\n setSelectedId(null);\n return;\n case \"save\":\n void createContact();\n return;\n }\n },\n [createContact, refresh],\n );\n\n const snapshot: ContactsSnapshot = {\n contacts: visibleContacts,\n query,\n mode,\n selectedId,\n form,\n loading,\n submitting,\n error,\n };\n\n return (\n <SpatialSurface>\n <ContactsSpatialView snapshot={snapshot} onAction={onAction} />\n </SpatialSurface>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Contacts App — @elizaos/plugin-contacts
3
+ *
4
+ * Full-screen overlay app that wraps the @elizaos/capacitor-contacts native
5
+ * plugin. Android-only; the platform gate in `../register.ts` decides whether
6
+ * `registerContactsApp` is ever invoked.
7
+ */
8
+ import { type OverlayApp } from "@elizaos/ui";
9
+ export declare const CONTACTS_APP_NAME = "@elizaos/plugin-contacts";
10
+ export declare const contactsApp: OverlayApp;
11
+ /** Register the Contacts app with the overlay app registry. */
12
+ export declare function registerContactsApp(): void;
13
+ //# sourceMappingURL=contacts-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-app.d.ts","sourceRoot":"","sources":["../../src/components/contacts-app.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,aAAa,CAAC;AAElE,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,eAAO,MAAM,WAAW,EAAE,UASzB,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,20 @@
1
+ import { registerOverlayApp } from "@elizaos/ui";
2
+ const CONTACTS_APP_NAME = "@elizaos/plugin-contacts";
3
+ const contactsApp = {
4
+ name: CONTACTS_APP_NAME,
5
+ displayName: "Contacts",
6
+ description: "Read and create entries in the Android address book",
7
+ category: "system",
8
+ icon: null,
9
+ androidOnly: true,
10
+ loader: () => import("./ContactsAppView.js").then((m) => ({ default: m.ContactsAppView }))
11
+ };
12
+ function registerContactsApp() {
13
+ registerOverlayApp(contactsApp);
14
+ }
15
+ export {
16
+ CONTACTS_APP_NAME,
17
+ contactsApp,
18
+ registerContactsApp
19
+ };
20
+ //# sourceMappingURL=contacts-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/contacts-app.ts"],"sourcesContent":["/**\n * Contacts App — @elizaos/plugin-contacts\n *\n * Full-screen overlay app that wraps the @elizaos/capacitor-contacts native\n * plugin. Android-only; the platform gate in `../register.ts` decides whether\n * `registerContactsApp` is ever invoked.\n */\n\nimport { type OverlayApp, registerOverlayApp } from \"@elizaos/ui\";\n\nexport const CONTACTS_APP_NAME = \"@elizaos/plugin-contacts\";\n\nexport const contactsApp: OverlayApp = {\n name: CONTACTS_APP_NAME,\n displayName: \"Contacts\",\n description: \"Read and create entries in the Android address book\",\n category: \"system\",\n icon: null,\n androidOnly: true,\n loader: () =>\n import(\"./ContactsAppView.js\").then((m) => ({ default: m.ContactsAppView })),\n};\n\n/** Register the Contacts app with the overlay app registry. */\nexport function registerContactsApp(): void {\n registerOverlayApp(contactsApp);\n}\n"],"mappings":"AAQA,SAA0B,0BAA0B;AAE7C,MAAM,oBAAoB;AAE1B,MAAM,cAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,UAAU;AAAA,EACV,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ,MACN,OAAO,sBAAsB,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE;AAC/E;AAGO,SAAS,sBAA4B;AAC1C,qBAAmB,WAAW;AAChC;","names":[]}
@@ -0,0 +1,3 @@
1
+ export { interact } from "./ContactsAppView.interact.ts";
2
+ export { ContactsView } from "./ContactsView.tsx";
3
+ //# sourceMappingURL=contacts-view-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-view-bundle.d.ts","sourceRoot":"","sources":["../../src/components/contacts-view-bundle.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { interact } from "./ContactsAppView.interact.js";
2
+ import { ContactsView } from "./ContactsView.js";
3
+ export {
4
+ ContactsView,
5
+ interact
6
+ };
7
+ //# sourceMappingURL=contacts-view-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/contacts-view-bundle.ts"],"sourcesContent":["// Vite view-bundle entry. Re-exports the unified spatial view component plus\n// the `interact` capability handler so the built bundle (dist/views/bundle.js)\n// exposes the named exports the view loader reads (`ContactsView`, `interact`).\n// Kept separate from ContactsView.tsx so that file exports only React\n// components and stays Fast-Refresh-compatible in dev.\n\nexport { interact } from \"./ContactsAppView.interact.js\";\nexport { ContactsView } from \"./ContactsView.js\";\n"],"mappings":"AAMA,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;","names":[]}
@@ -0,0 +1,7 @@
1
+ export { ContactsAppView } from "./components/ContactsAppView";
2
+ export { ContactsView } from "./components/ContactsView";
3
+ export { CONTACTS_APP_NAME, contactsApp, registerContactsApp, } from "./components/contacts-app";
4
+ export { appContactsPlugin, contactsProvider } from "./plugin";
5
+ export * from "./register";
6
+ export * from "./ui";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC/D,cAAc,YAAY,CAAC;AAC3B,cAAc,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ import { ContactsAppView } from "./components/ContactsAppView.js";
2
+ import { ContactsView } from "./components/ContactsView.js";
3
+ import {
4
+ CONTACTS_APP_NAME,
5
+ contactsApp,
6
+ registerContactsApp
7
+ } from "./components/contacts-app.js";
8
+ import { appContactsPlugin, contactsProvider } from "./plugin.js";
9
+ export * from "./register.js";
10
+ export * from "./ui.js";
11
+ export {
12
+ CONTACTS_APP_NAME,
13
+ ContactsAppView,
14
+ ContactsView,
15
+ appContactsPlugin,
16
+ contactsApp,
17
+ contactsProvider,
18
+ registerContactsApp
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { ContactsAppView } from \"./components/ContactsAppView.js\";\nexport { ContactsView } from \"./components/ContactsView.js\";\nexport {\n CONTACTS_APP_NAME,\n contactsApp,\n registerContactsApp,\n} from \"./components/contacts-app.js\";\nexport { appContactsPlugin, contactsProvider } from \"./plugin.js\";\nexport * from \"./register.js\";\nexport * from \"./ui.js\";\n"],"mappings":"AAAA,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,wBAAwB;AACpD,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * elizaOS runtime plugin for the Contacts overlay app.
3
+ *
4
+ * Contacts are exposed as a dynamic provider, not a LIST_CONTACTS action:
5
+ * reading the address book is read-only context for planning, while live
6
+ * operations such as calling remain in the Phone app actions. The agent
7
+ * Android adapter applies hosted-app session gating when this package's
8
+ * `/plugin` export is registered.
9
+ */
10
+ import type { Plugin } from "@elizaos/core";
11
+ export declare const appContactsPlugin: Plugin;
12
+ export { contactsProvider } from "./providers/contacts";
13
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,eAAO,MAAM,iBAAiB,EAAE,MAwB/B,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/plugin.js ADDED
@@ -0,0 +1,32 @@
1
+ import { contactsProvider } from "./providers/contacts.js";
2
+ const CONTACTS_APP_NAME = "@elizaos/plugin-contacts";
3
+ const appContactsPlugin = {
4
+ name: CONTACTS_APP_NAME,
5
+ description: "Contacts overlay: read-only Android address-book context via the @elizaos/capacitor-contacts native plugin. The Android runtime adapter gates the provider to the active Contacts app session.",
6
+ providers: [contactsProvider],
7
+ views: [
8
+ // ONE declaration → GUI + XR + TUI, all drawn from the single ContactsView
9
+ // spatial source. `modalities` is a plain literal here (plugin.ts is not in
10
+ // the view bundle), so no brand-new `@elizaos/core` runtime export reaches
11
+ // the bundle build.
12
+ {
13
+ id: "contacts",
14
+ label: "Contacts",
15
+ description: "Android address book \u2014 read-only contact lookup",
16
+ icon: "Users",
17
+ path: "/contacts",
18
+ modalities: ["gui", "xr", "tui"],
19
+ bundlePath: "dist/views/bundle.js",
20
+ componentExport: "ContactsView",
21
+ tags: ["contacts", "android", "address-book"],
22
+ visibleInManager: true,
23
+ desktopTabEnabled: true
24
+ }
25
+ ]
26
+ };
27
+ import { contactsProvider as contactsProvider2 } from "./providers/contacts.js";
28
+ export {
29
+ appContactsPlugin,
30
+ contactsProvider2 as contactsProvider
31
+ };
32
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["/**\n * elizaOS runtime plugin for the Contacts overlay app.\n *\n * Contacts are exposed as a dynamic provider, not a LIST_CONTACTS action:\n * reading the address book is read-only context for planning, while live\n * operations such as calling remain in the Phone app actions. The agent\n * Android adapter applies hosted-app session gating when this package's\n * `/plugin` export is registered.\n */\n\nimport type { Plugin } from \"@elizaos/core\";\nimport { contactsProvider } from \"./providers/contacts.js\";\n\nconst CONTACTS_APP_NAME = \"@elizaos/plugin-contacts\";\n\nexport const appContactsPlugin: Plugin = {\n name: CONTACTS_APP_NAME,\n description:\n \"Contacts overlay: read-only Android address-book context via the @elizaos/capacitor-contacts native plugin. The Android runtime adapter gates the provider to the active Contacts app session.\",\n providers: [contactsProvider],\n views: [\n // ONE declaration → GUI + XR + TUI, all drawn from the single ContactsView\n // spatial source. `modalities` is a plain literal here (plugin.ts is not in\n // the view bundle), so no brand-new `@elizaos/core` runtime export reaches\n // the bundle build.\n {\n id: \"contacts\",\n label: \"Contacts\",\n description: \"Android address book — read-only contact lookup\",\n icon: \"Users\",\n path: \"/contacts\",\n modalities: [\"gui\", \"xr\", \"tui\"],\n bundlePath: \"dist/views/bundle.js\",\n componentExport: \"ContactsView\",\n tags: [\"contacts\", \"android\", \"address-book\"],\n visibleInManager: true,\n desktopTabEnabled: true,\n },\n ],\n};\n\nexport { contactsProvider } from \"./providers/contacts.js\";\n"],"mappings":"AAWA,SAAS,wBAAwB;AAEjC,MAAM,oBAAoB;AAEnB,MAAM,oBAA4B;AAAA,EACvC,MAAM;AAAA,EACN,aACE;AAAA,EACF,WAAW,CAAC,gBAAgB;AAAA,EAC5B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,YAAY,CAAC,OAAO,MAAM,KAAK;AAAA,MAC/B,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,MAAM,CAAC,YAAY,WAAW,cAAc;AAAA,MAC5C,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,IACrB;AAAA,EACF;AACF;AAEA,SAAS,oBAAAA,yBAAwB;","names":["contactsProvider"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * androidContacts provider — read-only Android address-book context.
3
+ *
4
+ * Listing contacts is state exposure, not an agent operation with side
5
+ * effects. Surfaced as a dynamic provider so the planner can pull contact
6
+ * context when relevant. PLACE_CALL on the Phone app remains the live
7
+ * operation for actually dialling a contact.
8
+ */
9
+ import type { Provider } from "@elizaos/core";
10
+ export declare const contactsProvider: Provider;
11
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/providers/contacts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAGV,QAAQ,EAGT,MAAM,eAAe,CAAC;AAwBvB,eAAO,MAAM,gBAAgB,EAAE,QA2D9B,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { Contacts } from "@elizaos/capacitor-contacts";
2
+ const CONTACTS_PROVIDER_NAME = "androidContacts";
3
+ const CONTACTS_PROVIDER_LIMIT = 50;
4
+ function toEntry(contact) {
5
+ return {
6
+ id: contact.id,
7
+ displayName: contact.displayName,
8
+ phones: contact.phoneNumbers,
9
+ emails: contact.emailAddresses,
10
+ starred: Boolean(contact.starred)
11
+ };
12
+ }
13
+ const contactsProvider = {
14
+ name: CONTACTS_PROVIDER_NAME,
15
+ description: "Read-only Android address-book contacts (id, display name, phone numbers, emails, starred) for resolving people referenced in chat.",
16
+ descriptionCompressed: "Android contacts: id, name, phones, emails, starred.",
17
+ dynamic: true,
18
+ contexts: ["contacts", "messaging"],
19
+ contextGate: { anyOf: ["contacts", "messaging"] },
20
+ cacheScope: "turn",
21
+ roleGate: { minRole: "ADMIN" },
22
+ cacheStable: false,
23
+ get: async (_runtime, _message, _state) => {
24
+ try {
25
+ const { contacts } = await Contacts.listContacts({
26
+ limit: CONTACTS_PROVIDER_LIMIT
27
+ });
28
+ const entries = contacts.map(toEntry);
29
+ return {
30
+ text: JSON.stringify({
31
+ android_contacts: {
32
+ count: entries.length,
33
+ items: entries
34
+ }
35
+ }),
36
+ values: {
37
+ contactsAvailable: entries.length > 0,
38
+ contactsCount: entries.length
39
+ },
40
+ data: {
41
+ contacts: entries,
42
+ count: entries.length,
43
+ limit: CONTACTS_PROVIDER_LIMIT
44
+ }
45
+ };
46
+ } catch (error) {
47
+ const message = error instanceof Error ? error.message : String(error);
48
+ return {
49
+ text: "",
50
+ values: {
51
+ contactsAvailable: false,
52
+ contactsCount: 0,
53
+ contactsError: message
54
+ },
55
+ data: {
56
+ contacts: [],
57
+ count: 0,
58
+ limit: CONTACTS_PROVIDER_LIMIT,
59
+ error: message
60
+ }
61
+ };
62
+ }
63
+ }
64
+ };
65
+ export {
66
+ contactsProvider
67
+ };
68
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/contacts.ts"],"sourcesContent":["/**\n * androidContacts provider — read-only Android address-book context.\n *\n * Listing contacts is state exposure, not an agent operation with side\n * effects. Surfaced as a dynamic provider so the planner can pull contact\n * context when relevant. PLACE_CALL on the Phone app remains the live\n * operation for actually dialling a contact.\n */\n\nimport { type ContactSummary, Contacts } from \"@elizaos/capacitor-contacts\";\nimport type {\n IAgentRuntime,\n Memory,\n Provider,\n ProviderResult,\n State,\n} from \"@elizaos/core\";\n\nconst CONTACTS_PROVIDER_NAME = \"androidContacts\";\n\nconst CONTACTS_PROVIDER_LIMIT = 50;\n\ninterface AndroidContactEntry {\n id: string;\n displayName: string;\n phones: string[];\n emails: string[];\n starred: boolean;\n}\n\nfunction toEntry(contact: ContactSummary): AndroidContactEntry {\n return {\n id: contact.id,\n displayName: contact.displayName,\n phones: contact.phoneNumbers,\n emails: contact.emailAddresses,\n starred: Boolean(contact.starred),\n };\n}\n\nexport const contactsProvider: Provider = {\n name: CONTACTS_PROVIDER_NAME,\n description:\n \"Read-only Android address-book contacts (id, display name, phone numbers, emails, starred) for resolving people referenced in chat.\",\n descriptionCompressed: \"Android contacts: id, name, phones, emails, starred.\",\n dynamic: true,\n contexts: [\"contacts\", \"messaging\"],\n contextGate: { anyOf: [\"contacts\", \"messaging\"] },\n cacheScope: \"turn\",\n roleGate: { minRole: \"ADMIN\" },\n cacheStable: false,\n\n get: async (\n _runtime: IAgentRuntime,\n _message: Memory,\n _state: State,\n ): Promise<ProviderResult> => {\n try {\n const { contacts } = await Contacts.listContacts({\n limit: CONTACTS_PROVIDER_LIMIT,\n });\n const entries = contacts.map(toEntry);\n\n return {\n text: JSON.stringify({\n android_contacts: {\n count: entries.length,\n items: entries,\n },\n }),\n values: {\n contactsAvailable: entries.length > 0,\n contactsCount: entries.length,\n },\n data: {\n contacts: entries,\n count: entries.length,\n limit: CONTACTS_PROVIDER_LIMIT,\n },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n return {\n text: \"\",\n values: {\n contactsAvailable: false,\n contactsCount: 0,\n contactsError: message,\n },\n data: {\n contacts: [],\n count: 0,\n limit: CONTACTS_PROVIDER_LIMIT,\n error: message,\n },\n };\n }\n },\n};\n"],"mappings":"AASA,SAA8B,gBAAgB;AAS9C,MAAM,yBAAyB;AAE/B,MAAM,0BAA0B;AAUhC,SAAS,QAAQ,SAA8C;AAC7D,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,aAAa,QAAQ;AAAA,IACrB,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,IAChB,SAAS,QAAQ,QAAQ,OAAO;AAAA,EAClC;AACF;AAEO,MAAM,mBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aACE;AAAA,EACF,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU,CAAC,YAAY,WAAW;AAAA,EAClC,aAAa,EAAE,OAAO,CAAC,YAAY,WAAW,EAAE;AAAA,EAChD,YAAY;AAAA,EACZ,UAAU,EAAE,SAAS,QAAQ;AAAA,EAC7B,aAAa;AAAA,EAEb,KAAK,OACH,UACA,UACA,WAC4B;AAC5B,QAAI;AACF,YAAM,EAAE,SAAS,IAAI,MAAM,SAAS,aAAa;AAAA,QAC/C,OAAO;AAAA,MACT,CAAC;AACD,YAAM,UAAU,SAAS,IAAI,OAAO;AAEpC,aAAO;AAAA,QACL,MAAM,KAAK,UAAU;AAAA,UACnB,kBAAkB;AAAA,YAChB,OAAO,QAAQ;AAAA,YACf,OAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,QACD,QAAQ;AAAA,UACN,mBAAmB,QAAQ,SAAS;AAAA,UACpC,eAAe,QAAQ;AAAA,QACzB;AAAA,QACA,MAAM;AAAA,UACJ,UAAU;AAAA,UACV,OAAO,QAAQ;AAAA,UACf,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAErE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,mBAAmB;AAAA,UACnB,eAAe;AAAA,UACf,eAAe;AAAA,QACjB;AAAA,QACA,MAAM;AAAA,UACJ,UAAU,CAAC;AAAA,UACX,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Register the contacts view for terminal rendering.
3
+ *
4
+ * The agent terminal mounts plugin views by id from the `@elizaos/tui` terminal
5
+ * registry. This makes the contacts `viewType: "tui"` declaration render for
6
+ * real in the terminal (the unified {@link ContactsSpatialView}) rather than
7
+ * only navigating a GUI shell. A module-level snapshot lets a host push live
8
+ * address-book data; on a non-Android agent it defaults to an empty list.
9
+ */
10
+ import { type ContactsSnapshot } from "./components/ContactsSpatialView.tsx";
11
+ /** Update the snapshot the registered terminal view renders from. */
12
+ export declare function setContactsTerminalSnapshot(next: ContactsSnapshot): void;
13
+ /** Register the contacts terminal view; returns an unregister function. */
14
+ export declare function registerContactsTerminalView(): () => void;
15
+ //# sourceMappingURL=register-terminal-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-terminal-view.d.ts","sourceRoot":"","sources":["../src/register-terminal-view.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,sCAAsC,CAAC;AAK9C,qEAAqE;AACrE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAExE;AAED,2EAA2E;AAC3E,wBAAgB,4BAA4B,IAAI,MAAM,IAAI,CAIzD"}
@@ -0,0 +1,21 @@
1
+ import { registerSpatialTerminalView } from "@elizaos/ui/spatial/tui";
2
+ import { createElement } from "react";
3
+ import {
4
+ ContactsSpatialView
5
+ } from "./components/ContactsSpatialView.js";
6
+ const EMPTY = { contacts: [], query: "", mode: "list" };
7
+ let current = EMPTY;
8
+ function setContactsTerminalSnapshot(next) {
9
+ current = next;
10
+ }
11
+ function registerContactsTerminalView() {
12
+ return registerSpatialTerminalView(
13
+ "contacts",
14
+ () => createElement(ContactsSpatialView, { snapshot: current })
15
+ );
16
+ }
17
+ export {
18
+ registerContactsTerminalView,
19
+ setContactsTerminalSnapshot
20
+ };
21
+ //# sourceMappingURL=register-terminal-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register-terminal-view.tsx"],"sourcesContent":["/**\n * Register the contacts view for terminal rendering.\n *\n * The agent terminal mounts plugin views by id from the `@elizaos/tui` terminal\n * registry. This makes the contacts `viewType: \"tui\"` declaration render for\n * real in the terminal (the unified {@link ContactsSpatialView}) rather than\n * only navigating a GUI shell. A module-level snapshot lets a host push live\n * address-book data; on a non-Android agent it defaults to an empty list.\n */\n\nimport { registerSpatialTerminalView } from \"@elizaos/ui/spatial/tui\";\nimport { createElement } from \"react\";\nimport {\n type ContactsSnapshot,\n ContactsSpatialView,\n} from \"./components/ContactsSpatialView.js\";\n\nconst EMPTY: ContactsSnapshot = { contacts: [], query: \"\", mode: \"list\" };\nlet current: ContactsSnapshot = EMPTY;\n\n/** Update the snapshot the registered terminal view renders from. */\nexport function setContactsTerminalSnapshot(next: ContactsSnapshot): void {\n current = next;\n}\n\n/** Register the contacts terminal view; returns an unregister function. */\nexport function registerContactsTerminalView(): () => void {\n return registerSpatialTerminalView(\"contacts\", () =>\n createElement(ContactsSpatialView, { snapshot: current }),\n );\n}\n"],"mappings":"AAUA,SAAS,mCAAmC;AAC5C,SAAS,qBAAqB;AAC9B;AAAA,EAEE;AAAA,OACK;AAEP,MAAM,QAA0B,EAAE,UAAU,CAAC,GAAG,OAAO,IAAI,MAAM,OAAO;AACxE,IAAI,UAA4B;AAGzB,SAAS,4BAA4B,MAA8B;AACxE,YAAU;AACZ;AAGO,SAAS,+BAA2C;AACzD,SAAO;AAAA,IAA4B;AAAA,IAAY,MAC7C,cAAc,qBAAqB,EAAE,UAAU,QAAQ,CAAC;AAAA,EAC1D;AACF;","names":[]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Side-effect entry point — registers the Contacts overlay app on ElizaOS only.
3
+ *
4
+ * Stock Android, web, iOS, and desktop leave the apps catalog unchanged so the
5
+ * same import is safe everywhere. Non-ElizaOS callers will simply not see
6
+ * Contacts in the apps catalog. Load this module once during app startup to
7
+ * register the app.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,10 @@
1
+ import { isElizaOS } from "@elizaos/ui";
2
+ import { registerContactsApp } from "./components/contacts-app.js";
3
+ if (isElizaOS()) {
4
+ registerContactsApp();
5
+ }
6
+ if (typeof window === "undefined") {
7
+ void import("./register-terminal-view.js").then((m) => m.registerContactsTerminalView()).catch(() => {
8
+ });
9
+ }
10
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register.ts"],"sourcesContent":["/**\n * Side-effect entry point — registers the Contacts overlay app on ElizaOS only.\n *\n * Stock Android, web, iOS, and desktop leave the apps catalog unchanged so the\n * same import is safe everywhere. Non-ElizaOS callers will simply not see\n * Contacts in the apps catalog. Load this module once during app startup to\n * register the app.\n */\n\nimport { isElizaOS } from \"@elizaos/ui\";\nimport { registerContactsApp } from \"./components/contacts-app.js\";\n\nif (isElizaOS()) {\n registerContactsApp();\n}\n\n// In a terminal host (the Node agent, no DOM), register the contacts view so it\n// renders inline in the terminal. Lazy + DOM-guarded so the terminal engine\n// stays out of browser/mobile bundles.\nif (typeof window === \"undefined\") {\n void import(\"./register-terminal-view.js\")\n .then((m) => m.registerContactsTerminalView())\n .catch(() => {\n // Terminal rendering is best-effort; never block plugin load.\n });\n}\n"],"mappings":"AASA,SAAS,iBAAiB;AAC1B,SAAS,2BAA2B;AAEpC,IAAI,UAAU,GAAG;AACf,sBAAoB;AACtB;AAKA,IAAI,OAAO,WAAW,aAAa;AACjC,OAAK,OAAO,6BAA6B,EACtC,KAAK,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAC5C,MAAM,MAAM;AAAA,EAEb,CAAC;AACL;","names":[]}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { ContactsAppView } from "./components/ContactsAppView.tsx";
2
+ export { ContactsView } from "./components/ContactsView.tsx";
3
+ export { CONTACTS_APP_NAME, contactsApp, registerContactsApp, } from "./components/contacts-app.ts";
4
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,GACpB,MAAM,8BAA8B,CAAC"}
package/dist/ui.js ADDED
@@ -0,0 +1,15 @@
1
+ import { ContactsAppView } from "./components/ContactsAppView.js";
2
+ import { ContactsView } from "./components/ContactsView.js";
3
+ import {
4
+ CONTACTS_APP_NAME,
5
+ contactsApp,
6
+ registerContactsApp
7
+ } from "./components/contacts-app.js";
8
+ export {
9
+ CONTACTS_APP_NAME,
10
+ ContactsAppView,
11
+ ContactsView,
12
+ contactsApp,
13
+ registerContactsApp
14
+ };
15
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui.ts"],"sourcesContent":["export { ContactsAppView } from \"./components/ContactsAppView.js\";\nexport { ContactsView } from \"./components/ContactsView.js\";\nexport {\n CONTACTS_APP_NAME,\n contactsApp,\n registerContactsApp,\n} from \"./components/contacts-app.js\";\n"],"mappings":"AAAA,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}