@lotics/cli 0.316.27 → 0.317.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/AGENTS.md +1 -1
- package/dist/src/cli.js +111 -54
- package/docs/agent_surface.md +5 -3
- package/docs/building_an_app.md +4 -3
- package/docs/design.md +13 -9
- package/docs/document_templates.md +6 -0
- package/docs/examples.md +659 -678
- package/docs/first_build.md +21 -24
- package/docs/getting_started.md +1 -0
- package/package.json +1 -1
package/docs/agent_surface.md
CHANGED
|
@@ -11,9 +11,9 @@ reach them, over MCP and as `lotics run <tool>`:
|
|
|
11
11
|
| `run_app_workflow` | One write — or several in order — or a dry run of it that writes nothing |
|
|
12
12
|
|
|
13
13
|
An app generates this surface from its tree; Query and Workflow nodes declare what the screen never
|
|
14
|
-
asks (§ Declaring more). An app's
|
|
15
|
-
Lists and its Acts are queries and workflows of the same app, named by
|
|
16
|
-
are by its own — `get_app` lists them in the one roster, and nothing of a
|
|
14
|
+
asks (§ Declaring more). An app's further root Lists (which a change may add at any time) are part of it: such a List's list, its rows by id, its page's
|
|
15
|
+
Lists and its Acts are queries and workflows of the same app, named by that List's table as the register's
|
|
16
|
+
are by its own — `get_app` lists them in the one roster, and nothing of a further List is another app's. What only a further List reads or runs answers the organization's own members alone, never a caller through the app's public link. A custom-code app's surface is the queries and workflows bound on it
|
|
17
17
|
(`app_bindings`).
|
|
18
18
|
|
|
19
19
|
## Finding what an app offers
|
|
@@ -82,6 +82,8 @@ the screen already holds.
|
|
|
82
82
|
| `<entity>_count_by_<scope>` | How many <entity> rows each <scope entity> holds. | | an app stating `scope` |
|
|
83
83
|
| `<task>_progress_by_<link>` | How many <task> rows each <entity> row handed in holds, at each status. | `<entity>_ids` | rows whose task rows are counted done |
|
|
84
84
|
| `<rows>_measured_by_<link>` | The share of each <entity> row handed in its <rows> rows add, day by day. | `<entity>_ids` | a Progress node stating `measured` |
|
|
85
|
+
| `<entity>_sub_counts_by_<link>` | How many <entity> rows stand under each <entity> row handed in, through <link>, at each status. | `<entity>_ids` | a record's rows block over a hierarchy (`nests`), for the rows it draws |
|
|
86
|
+
| `<entity>_plan_places` | Every <place> the <entity> rows stand at, with what the plan draws of each. | | a register laid out as a `plan`: the places its rows stand at |
|
|
85
87
|
| `<lane>_lanes` | The <lane> rows of one <scope entity>, each a lane of the board. | `<scope entity>_id` | a lanes board inside an app stating `scope` |
|
|
86
88
|
| `<entity>_same_<link>` | The <entity> rows naming one "<link>". | `same`; `before` where its line reads rows before a moment | a statement line that carries rows (`parts`) |
|
|
87
89
|
|
package/docs/building_an_app.md
CHANGED
|
@@ -18,7 +18,7 @@ you tried it, stay where they are. Try a write on a throwaway record.
|
|
|
18
18
|
|
|
19
19
|
- **An app stated as a tree** — the default, and the right one for almost every job. The tree (a
|
|
20
20
|
JSON file, one per app) is a List of one table, whose rows are recognised by the
|
|
21
|
-
table's own `records`, and the
|
|
21
|
+
table's own `records`, and the page its rows open (`pages`), with the further Lists that stand beside it at the root (which a change may add at any time, each a register of its own, shown to the organization's own members alone): its columns and filters, its Sections in the order its work
|
|
22
22
|
reaches them, its Acts and the Checks that guard them (`lotics docs reference/app-tree`,
|
|
23
23
|
`reference/list-node`, `reference/section-node`, `reference/act-node`, `reference/check-node`). The platform
|
|
24
24
|
compiles each app and draws it with the runtime every such app shares, so how each piece looks is
|
|
@@ -116,9 +116,10 @@ carry your edits over. Applying a tree the app already has mints nothing.
|
|
|
116
116
|
write would grant and remove, writing nothing. Every write's answer states those permissions: the saves, adds,
|
|
117
117
|
Deletes and act writes the new tree grants and removes, from the previous tree to the new one.
|
|
118
118
|
|
|
119
|
-
**
|
|
119
|
+
**What the tree leaves out is drawn, never stored.** The answer shows a treatment the rows call for that the tree leaves out —
|
|
120
120
|
Readings over its rows, a record's Sections, an Act per status move, a picture where its rows hold photos
|
|
121
|
-
(`lotics docs design`) — and the tree states the ones the job needs.
|
|
121
|
+
(`lotics docs design`) — and the tree states the ones the job needs. What it states with one fix, the write places
|
|
122
|
+
and says (`lotics docs reference/changing-an-app`); edit only the difference.
|
|
122
123
|
|
|
123
124
|
**The tree changes after the app exists, and applying it again is how it lands.** Pull the tree, edit
|
|
124
125
|
the file, apply it; or send `nodes` for one part. An Act whose write the tree cannot say names its own `workflow`; that workflow's code is
|
package/docs/design.md
CHANGED
|
@@ -29,7 +29,7 @@ author: state the ones the job needs. A note refuses nothing.
|
|
|
29
29
|
| Booked on a resource | List `layout: {"lanes": {"by": …}}`, and the table's `no_overlap` | `reference/lanes`, `reference/write-rules` |
|
|
30
30
|
| A log of what happened | a child List with `layout: "timeline"` | `reference/layouts` |
|
|
31
31
|
| Opened to be worked on | the Record's Sections, in the order the work reaches them — `at` where it moves in steps; fields only one kind of row holds (a delay's cause, a safety issue's hours lost) in a Section whose `when` names that kind | `reference/section-node` |
|
|
32
|
-
| Rows that each belong to another row | a child List on that row's Record, with `create` and `remove` — and a child's own rows a List in that child
|
|
32
|
+
| Rows that each belong to another row | a child List on that row's Record, with `create` and `remove` — and a child's own rows a List in that child's page, as deep as the data goes; a List with `same` or `app` where read-only, for rows another app works | `reference/list-node` |
|
|
33
33
|
| A related row's value on the list (the newest contract's end date) | a `lookup` field of the table, ordered, as a column | `reference/lookup` |
|
|
34
34
|
| Moving through a status | an Act per move, `status.dates` for the moment of each stage, and the register's Readings | `reference/act-node`, `reference/status`, `reference/reading-node` |
|
|
35
35
|
| Counted over a period | the register's Tabs over one `period`; a Tab's `totals` for a child's sums before, during and through it; an open Tab's `where` reads only what was true at the period's end, never a status the row moves on from | `reference/tab-node` |
|
|
@@ -90,15 +90,17 @@ lands them on its not-found.
|
|
|
90
90
|
### Rows in time
|
|
91
91
|
|
|
92
92
|
Rows that each stand on a day, or hold a run of days or hours, are read where they stand in time — never
|
|
93
|
-
as two date columns. A row holds a span when
|
|
94
|
-
`
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
as two date columns. A row holds a span when two dates a person states are ordered, the second after the first by a
|
|
94
|
+
`min` or a table check, both required or the second the row's `due`; else it is an appointment when one required date
|
|
95
|
+
is stated that no Act stamps, that a new row does not start at `today` and that is not derived. A stamp is an event,
|
|
96
|
+
and a `due` is a deadline, never the day a row is held on. A `no_overlap` by a person or a value alone keeps one row at
|
|
97
|
+
a time each — a member's periods in turn — read by what they hold.
|
|
97
98
|
|
|
98
99
|
#### Calendar
|
|
99
100
|
|
|
100
|
-
`layout: "calendar"
|
|
101
|
-
hour where
|
|
101
|
+
`layout: "calendar"`, or `{ "calendar": { "date": "starts_at", "end": "ends_at" } }`: the rows by their day — a
|
|
102
|
+
month, a week, a day or a list; an entry at its hour where `date` holds one, over its span where `end` names the date it
|
|
103
|
+
runs to. The bare word takes both from the rows' facts and is refused, naming `date`, where they name none. An entry pressed opens a card on
|
|
102
104
|
it: the row, Delete, its Acts, Reschedule (the day alone moves; its hour and its length stay) and Open. Worked:
|
|
103
105
|
`examples/calendar`.
|
|
104
106
|
|
|
@@ -107,14 +109,16 @@ it: the row, Delete, its Acts, Reschedule (the day alone moves; its hour and its
|
|
|
107
109
|
`layout: {"lanes": {"by": …}}` with `by` naming a one-row link whose target's rows are the lanes (a chair, a
|
|
108
110
|
machine, a room), each drawn even when empty: every row a block from the first date on its line to the
|
|
109
111
|
second, and a free stretch adds a row there. `loads` reads what a lane carries against what it holds. A
|
|
110
|
-
`no_overlap` `by` the same link refuses two rows on one resource at once.
|
|
112
|
+
`no_overlap` `by` the same link refuses two rows on one resource at once. A lane per person: `by` a member field
|
|
113
|
+
and `of` a role of the model, each member of it a lane, idle ones too. Worked: `examples/lanes`.
|
|
111
114
|
|
|
112
115
|
#### Gantt
|
|
113
116
|
|
|
114
117
|
`layout: {"gantt": {"start": …}}` (and `end`, else the table's first `due`; a `due` is a deadline, never an appointment date): one bar a row over
|
|
115
118
|
its run of days — a shipment, a hire, a task of a project — read against today. `milestones` marks
|
|
116
119
|
dates on the bar, `planned` the plan under it, `progress` how far it is done, `after` the rows it waits on;
|
|
117
|
-
the List's `group` is its lanes
|
|
120
|
+
the List's `group` is its lanes; a table holding rows under rows nests each bar under its row above, folded as the
|
|
121
|
+
register's outline is. A child List on a record with this layout draws the bars of the rows its link names. Worked: `examples/gantt`.
|
|
118
122
|
|
|
119
123
|
#### Roster
|
|
120
124
|
|
|
@@ -186,6 +186,12 @@ figure adds it, any other cell (blank, an errored formula, a lookup's list) adds
|
|
|
186
186
|
reader (`"me"`) is refused, and so is a name a rows List and a `list` List both reach: give the `list` a `key`. A record
|
|
187
187
|
bound narrows what is listed and is never an access bound; the table's row rules are.
|
|
188
188
|
|
|
189
|
+
A List that reads by a path (`via: "<link>.<link>"`) hands its rows the same way. A List the screen draws as an outline (a record's own
|
|
190
|
+
sub-rows, in a table whose rows nest, with no `where`, total, group, long-text column or other narrowing) hands every sub-row, depth first, each after the row it is filed under and its
|
|
191
|
+
siblings in the List's order, with its depth as `level` (1 for the rows filed under the record): `{{#each tasks}}{{level}} {{name}}{{/each}}`.
|
|
192
|
+
A paper that lists an outline whose table has a field named `level` is refused. A link arrives as the titles of its rows, so an html or Word loop over one that prints a
|
|
193
|
+
field of each item is refused, naming the key a List hands those rows under: loop over that key. A Word template is read for this when it is next saved.
|
|
194
|
+
|
|
189
195
|
A paper over many rows (a client's month, a statement) is that: a record of the period whose List is windowed by its dates, made by the Act's `template`; or a List `Export` with `template` and `per` (`reference/export-node`).
|
|
190
196
|
`reference/groups-and-templates` has the rest.
|
|
191
197
|
|