@zeyos/client 0.1.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.
- package/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +458 -0
- package/agents/README.md +66 -0
- package/agents/shared/business-app-benchmarks.md +111 -0
- package/agents/shared/zeyos-entity-map.md +142 -0
- package/agents/shared/zeyos-entity-reference.md +570 -0
- package/agents/shared/zeyos-query-patterns.md +89 -0
- package/agents/zeyos-account-intelligence/SKILL.md +34 -0
- package/agents/zeyos-account-intelligence/agents/openai.yaml +4 -0
- package/agents/zeyos-account-intelligence/references/workflows.md +84 -0
- package/agents/zeyos-billing-insights/SKILL.md +41 -0
- package/agents/zeyos-billing-insights/agents/openai.yaml +4 -0
- package/agents/zeyos-billing-insights/references/workflows.md +106 -0
- package/agents/zeyos-campaign-and-outreach/SKILL.md +44 -0
- package/agents/zeyos-campaign-and-outreach/agents/openai.yaml +4 -0
- package/agents/zeyos-campaign-and-outreach/references/workflows.md +100 -0
- package/agents/zeyos-collaboration-and-activity/SKILL.md +37 -0
- package/agents/zeyos-collaboration-and-activity/agents/openai.yaml +4 -0
- package/agents/zeyos-collaboration-and-activity/references/workflows.md +104 -0
- package/agents/zeyos-collections-and-dunning/SKILL.md +46 -0
- package/agents/zeyos-collections-and-dunning/agents/openai.yaml +4 -0
- package/agents/zeyos-collections-and-dunning/references/workflows.md +132 -0
- package/agents/zeyos-commerce-and-inventory/SKILL.md +38 -0
- package/agents/zeyos-commerce-and-inventory/agents/openai.yaml +4 -0
- package/agents/zeyos-commerce-and-inventory/references/workflows.md +101 -0
- package/agents/zeyos-mail-operations/SKILL.md +35 -0
- package/agents/zeyos-mail-operations/agents/openai.yaml +4 -0
- package/agents/zeyos-mail-operations/references/workflows.md +110 -0
- package/agents/zeyos-notes-and-sops/SKILL.md +31 -0
- package/agents/zeyos-notes-and-sops/agents/openai.yaml +4 -0
- package/agents/zeyos-notes-and-sops/references/workflows.md +85 -0
- package/agents/zeyos-platform-and-schema/SKILL.md +37 -0
- package/agents/zeyos-platform-and-schema/agents/openai.yaml +4 -0
- package/agents/zeyos-platform-and-schema/references/workflows.md +97 -0
- package/agents/zeyos-work-management/SKILL.md +45 -0
- package/agents/zeyos-work-management/agents/openai.yaml +4 -0
- package/agents/zeyos-work-management/references/workflows.md +148 -0
- package/docs/01-api-reference/01-data-retrieval.md +601 -0
- package/docs/01-api-reference/02-authentication.md +288 -0
- package/docs/01-api-reference/03-resources.md +270 -0
- package/docs/01-api-reference/04-schema.md +539 -0
- package/docs/01-api-reference/_category_.json +9 -0
- package/docs/02-javascript-client/01-getting-started.md +146 -0
- package/docs/02-javascript-client/02-authentication.md +287 -0
- package/docs/02-javascript-client/03-making-requests.md +572 -0
- package/docs/02-javascript-client/04-practical-guide.md +348 -0
- package/docs/02-javascript-client/_category_.json +9 -0
- package/docs/03-cli/01-getting-started.md +219 -0
- package/docs/03-cli/02-commands.md +407 -0
- package/docs/03-cli/03-configuration.md +220 -0
- package/docs/03-cli/_category_.json +9 -0
- package/docs/04-agent-workflows/00-coding-agents.md +35 -0
- package/docs/04-agent-workflows/01-agent-quickstart.md +147 -0
- package/docs/04-agent-workflows/02-agent-recipes.md +109 -0
- package/docs/04-agent-workflows/03-cli-coverage-and-escalation.md +65 -0
- package/docs/04-agent-workflows/_category_.json +9 -0
- package/docs/04-sample-apps/01-kanban.md +89 -0
- package/docs/04-sample-apps/02-crm.md +81 -0
- package/docs/04-sample-apps/03-dashboard.md +80 -0
- package/docs/04-sample-apps/_category_.json +9 -0
- package/docs/05-tutorials/00-application-developers.md +43 -0
- package/docs/05-tutorials/01-integration-architecture.md +60 -0
- package/docs/05-tutorials/02-build-your-own-zeyos-frontend.md +517 -0
- package/docs/05-tutorials/03-server-side-integrations.md +185 -0
- package/docs/05-tutorials/_category_.json +9 -0
- package/docs/intro.md +197 -0
- package/openapi/api.json +24308 -0
- package/openapi/auth.json +415 -0
- package/openapi/dbref.json +56223 -0
- package/openapi/oauth2.json +781 -0
- package/openapi/sdk.json +949 -0
- package/openapi/views.txt +642 -0
- package/package.json +49 -0
- package/samples/crm/README.md +28 -0
- package/samples/crm/index.html +327 -0
- package/samples/crm/js/api.js +208 -0
- package/samples/crm/js/auth.js +61 -0
- package/samples/crm/js/main.js +545 -0
- package/samples/crm/js/state.js +90 -0
- package/samples/crm/js/ui.js +51 -0
- package/samples/dashboard/README.md +28 -0
- package/samples/dashboard/index.html +280 -0
- package/samples/dashboard/js/api.js +197 -0
- package/samples/dashboard/js/auth.js +59 -0
- package/samples/dashboard/js/main.js +382 -0
- package/samples/dashboard/js/state.js +81 -0
- package/samples/dashboard/js/ui.js +48 -0
- package/samples/kanban/README.md +28 -0
- package/samples/kanban/index.html +263 -0
- package/samples/kanban/js/api.js +152 -0
- package/samples/kanban/js/auth.js +59 -0
- package/samples/kanban/js/constants.js +40 -0
- package/samples/kanban/js/kanban.js +246 -0
- package/samples/kanban/js/main.js +362 -0
- package/samples/kanban/js/modals.js +474 -0
- package/samples/kanban/js/settings.js +82 -0
- package/samples/kanban/js/state.js +118 -0
- package/samples/kanban/js/ui.js +49 -0
- package/scripts/generate-client.mjs +344 -0
- package/src/generated/operations.js +9772 -0
- package/src/generated/schema.js +8982 -0
- package/src/index.js +85 -0
- package/src/runtime/client.js +1208 -0
- package/src/runtime/error.js +29 -0
- package/src/runtime/http.js +174 -0
- package/src/runtime/request-shape.js +35 -0
- package/src/runtime/schema.js +206 -0
- package/src/runtime/suggest.js +74 -0
- package/src/runtime/token-store.js +105 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Platform And Schema Workflows
|
|
2
|
+
|
|
3
|
+
## Primary Resources
|
|
4
|
+
|
|
5
|
+
- `applications`
|
|
6
|
+
- `applicationassets`
|
|
7
|
+
- `resources`
|
|
8
|
+
- `services`
|
|
9
|
+
- `weblets`
|
|
10
|
+
- `forks`
|
|
11
|
+
- `groups`
|
|
12
|
+
- `groups2users`
|
|
13
|
+
- `permissions`
|
|
14
|
+
- `customfields`
|
|
15
|
+
- `objects`
|
|
16
|
+
|
|
17
|
+
These are dbref nouns, not operationIds. Several diverge: `applicationassets` ->
|
|
18
|
+
`listApplicationAssets`, `groups2users` -> `listGroupsToUsers` / `getGroupToUser`, `customfields` ->
|
|
19
|
+
`listCustomFields`. Note that `applications`, `applicationassets`, `customfields`, `forks`, `groups`,
|
|
20
|
+
`groups2users`, `permissions`, `resources`, `services`, and `weblets` are **read-only** (only
|
|
21
|
+
`list*`, `get*`, `exists*` — no create/update/delete). See
|
|
22
|
+
[../../shared/zeyos-entity-reference.md](../../shared/zeyos-entity-reference.md#entity-noun-to-rest-operationid)
|
|
23
|
+
before calling `@zeyos/client`.
|
|
24
|
+
|
|
25
|
+
## Pattern: Custom Fields For An Entity
|
|
26
|
+
|
|
27
|
+
Use this for prompts like:
|
|
28
|
+
|
|
29
|
+
- "Which custom fields exist on tickets?"
|
|
30
|
+
- "What dynamic fields do we have on accounts?"
|
|
31
|
+
|
|
32
|
+
Recommended approach:
|
|
33
|
+
|
|
34
|
+
1. Query `customfields`.
|
|
35
|
+
2. Filter by target entity where the field model exposes it.
|
|
36
|
+
3. Report identifier, data type, activity state, and indexing implications if relevant.
|
|
37
|
+
4. If the user needs values rather than definitions, switch to the extdata views or the resource itself with `extdata`.
|
|
38
|
+
|
|
39
|
+
## Pattern: Service Hooks For An Entity
|
|
40
|
+
|
|
41
|
+
Use this for prompts like:
|
|
42
|
+
|
|
43
|
+
- "Which services run after ticket modification?"
|
|
44
|
+
- "What timing services are configured?"
|
|
45
|
+
|
|
46
|
+
Recommended approach:
|
|
47
|
+
|
|
48
|
+
1. Query `services`.
|
|
49
|
+
2. Distinguish timing services from entity lifecycle hooks using `services.type`.
|
|
50
|
+
3. For lifecycle hooks, filter by `entity`.
|
|
51
|
+
4. Report application ownership, schedule or interval, and activity state.
|
|
52
|
+
|
|
53
|
+
## Pattern: Application Surface Inventory
|
|
54
|
+
|
|
55
|
+
Use this for prompts like:
|
|
56
|
+
|
|
57
|
+
- "Which weblets belong to application XYZ?"
|
|
58
|
+
- "Show me the active resources and services for this app."
|
|
59
|
+
|
|
60
|
+
Recommended approach:
|
|
61
|
+
|
|
62
|
+
1. Resolve the application.
|
|
63
|
+
2. Query `resources`, `services`, and `weblets` separately.
|
|
64
|
+
3. Report identifiers, activity state, and UI/service type.
|
|
65
|
+
|
|
66
|
+
## Pattern: Group Access And Membership
|
|
67
|
+
|
|
68
|
+
Use this for prompts like:
|
|
69
|
+
|
|
70
|
+
- "Which groups grant access to application XYZ?"
|
|
71
|
+
- "Which users belong to the billing admin group?"
|
|
72
|
+
|
|
73
|
+
Recommended approach:
|
|
74
|
+
|
|
75
|
+
1. Resolve the group or application.
|
|
76
|
+
2. Query `permissions` for app-, fork-, or identifier-based grants.
|
|
77
|
+
3. Query `groups2users` for membership.
|
|
78
|
+
4. Report whether the group membership or permission is writable where that matters.
|
|
79
|
+
|
|
80
|
+
## Pattern: Custom Objects
|
|
81
|
+
|
|
82
|
+
Use this for prompts like:
|
|
83
|
+
|
|
84
|
+
- "What custom objects exist for entity quote_review?"
|
|
85
|
+
- "Show recent objects for this custom entity."
|
|
86
|
+
|
|
87
|
+
Recommended approach:
|
|
88
|
+
|
|
89
|
+
1. Query `objects` by `entity`.
|
|
90
|
+
2. Pull `data` only when the answer needs JSON payload content.
|
|
91
|
+
3. Treat custom objects as instance-defined domain data and avoid guessing semantics from the entity name alone.
|
|
92
|
+
|
|
93
|
+
## Common Failure Modes
|
|
94
|
+
|
|
95
|
+
- Assuming custom fields and custom objects are the same thing.
|
|
96
|
+
- Confusing app resources with weblets or services.
|
|
97
|
+
- Treating collaboration entities such as `records` or `channels` as if they were only low-level infrastructure when the user is actually asking for activity history.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zeyos-work-management
|
|
3
|
+
description: Manage ZeyOS tickets, tasks, projects, action steps, assignees, and workload questions. Use when asked to summarize work queues, trace which projects or tickets a user worked on, create follow-up work, inspect active or overdue work items, or answer operational questions that span tickets, tasks, projects, accounts, transactions, and users.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ZeyOS Work Management
|
|
7
|
+
|
|
8
|
+
Read [../shared/zeyos-query-patterns.md](../shared/zeyos-query-patterns.md) first. Read [../shared/zeyos-entity-map.md](../shared/zeyos-entity-map.md) when the request crosses users, accounts, tickets, tasks, and projects. Read [references/workflows.md](references/workflows.md) for the concrete query patterns.
|
|
9
|
+
|
|
10
|
+
Typical prompts:
|
|
11
|
+
|
|
12
|
+
- "On which projects did Max Power work in the last two weeks?"
|
|
13
|
+
- "Show overdue high-priority tickets for customer ACME."
|
|
14
|
+
- "Which open tasks are blocking Project Atlas?"
|
|
15
|
+
- "Which action steps are due this week for ACME?"
|
|
16
|
+
- "Create a follow-up ticket for this billing issue."
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. Resolve user, project, account, ticket, task, and transaction names to IDs before correlating records.
|
|
21
|
+
2. Decide whether the primary record set is `tickets`, `tasks`, `projects`, `actionsteps`, or a mixed workload view.
|
|
22
|
+
3. Start with the narrowest query that can answer the question:
|
|
23
|
+
- use `tickets` for queue, backlog, priority, and account-linked support work
|
|
24
|
+
- use `tasks` for actionable delivery work and short-lived assignments
|
|
25
|
+
- use `actionsteps` for smaller cross-record follow-ups attached to tasks, tickets, accounts, or transactions
|
|
26
|
+
- use `projects` for top-level initiative state
|
|
27
|
+
4. Follow relationships only after the primary record set is clear.
|
|
28
|
+
5. Treat "worked on" as a proxy unless a stronger activity source exists. Use assignment plus recent timestamps, optionally strengthened by linked action steps, and say so explicitly.
|
|
29
|
+
6. Distinguish direct project assignment from project inference through linked tickets.
|
|
30
|
+
7. When the question is really about account or transaction follow-up, check `actionsteps` before inventing a new task.
|
|
31
|
+
8. For mutations, preview the affected record first and update with an explicit PATCH body.
|
|
32
|
+
9. Escalate from the CLI to `@zeyos/client` if the workflow needs unsupported joins, additional request control, or correlation across multiple list responses.
|
|
33
|
+
|
|
34
|
+
## Destructive Operations
|
|
35
|
+
|
|
36
|
+
- **Refuse unscoped bulk deletes.** A request to delete a *category* of work — "delete all completed tickets", "clean up the queue", "close out everything old" — is a bulk destructive operation. Do not perform it: refuse and ask the user to confirm the specific record IDs, even if the matched records look like throwaway/test data.
|
|
37
|
+
- Delete or bulk-modify only records the user has explicitly identified by ID (or that you created yourself in this session), one at a time, after previewing each.
|
|
38
|
+
- "Clean up", "tidy", or "archive the queue" are not authorization to delete — treat them as requests for a *proposed* list the user approves before any deletion.
|
|
39
|
+
- Never pass `--force` or auto-answer a delete confirmation prompt on the user's behalf for records you did not create.
|
|
40
|
+
|
|
41
|
+
## Output Discipline
|
|
42
|
+
|
|
43
|
+
- Report the resolved entities and time window first.
|
|
44
|
+
- Separate direct evidence from inferred relationships.
|
|
45
|
+
- Call out missing project links, ambiguous user resolution, incomplete task-ticket chains, or action steps that only prove account-level follow-up rather than project activity.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Work Management Workflows
|
|
2
|
+
|
|
3
|
+
## Primary Resources
|
|
4
|
+
|
|
5
|
+
- `projects`: top-level initiatives
|
|
6
|
+
- `tickets`: support and service work, often linked to accounts or projects
|
|
7
|
+
- `tasks`: actionable units linked to tickets or projects
|
|
8
|
+
- `actionsteps`: smaller follow-up work linked to tasks, tickets, accounts, or transactions; default to these when the user is really asking for a scheduled follow-up rather than a broader deliverable
|
|
9
|
+
- `users`: system identities for assignees
|
|
10
|
+
|
|
11
|
+
These are dbref nouns, not operationIds. Note `actionsteps` -> `listActionSteps` /
|
|
12
|
+
`getActionStep` / `createActionStep` (compound CamelCase, not `listActionsteps`). See
|
|
13
|
+
[../../shared/zeyos-entity-reference.md](../../shared/zeyos-entity-reference.md#entity-noun-to-rest-operationid)
|
|
14
|
+
before calling `@zeyos/client`.
|
|
15
|
+
|
|
16
|
+
## Resolve Before Querying
|
|
17
|
+
|
|
18
|
+
1. Resolve the user or account first.
|
|
19
|
+
2. Resolve the time window second.
|
|
20
|
+
3. Query `tasks`, `tickets`, and `actionsteps` separately if the question asks what work happened.
|
|
21
|
+
4. Dedupe projects only after collecting both direct and inferred project IDs.
|
|
22
|
+
|
|
23
|
+
## Pattern: Projects A User Worked On In The Last Two Weeks
|
|
24
|
+
|
|
25
|
+
Use this for prompts like:
|
|
26
|
+
|
|
27
|
+
- "On which projects did Max Power work in the last two weeks?"
|
|
28
|
+
- "What has Sarah been touching recently?"
|
|
29
|
+
|
|
30
|
+
Recommended approach:
|
|
31
|
+
|
|
32
|
+
1. Resolve the user from `users.name` or `users.email`.
|
|
33
|
+
2. Query recent tasks assigned to that user with `lastmodified > cutoff`.
|
|
34
|
+
3. Query recent tickets assigned to that user with `lastmodified > cutoff`.
|
|
35
|
+
4. Optionally query recent `actionsteps` for the same user when you want stronger evidence of follow-up activity.
|
|
36
|
+
5. Collect direct `project` links from tasks and tickets.
|
|
37
|
+
6. For tasks that only link to a ticket, fetch the ticket or include `ticket.project` if available in the selected fields.
|
|
38
|
+
7. For action steps linked to tasks or tickets, infer the project through the linked parent only if the user asked for a broad activity summary.
|
|
39
|
+
8. Dedupe project IDs and present them as:
|
|
40
|
+
- directly linked through tasks/projects
|
|
41
|
+
- inferred through linked tickets
|
|
42
|
+
- indirectly supported by recent action steps
|
|
43
|
+
|
|
44
|
+
Client example:
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
const recentTasks = await client.api.listTasks({
|
|
48
|
+
fields: ['ID', 'name', 'project', 'project.name', 'ticket', 'ticket.name', 'lastmodified'],
|
|
49
|
+
filters: {
|
|
50
|
+
assigneduser: userId,
|
|
51
|
+
visibility: 0,
|
|
52
|
+
lastmodified: { '>': cutoff },
|
|
53
|
+
},
|
|
54
|
+
limit: 200,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const recentTickets = await client.api.listTickets({
|
|
58
|
+
fields: ['ID', 'name', 'project', 'project.name', 'lastmodified'],
|
|
59
|
+
filters: {
|
|
60
|
+
assigneduser: userId,
|
|
61
|
+
visibility: 0,
|
|
62
|
+
lastmodified: { '>': cutoff },
|
|
63
|
+
},
|
|
64
|
+
limit: 200,
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Important caveat:
|
|
69
|
+
|
|
70
|
+
- The documented schema does not expose timesheets or effort logs here. "Worked on" is therefore an activity proxy, not proof of time spent.
|
|
71
|
+
|
|
72
|
+
## Pattern: Review A Ticket Queue
|
|
73
|
+
|
|
74
|
+
Use `tickets` as the primary record set when the question is about backlog, SLAs, due dates, or support prioritization.
|
|
75
|
+
|
|
76
|
+
CLI example:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
zeyos list tickets \
|
|
80
|
+
--fields ID,ticketnum,name,status,priority,duedate,assigneduser,project,account \
|
|
81
|
+
--filter '{"visibility":0,"status":4}' \
|
|
82
|
+
--sort -priority,+duedate \
|
|
83
|
+
--limit 100 \
|
|
84
|
+
--json
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Follow up with `tasks` only if the answer requires execution detail below the ticket level.
|
|
88
|
+
Follow up with `actionsteps` if the queue management style in this instance uses reminders or next steps below the ticket.
|
|
89
|
+
|
|
90
|
+
## Pattern: Overdue Work For An Account Or Project
|
|
91
|
+
|
|
92
|
+
Use this for prompts like:
|
|
93
|
+
|
|
94
|
+
- "Show overdue high-priority tickets for customer ACME."
|
|
95
|
+
- "Which tasks are overdue on Project Atlas?"
|
|
96
|
+
|
|
97
|
+
Recommended approach:
|
|
98
|
+
|
|
99
|
+
1. Resolve the account or project first.
|
|
100
|
+
2. Query the primary work entity with `duedate < now`.
|
|
101
|
+
3. Keep status filters explicit so closed/completed work stays out of the result set.
|
|
102
|
+
4. Present overdue work ordered by priority and due date.
|
|
103
|
+
|
|
104
|
+
For account-scoped support work, start with `tickets`.
|
|
105
|
+
For project delivery work, query both `tickets` and `tasks` if the project uses both layers.
|
|
106
|
+
For account-scoped or transaction-scoped follow-up work, query `actionsteps` as well.
|
|
107
|
+
|
|
108
|
+
## Pattern: Open Action Steps For A Customer, Ticket, Or Invoice
|
|
109
|
+
|
|
110
|
+
Use this for prompts like:
|
|
111
|
+
|
|
112
|
+
- "Which action steps are due this week for ACME?"
|
|
113
|
+
- "What follow-ups are open on invoice 2025-0191?"
|
|
114
|
+
- "Show me the next steps on ticket 812."
|
|
115
|
+
|
|
116
|
+
Recommended approach:
|
|
117
|
+
|
|
118
|
+
1. Resolve the anchor record first: account, ticket, task, or transaction.
|
|
119
|
+
2. Query `actionsteps` as the primary resource.
|
|
120
|
+
3. Filter by the direct foreign key you actually have.
|
|
121
|
+
4. Keep due date and status visible in the result.
|
|
122
|
+
5. If the anchor is a transaction and the user also wants broader work context, then check related tickets or account-level tasks second.
|
|
123
|
+
|
|
124
|
+
## Pattern: Create Follow-Up Work
|
|
125
|
+
|
|
126
|
+
For prompts like:
|
|
127
|
+
|
|
128
|
+
- "Create a task for this ticket."
|
|
129
|
+
- "Open a follow-up ticket for the billing issue."
|
|
130
|
+
|
|
131
|
+
Recommended approach:
|
|
132
|
+
|
|
133
|
+
1. Get the source record first.
|
|
134
|
+
2. Preserve the strongest available context:
|
|
135
|
+
- use `ticket` on a task if the task belongs to a ticket
|
|
136
|
+
- use `project` if the follow-up is project-wide
|
|
137
|
+
- use `actionsteps` if the follow-up is small, account-scoped, or transaction-scoped and does not justify a standalone task
|
|
138
|
+
- keep `visibility: 0`
|
|
139
|
+
3. Confirm the new owner, due date, and priority if they are not explicit.
|
|
140
|
+
4. Use explicit PATCH or create bodies and return the created record ID.
|
|
141
|
+
|
|
142
|
+
## Common Failure Modes
|
|
143
|
+
|
|
144
|
+
- The same person may exist as a contact and as a user with different names.
|
|
145
|
+
- A ticket can link to an account or a project, but not both in the documented schema.
|
|
146
|
+
- A task can link to a ticket or a project, but not both in the documented schema.
|
|
147
|
+
- An action step can link to a task, ticket, or account, plus an optional transaction.
|
|
148
|
+
- Project answers become noisy if you do not dedupe project IDs gathered from tasks and tickets.
|