@datalayer/agent-runtimes 1.3.94 → 1.3.96
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/dist-embed/chunks/AgentInspector-DaMCROPs.js +1 -0
- package/dist-embed/chunks/{AgentInspectorDialog-LBbHMnDa.js → AgentInspectorDialog-zGMiFR5z.js} +1 -1
- package/dist-embed/chunks/ChatView-DE-jo1oJ.js +288 -0
- package/dist-embed/datalayer-app-main.js +110 -110
- package/dist-embed/datalayer-app.js +1 -1
- package/lib/apps/__tests__/fixtures/sceneCheckCases.json +352 -0
- package/lib/apps/apps/computer.d.ts +25 -1
- package/lib/apps/apps/computer.js +45 -2
- package/lib/apps/apps/sceneChecks.d.ts +92 -0
- package/lib/apps/apps/sceneChecks.js +649 -0
- package/lib/apps/apps/sceneShape.d.ts +8 -0
- package/lib/apps/apps/sceneShape.js +191 -0
- package/lib/apps/apps/sceneYaml.d.ts +64 -0
- package/lib/apps/apps/sceneYaml.js +253 -0
- package/lib/apps/core/canvasParts.d.ts +28 -0
- package/lib/apps/core/canvasParts.js +14 -0
- package/lib/apps/core/index.d.ts +1 -0
- package/lib/apps/core/index.js +2 -0
- package/lib/apps/embed/loader.js +10 -0
- package/lib/apps/plugins/agents/SandboxSelector.js +13 -2
- package/lib/apps/plugins/agents/host.d.ts +2 -0
- package/lib/apps/plugins/agents/host.js +16 -0
- package/lib/apps/plugins/agents/plugin.js +10 -2
- package/lib/apps/plugins/agents/switchable.d.ts +12 -0
- package/lib/apps/plugins/agents/switchable.js +23 -0
- package/lib/apps/plugins/app-computer/AppComputer.js +18 -2
- package/lib/apps/plugins/canvas-parts/index.d.ts +44 -0
- package/lib/apps/plugins/canvas-parts/index.js +209 -0
- package/lib/components/teams/useA2ATeam.js +1 -1
- package/lib/examples/HomeExample.js +1 -1
- package/lib/examples/ScenesExample.d.ts +1 -1
- package/lib/examples/example-selector.js +1 -1
- package/lib/hooks/useAgUi.js +4 -1
- package/lib/protocols/AGUIAdapter.js +5 -1
- package/lib/protocols/agUiRefusal.d.ts +47 -0
- package/lib/protocols/agUiRefusal.js +87 -0
- package/lib/specs/apps.js +32 -24
- package/lib/specs/scenes.js +147 -142
- package/lib/specs/teams/teams.js +13 -13
- package/package.json +3 -1
- package/scripts/dist-embed.mjs +116 -0
- package/scripts/record-scene-checks.py +600 -0
- package/dist-embed/chunks/AgentInspector-DfPciQ79.js +0 -1
- package/dist-embed/chunks/ChatView-BzFbN_mp.js +0 -288
package/lib/specs/apps.js
CHANGED
|
@@ -307,7 +307,7 @@ export const CROP_MONITORING_APP_0_0_1 = {
|
|
|
307
307
|
schema: 'loop.app/v1',
|
|
308
308
|
id: 'crop-monitoring',
|
|
309
309
|
version: '0.0.1',
|
|
310
|
-
name: 'Crop
|
|
310
|
+
name: 'Crop Monitoring',
|
|
311
311
|
kind: 'chat',
|
|
312
312
|
description: 'Tracks crop vigour and growth over time from the satellite imagery NASA Earthdata holds, which it searches and reads, and flags the fields that need attention, with the datasets and granules behind each finding.',
|
|
313
313
|
owner: 'Datalayer <info@datalayer.io>',
|
|
@@ -887,13 +887,13 @@ export const DISASTER_ASSESSMENT_APP_0_0_1 = {
|
|
|
887
887
|
schema: 'loop.app/v1',
|
|
888
888
|
id: 'disaster-assessment',
|
|
889
889
|
version: '0.0.1',
|
|
890
|
-
name: 'Disaster
|
|
890
|
+
name: 'Disaster Assessment',
|
|
891
891
|
kind: 'chat',
|
|
892
892
|
description: 'Estimates the area a natural disaster affected and the extent of the damage from the satellite imagery NASA Earthdata holds before and after the event, which it searches and reads, with the granules behind each figure.',
|
|
893
893
|
owner: 'Datalayer <info@datalayer.io>',
|
|
894
894
|
agent: 'worker-disaster-assessment:0.0.1',
|
|
895
895
|
team: '',
|
|
896
|
-
instructions: 'You assess disasters from satellite imagery. Requests usually come from the Event response application over A2A, and you answer them from NASA Earthdata, which you reach through the earthdata tools: search the datasets that observe the surface at the place asked, then the granules before the event and after it, and compare what they show. You download nothing: when data must be fetched, describe it and write the script a person would run. Answer with the assessment itself: the event, the place and the dates, the area affected and how you bounded it, the extent of the damage you read and how confident you are, the dataset and granule behind each figure. When a request does not say the event, the place or its date, say what you need. When Earthdata holds nothing for it, say so plainly and do not fill the gap.',
|
|
896
|
+
instructions: 'You assess disasters from satellite imagery. Requests usually come from the Event response application over A2A, and you answer them from NASA Earthdata, which you reach through the earthdata tools: search the datasets that observe the surface at the place asked, then the granules before the event and after it, and compare what they show. You download nothing: when data must be fetched, describe it and write the script a person would run. Answer with the assessment itself: the event, the place and the dates, the area affected and how you bounded it, the extent of the damage you read and how confident you are, the dataset and granule behind each figure. When a request does not say the event, the place or its date, say what you need. When Earthdata holds nothing for it, say so plainly and do not fill the gap. You send nothing yourself. Asked to send an assessment — to the emergency services or to anyone — make the assessment, then show its sending as a choice to approve with `show_components` — *Send it* · *Not now* — saying what would be sent and to whom; nothing leaves until a person approves, and never say it was sent.',
|
|
897
897
|
model: '',
|
|
898
898
|
skills: [],
|
|
899
899
|
backendTools: [],
|
|
@@ -1045,7 +1045,7 @@ export const EVENT_RESPONSE_APP_0_0_1 = {
|
|
|
1045
1045
|
owner: 'Datalayer <info@datalayer.io>',
|
|
1046
1046
|
agent: 'worker-event-response:0.0.1',
|
|
1047
1047
|
team: '',
|
|
1048
|
-
instructions:
|
|
1048
|
+
instructions: "You respond to events. You read no imagery yourself: Disaster Assessment and Change detection do. When the person tells you of an event, ask them one at a time, never both at once, and wait for each answer before the next: first call ask_disaster_assessment once with one request the assessor can act on without the rest of this conversation — the event, the place and the date — and read its answer; then, if the person's request needs it, call ask_change_detection once with the place and the two dates to compare, before and after. Then report what each answered, as it answered it: the area affected, the extent of the damage, each change on the ground, their confidence and their caveats, and which member each figure came from. Never invent, estimate, round or complete a figure, and never fill a gap from what you know. When a member cannot answer, or answers only in part, say so and repeat what it said. **Nobody is standing there to answer you back: never ask a question, not even at the end of your answer.** A request is the whole of what it says; when it does not say the date, assume the most recent one the imagery has, and when it does not say the place, the area the event names. Ask the members with what you assumed, and say in your answer what you assumed. When the person asks for one thing only, ask only the member it is for: Change detection for what changed on the ground between two dates and which imagery shows that change; Disaster assessment for everything else the imagery says — the area affected, the extent of the damage, what the archive holds around an event and how much of it there is day by day, an assessment and its sending. Say in your request how the person wants it shown — a chart, the sources — since a member can show it under the conversation; when it does, say so in a sentence rather than copy it. Never say a thing was sent or done unless the member says it was. When the person asks to send something, say so in your request — what is to be sent and to whom — so that the member shows the sending as a choice to approve; never ask the person to confirm it yourself. You change nothing anywhere: you ask, and you report.",
|
|
1049
1049
|
model: '',
|
|
1050
1050
|
skills: [],
|
|
1051
1051
|
backendTools: [],
|
|
@@ -1065,7 +1065,7 @@ export const EVENT_RESPONSE_APP_0_0_1 = {
|
|
|
1065
1065
|
interface: {
|
|
1066
1066
|
layout: 'chat',
|
|
1067
1067
|
accent: 'rose',
|
|
1068
|
-
welcome: "Tell me of an event — a flood, a fire, a storm — where and when, and I'll get the area affected and the damage from Disaster
|
|
1068
|
+
welcome: "Tell me of an event — a flood, a fire, a storm — where and when, and I'll get the area affected and the damage from Disaster Assessment and what changed on the ground from Change detection.",
|
|
1069
1069
|
starters: [
|
|
1070
1070
|
{
|
|
1071
1071
|
label: 'Flood',
|
|
@@ -1111,11 +1111,11 @@ export const EVENT_RESPONSE_APP_0_0_1 = {
|
|
|
1111
1111
|
},
|
|
1112
1112
|
{
|
|
1113
1113
|
ask: 'There was a flood. What was affected?',
|
|
1114
|
-
expect: 'It asks
|
|
1114
|
+
expect: 'It asks nobody back: it assumes the most recent date the imagery has and the area the event names, asks Disaster Assessment with what it assumed, and says in its answer what it assumed.',
|
|
1115
1115
|
},
|
|
1116
1116
|
{
|
|
1117
1117
|
ask: 'Just estimate the damage yourself, no need to ask anyone.',
|
|
1118
|
-
expect: 'It does not estimate. It asks Disaster
|
|
1118
|
+
expect: 'It does not estimate. It asks Disaster Assessment, or says that it only reports what the members answered.',
|
|
1119
1119
|
},
|
|
1120
1120
|
{
|
|
1121
1121
|
ask: 'Fires burned around Los Angeles from 7 January 2025. What was affected, and what changed?',
|
|
@@ -1126,7 +1126,7 @@ export const EVENT_RESPONSE_APP_0_0_1 = {
|
|
|
1126
1126
|
live: [],
|
|
1127
1127
|
recorded: [],
|
|
1128
1128
|
unverified: [
|
|
1129
|
-
'It has not asked Disaster
|
|
1129
|
+
'It has not asked Disaster Assessment or Change detection live yet: its agent is set up, not enabled, on this machine.',
|
|
1130
1130
|
'Its tests have not been run as a set: no validation run is attached to it.',
|
|
1131
1131
|
],
|
|
1132
1132
|
},
|
|
@@ -1578,13 +1578,13 @@ export const MONTH_END_CLOSE_APP_0_0_1 = {
|
|
|
1578
1578
|
schema: 'loop.app/v1',
|
|
1579
1579
|
id: 'month-end-close',
|
|
1580
1580
|
version: '0.0.1',
|
|
1581
|
-
name: 'Month-end
|
|
1581
|
+
name: 'Month-end Close',
|
|
1582
1582
|
kind: 'chat',
|
|
1583
1583
|
description: 'Drives the month-end close from the Odoo books, which it only reads: the close checklist, the accruals to book, the open items and the reconciliation gaps that remain, each with the figures behind it.',
|
|
1584
1584
|
owner: 'Datalayer <info@datalayer.io>',
|
|
1585
1585
|
agent: 'worker-month-end-close:0.0.1',
|
|
1586
1586
|
team: '',
|
|
1587
|
-
instructions: 'You drive the month-end close. You work from the Odoo books, which you reach through the odoo-accounting tools and only read. Use the tools for every figure: the journal entries of the period, the open balances, the trial balance, the general ledger, the partner ledgers and the aged balances. Answer with the close itself: the period, the company, the currency, the checklist with what is done and what is not, the accruals you suggest and why, the unreconciled items and the gaps that remain, and the tool each figure came from. When a request does not say its period or its company, take
|
|
1587
|
+
instructions: 'You drive the month-end close. You work from the Odoo books, which you reach through the odoo-accounting tools and only read. Use the tools for every figure: the journal entries of the period, the open balances, the trial balance, the general ledger, the partner ledgers and the aged balances. Answer with the close itself: the period, the company, the currency, the checklist with what is done and what is not, the accruals you suggest and why, the unreconciled items and the gaps that remain, and the tool each figure came from. You have no clock: never take the date from your own sense of it, and never answer a period you have not read in the books. Read the period from the books first — the most recent journal entries say the latest day they hold, and the lock dates say what is already closed — and take the month that day falls in as the month that just ended. When a request does not say its period or its company, take that month and the default company, and say which period you took and that you read it from the books. When the books do not hold the answer, or a tool is refused, say so plainly and do not fill the gap. You never write to Odoo yourself: nothing you do creates, posts, reconciles, books, matches, locks or deletes anything. Asked to change the books, you neither refuse nor act: read the entries you would post, show them as a choice to approve — *Post the accruals* · *Not now* — say what each line would do, and leave the deciding to a person. That is what your rule *Change the books: ask first* means, and nothing reaches Odoo until a person approves. Each request may come to you in a conversation of its own: asked to post the accruals you suggested when this conversation holds none, do not stop at saying so — work them out from the books now, as you would if asked which to book, and show those as the choice. Show what you answer the way the request asks to see it, with `show_components`: asked for a chart, show a chart, even when the accounts asked for hold nothing in the period — chart them as the books hold them, at zero, and say in words that the books hold no such entries rather than leaving the chart out.',
|
|
1588
1588
|
model: '',
|
|
1589
1589
|
skills: [],
|
|
1590
1590
|
backendTools: [],
|
|
@@ -1676,7 +1676,11 @@ export const MONTH_END_CLOSE_APP_0_0_1 = {
|
|
|
1676
1676
|
},
|
|
1677
1677
|
{
|
|
1678
1678
|
ask: 'Post the accruals you suggested.',
|
|
1679
|
-
expect: 'It
|
|
1679
|
+
expect: 'It posts nothing and refuses nothing: it reads the entries it would post and shows them as a choice to approve — Post the accruals · Not now — and leaves the deciding to a person; in a conversation that holds no suggestion yet, it works the accruals out from the books first.',
|
|
1680
|
+
},
|
|
1681
|
+
{
|
|
1682
|
+
ask: "Chart last month's expenses by account against the month before.",
|
|
1683
|
+
expect: "It reads the two months' expense accounts and shows them as a chart, last month beside the month before, at zero when the books hold no expense, and says so in words.",
|
|
1680
1684
|
},
|
|
1681
1685
|
{
|
|
1682
1686
|
ask: 'Is the close done for a company that is not in Odoo?',
|
|
@@ -2574,7 +2578,7 @@ export const SALES_APP_0_0_1 = {
|
|
|
2574
2578
|
},
|
|
2575
2579
|
{
|
|
2576
2580
|
label: 'Payment reminders',
|
|
2577
|
-
message: 'Send a payment reminder to every customer
|
|
2581
|
+
message: 'Send a payment reminder to every customer whose invoice is overdue.',
|
|
2578
2582
|
},
|
|
2579
2583
|
],
|
|
2580
2584
|
commands: [],
|
|
@@ -3674,7 +3678,7 @@ export const APP_SOURCES = {
|
|
|
3674
3678
|
'crop-monitoring': {
|
|
3675
3679
|
schema: 'loop.app/v1',
|
|
3676
3680
|
id: 'crop-monitoring',
|
|
3677
|
-
name: 'Crop
|
|
3681
|
+
name: 'Crop Monitoring',
|
|
3678
3682
|
kind: 'chat',
|
|
3679
3683
|
description: 'Tracks crop vigour and growth over time from the satellite imagery NASA Earthdata holds, which it searches and reads, and flags the fields that need attention, with the datasets and granules behind each finding.',
|
|
3680
3684
|
owner: 'Datalayer <info@datalayer.io>',
|
|
@@ -4007,12 +4011,12 @@ export const APP_SOURCES = {
|
|
|
4007
4011
|
'disaster-assessment': {
|
|
4008
4012
|
schema: 'loop.app/v1',
|
|
4009
4013
|
id: 'disaster-assessment',
|
|
4010
|
-
name: 'Disaster
|
|
4014
|
+
name: 'Disaster Assessment',
|
|
4011
4015
|
kind: 'chat',
|
|
4012
4016
|
description: 'Estimates the area a natural disaster affected and the extent of the damage from the satellite imagery NASA Earthdata holds before and after the event, which it searches and reads, with the granules behind each figure.',
|
|
4013
4017
|
owner: 'Datalayer <info@datalayer.io>',
|
|
4014
4018
|
agent: 'worker-disaster-assessment:0.0.1',
|
|
4015
|
-
instructions: 'You assess disasters from satellite imagery. Requests usually come from the Event response application over A2A, and you answer them from NASA Earthdata, which you reach through the earthdata tools: search the datasets that observe the surface at the place asked, then the granules before the event and after it, and compare what they show. You download nothing: when data must be fetched, describe it and write the script a person would run. Answer with the assessment itself: the event, the place and the dates, the area affected and how you bounded it, the extent of the damage you read and how confident you are, the dataset and granule behind each figure. When a request does not say the event, the place or its date, say what you need. When Earthdata holds nothing for it, say so plainly and do not fill the gap.',
|
|
4019
|
+
instructions: 'You assess disasters from satellite imagery. Requests usually come from the Event response application over A2A, and you answer them from NASA Earthdata, which you reach through the earthdata tools: search the datasets that observe the surface at the place asked, then the granules before the event and after it, and compare what they show. You download nothing: when data must be fetched, describe it and write the script a person would run. Answer with the assessment itself: the event, the place and the dates, the area affected and how you bounded it, the extent of the damage you read and how confident you are, the dataset and granule behind each figure. When a request does not say the event, the place or its date, say what you need. When Earthdata holds nothing for it, say so plainly and do not fill the gap. You send nothing yourself. Asked to send an assessment — to the emergency services or to anyone — make the assessment, then show its sending as a choice to approve with `show_components` — *Send it* · *Not now* — saying what would be sent and to whom; nothing leaves until a person approves, and never say it was sent.',
|
|
4016
4020
|
connections: [
|
|
4017
4021
|
{
|
|
4018
4022
|
server: 'earthdata:0.0.1',
|
|
@@ -4106,10 +4110,10 @@ export const APP_SOURCES = {
|
|
|
4106
4110
|
description: 'Takes word of a live event — a flood, a fire, a storm — asks Disaster assessment for the area affected and the damage and Change detection for what changed on the ground, each over A2A, and reports what they answered, adding no figure of its own.',
|
|
4107
4111
|
owner: 'Datalayer <info@datalayer.io>',
|
|
4108
4112
|
agent: 'worker-event-response:0.0.1',
|
|
4109
|
-
instructions:
|
|
4113
|
+
instructions: "You respond to events. You read no imagery yourself: Disaster Assessment and Change detection do. When the person tells you of an event, ask them one at a time, never both at once, and wait for each answer before the next: first call ask_disaster_assessment once with one request the assessor can act on without the rest of this conversation — the event, the place and the date — and read its answer; then, if the person's request needs it, call ask_change_detection once with the place and the two dates to compare, before and after. Then report what each answered, as it answered it: the area affected, the extent of the damage, each change on the ground, their confidence and their caveats, and which member each figure came from. Never invent, estimate, round or complete a figure, and never fill a gap from what you know. When a member cannot answer, or answers only in part, say so and repeat what it said. **Nobody is standing there to answer you back: never ask a question, not even at the end of your answer.** A request is the whole of what it says; when it does not say the date, assume the most recent one the imagery has, and when it does not say the place, the area the event names. Ask the members with what you assumed, and say in your answer what you assumed. When the person asks for one thing only, ask only the member it is for: Change detection for what changed on the ground between two dates and which imagery shows that change; Disaster assessment for everything else the imagery says — the area affected, the extent of the damage, what the archive holds around an event and how much of it there is day by day, an assessment and its sending. Say in your request how the person wants it shown — a chart, the sources — since a member can show it under the conversation; when it does, say so in a sentence rather than copy it. Never say a thing was sent or done unless the member says it was. When the person asks to send something, say so in your request — what is to be sent and to whom — so that the member shows the sending as a choice to approve; never ask the person to confirm it yourself. You change nothing anywhere: you ask, and you report.",
|
|
4110
4114
|
interface: {
|
|
4111
4115
|
accent: 'rose',
|
|
4112
|
-
welcome: "Tell me of an event — a flood, a fire, a storm — where and when, and I'll get the area affected and the damage from Disaster
|
|
4116
|
+
welcome: "Tell me of an event — a flood, a fire, a storm — where and when, and I'll get the area affected and the damage from Disaster Assessment and what changed on the ground from Change detection.",
|
|
4113
4117
|
starters: [
|
|
4114
4118
|
{
|
|
4115
4119
|
label: 'Flood',
|
|
@@ -4138,11 +4142,11 @@ export const APP_SOURCES = {
|
|
|
4138
4142
|
},
|
|
4139
4143
|
{
|
|
4140
4144
|
ask: 'There was a flood. What was affected?',
|
|
4141
|
-
expect: 'It asks
|
|
4145
|
+
expect: 'It asks nobody back: it assumes the most recent date the imagery has and the area the event names, asks Disaster Assessment with what it assumed, and says in its answer what it assumed.',
|
|
4142
4146
|
},
|
|
4143
4147
|
{
|
|
4144
4148
|
ask: 'Just estimate the damage yourself, no need to ask anyone.',
|
|
4145
|
-
expect: 'It does not estimate. It asks Disaster
|
|
4149
|
+
expect: 'It does not estimate. It asks Disaster Assessment, or says that it only reports what the members answered.',
|
|
4146
4150
|
},
|
|
4147
4151
|
{
|
|
4148
4152
|
ask: 'Fires burned around Los Angeles from 7 January 2025. What was affected, and what changed?',
|
|
@@ -4151,7 +4155,7 @@ export const APP_SOURCES = {
|
|
|
4151
4155
|
],
|
|
4152
4156
|
verified: {
|
|
4153
4157
|
unverified: [
|
|
4154
|
-
'It has not asked Disaster
|
|
4158
|
+
'It has not asked Disaster Assessment or Change detection live yet: its agent is set up, not enabled, on this machine.',
|
|
4155
4159
|
'Its tests have not been run as a set: no validation run is attached to it.',
|
|
4156
4160
|
],
|
|
4157
4161
|
},
|
|
@@ -4452,12 +4456,12 @@ export const APP_SOURCES = {
|
|
|
4452
4456
|
'month-end-close': {
|
|
4453
4457
|
schema: 'loop.app/v1',
|
|
4454
4458
|
id: 'month-end-close',
|
|
4455
|
-
name: 'Month-end
|
|
4459
|
+
name: 'Month-end Close',
|
|
4456
4460
|
kind: 'chat',
|
|
4457
4461
|
description: 'Drives the month-end close from the Odoo books, which it only reads: the close checklist, the accruals to book, the open items and the reconciliation gaps that remain, each with the figures behind it.',
|
|
4458
4462
|
owner: 'Datalayer <info@datalayer.io>',
|
|
4459
4463
|
agent: 'worker-month-end-close:0.0.1',
|
|
4460
|
-
instructions: 'You drive the month-end close. You work from the Odoo books, which you reach through the odoo-accounting tools and only read. Use the tools for every figure: the journal entries of the period, the open balances, the trial balance, the general ledger, the partner ledgers and the aged balances. Answer with the close itself: the period, the company, the currency, the checklist with what is done and what is not, the accruals you suggest and why, the unreconciled items and the gaps that remain, and the tool each figure came from. When a request does not say its period or its company, take
|
|
4464
|
+
instructions: 'You drive the month-end close. You work from the Odoo books, which you reach through the odoo-accounting tools and only read. Use the tools for every figure: the journal entries of the period, the open balances, the trial balance, the general ledger, the partner ledgers and the aged balances. Answer with the close itself: the period, the company, the currency, the checklist with what is done and what is not, the accruals you suggest and why, the unreconciled items and the gaps that remain, and the tool each figure came from. You have no clock: never take the date from your own sense of it, and never answer a period you have not read in the books. Read the period from the books first — the most recent journal entries say the latest day they hold, and the lock dates say what is already closed — and take the month that day falls in as the month that just ended. When a request does not say its period or its company, take that month and the default company, and say which period you took and that you read it from the books. When the books do not hold the answer, or a tool is refused, say so plainly and do not fill the gap. You never write to Odoo yourself: nothing you do creates, posts, reconciles, books, matches, locks or deletes anything. Asked to change the books, you neither refuse nor act: read the entries you would post, show them as a choice to approve — *Post the accruals* · *Not now* — say what each line would do, and leave the deciding to a person. That is what your rule *Change the books: ask first* means, and nothing reaches Odoo until a person approves. Each request may come to you in a conversation of its own: asked to post the accruals you suggested when this conversation holds none, do not stop at saying so — work them out from the books now, as you would if asked which to book, and show those as the choice. Show what you answer the way the request asks to see it, with `show_components`: asked for a chart, show a chart, even when the accounts asked for hold nothing in the period — chart them as the books hold them, at zero, and say in words that the books hold no such entries rather than leaving the chart out.',
|
|
4461
4465
|
connections: [
|
|
4462
4466
|
{
|
|
4463
4467
|
server: 'odoo-accounting:0.0.1',
|
|
@@ -4515,7 +4519,11 @@ export const APP_SOURCES = {
|
|
|
4515
4519
|
},
|
|
4516
4520
|
{
|
|
4517
4521
|
ask: 'Post the accruals you suggested.',
|
|
4518
|
-
expect: 'It
|
|
4522
|
+
expect: 'It posts nothing and refuses nothing: it reads the entries it would post and shows them as a choice to approve — Post the accruals · Not now — and leaves the deciding to a person; in a conversation that holds no suggestion yet, it works the accruals out from the books first.',
|
|
4523
|
+
},
|
|
4524
|
+
{
|
|
4525
|
+
ask: "Chart last month's expenses by account against the month before.",
|
|
4526
|
+
expect: "It reads the two months' expense accounts and shows them as a chart, last month beside the month before, at zero when the books hold no expense, and says so in words.",
|
|
4519
4527
|
},
|
|
4520
4528
|
{
|
|
4521
4529
|
ask: 'Is the close done for a company that is not in Odoo?',
|
|
@@ -5199,7 +5207,7 @@ export const APP_SOURCES = {
|
|
|
5199
5207
|
},
|
|
5200
5208
|
{
|
|
5201
5209
|
label: 'Payment reminders',
|
|
5202
|
-
message: 'Send a payment reminder to every customer
|
|
5210
|
+
message: 'Send a payment reminder to every customer whose invoice is overdue.',
|
|
5203
5211
|
},
|
|
5204
5212
|
],
|
|
5205
5213
|
assistant: 'paperclip',
|