@openengio/cli 0.24.3 → 0.24.4

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.
@@ -1057,7 +1057,7 @@ var CLIENT_SCOPES = Object.freeze({
1057
1057
  offline_access: Object.freeze({ capabilities: Object.freeze([]), consentLine: "Stay connected when you are away, until you disconnect it." })
1058
1058
  });
1059
1059
 
1060
- // packages/sdk-core/dist/explain.js
1060
+ // packages/sdk-dispatch/dist/explain.js
1061
1061
  function explainKind(kind) {
1062
1062
  if (!Object.hasOwn(BY_KIND, kind)) {
1063
1063
  throw new Error(`the refusal kind ${JSON.stringify(kind)} has no entry in the refusal catalogue`);
@@ -1137,10 +1137,10 @@ function unauthenticatedEnvelope() {
1137
1137
  return { version: PROTOCOL_VERSION, refusal: explainedRefusalOf({ kind: "unauthenticated" }), correlationId: null };
1138
1138
  }
1139
1139
 
1140
- // packages/sdk-core/dist/socket-transport.js
1140
+ // packages/sdk-dispatch/dist/socket-transport.js
1141
1141
  import { request } from "node:http";
1142
1142
 
1143
- // packages/sdk-core/dist/response.js
1143
+ // packages/sdk-dispatch/dist/response.js
1144
1144
  function responseOf(status, text, reason) {
1145
1145
  let read = false;
1146
1146
  const members = {
@@ -1170,7 +1170,7 @@ function responseOf(status, text, reason) {
1170
1170
  });
1171
1171
  }
1172
1172
 
1173
- // packages/sdk-core/dist/socket-transport.js
1173
+ // packages/sdk-dispatch/dist/socket-transport.js
1174
1174
  var REQUEST_DEADLINE_MS = 1e4;
1175
1175
  var HostOutcomeUnknown = class extends Error {
1176
1176
  path;
@@ -1465,7 +1465,7 @@ function createHostStreamFetch(socketPath, headDeadlineMs = REQUEST_DEADLINE_MS)
1465
1465
  };
1466
1466
  }
1467
1467
 
1468
- // packages/sdk-core/dist/call.js
1468
+ // packages/sdk-dispatch/dist/call.js
1469
1469
  function isEnvelope(value) {
1470
1470
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
1471
1471
  return false;
@@ -1570,7 +1570,7 @@ async function* callStreamed(transport, origin, route2, body, token, signal) {
1570
1570
  }
1571
1571
  }
1572
1572
 
1573
- // packages/sdk-core/dist/module-factory.js
1573
+ // packages/sdk-dispatch/dist/module-factory.js
1574
1574
  function freezeDoc(doc2) {
1575
1575
  return Object.freeze({ does: doc2.does, refuses: Object.freeze([...doc2.refuses]) });
1576
1576
  }
@@ -1607,7 +1607,7 @@ function createModuleFactory(entries6, transport, origin, token) {
1607
1607
  return Object.freeze(Object.fromEntries(Object.entries(byCapability).map(([capability, methods]) => [capability, Object.freeze(methods)])));
1608
1608
  }
1609
1609
 
1610
- // packages/sdk-core/dist/typed-client.js
1610
+ // packages/sdk-dispatch/dist/typed-client.js
1611
1611
  function createTypedClient(names, entries6, transport, origin, token) {
1612
1612
  const factory = createModuleFactory(entries6, transport, origin, token);
1613
1613
  const byName = new Map(entries6.map((entry2) => [entry2.name, entry2]));
@@ -1626,7 +1626,7 @@ function createTypedClient(names, entries6, transport, origin, token) {
1626
1626
  return Object.freeze(client);
1627
1627
  }
1628
1628
 
1629
- // packages/sdk-core/dist/https-transport.js
1629
+ // packages/sdk-dispatch/dist/https-transport.js
1630
1630
  import { request as request2 } from "node:https";
1631
1631
  function createHttpsTransport(origin, options = {}, deadlineMs = REQUEST_DEADLINE_MS) {
1632
1632
  const originUrl = new URL(origin);
@@ -1698,7 +1698,7 @@ function createHttpsTransport(origin, options = {}, deadlineMs = REQUEST_DEADLIN
1698
1698
  };
1699
1699
  }
1700
1700
 
1701
- // packages/sdk-core/dist/token-routes.js
1701
+ // packages/sdk-dispatch/dist/token-routes.js
1702
1702
  async function redeem(transport, origin, body) {
1703
1703
  return call(transport, origin, "redeem", body, null, null);
1704
1704
  }
@@ -8531,7 +8531,7 @@ var typesIcons = {
8531
8531
  }
8532
8532
  };
8533
8533
 
8534
- // packages/demo-seed/dist/definition.js
8534
+ // packages/demo-player/dist/definition.js
8535
8535
  var STRING = { kind: "string" };
8536
8536
  var NUMBER = { kind: "number" };
8537
8537
  var PERSON = { kind: "person" };
@@ -8846,7 +8846,7 @@ function worldSteps(size, ownerPersonId, data) {
8846
8846
  }
8847
8847
  var DEMO_TYPE_VERSION = 1;
8848
8848
 
8849
- // packages/demo-seed/dist/ocgt-world.js
8849
+ // packages/demo-player/dist/ocgt-world.js
8850
8850
  var SYSTEM_TREE = [
8851
8851
  { identifier: "OCGT", name: "Open Cycle Gas Turbine Plant", parent: null },
8852
8852
  { identifier: "GT", name: "Gas Turbine", parent: "OCGT" },
@@ -9071,7 +9071,7 @@ var OCGT_WORLD = {
9071
9071
  })
9072
9072
  };
9073
9073
 
9074
- // packages/demo-seed/dist/player.js
9074
+ // packages/demo-player/dist/player.js
9075
9075
  var TRUNK_REF = "main";
9076
9076
  var IDEMPOTENCY_PREFIX = "demo-seed";
9077
9077
  var DemoRouteRefusedError = class extends Error {
@@ -10912,7 +10912,7 @@ var CLI_OPTIONS = {
10912
10912
  };
10913
10913
 
10914
10914
  // packages/cli/src/cli-version.ts
10915
- var PATCH_VERSION = 3;
10915
+ var PATCH_VERSION = 4;
10916
10916
  var CLI_VERSION = `0.${PROTOCOL_VERSION}.${PATCH_VERSION}`;
10917
10917
 
10918
10918
  // packages/cli/src/environment.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openengio/cli",
3
- "version": "0.24.3",
3
+ "version": "0.24.4",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "engines": {
@@ -1,112 +1,139 @@
1
1
  ---
2
2
  name: demo
3
- description: Use when a person new to OpenEngineering wants a hands-on tour, or has just signed in and has no task of their own yet. Builds a small example with them on a familiar workflow (requirements, product lifecycle, project tracking) or their own, optionally connects Onshape or a small local OAuth app, alternating your configuration with links and actions they take in the app.
3
+ description: Use when a person new to OpenEngineering wants a hands-on tour, or has just signed in and has no task of their own yet. Offers the example plant seed, a free-form capability tour around their workflow, or a task they name.
4
4
  ---
5
5
 
6
6
  # Give a person a tour of OpenEngineering
7
7
 
8
- The aim is one outcome the person cares about, experienced in the app with their own hands. Covering
9
- features is not the aim: a tour is done when they have seen that outcome and know how to carry on.
10
- Ask at most two questions at a time. Do not turn routine commands into permission questions.
11
-
12
- ## 1. Offer the tour once
13
-
14
- After sign-in, when the person has no task of their own, offer once: "I can set up a small example
15
- around your work, then we can explore it together in the app." They may accept, decline, or go to
16
- their own task. An accepted tour covers work inside a demo organisation. It does not cover inviting
17
- anyone, connecting an external account (Onshape), registering an app, or touching an existing
18
- organisation's data: ask before each of those.
19
-
20
- ## 2. Learn what matters to them
21
-
22
- Ask about their work first: "What do you design or manage, and where does the work get hard today?"
23
-
24
- Then anchor the tour on a workflow they will recognise, and offer two or three that fit what they said,
25
- each with one line on why:
26
- - a requirements platform in the style of Jama or DOORS: requirements, their decomposition, and the
27
- verification that proves them (`openeng skill playbook engineering-requirements`);
28
- - a product lifecycle platform in the style of Arena or Windchill: parts, revisions, the bill of
29
- materials, and changes that are requested, approved and released (`openeng skill playbook
30
- product-lifecycle`);
31
- - a project and work tracker (`openeng skill playbook project-management`).
32
-
33
- Say plainly that they can go smaller, or ask for something entirely their own, and follow that when
34
- they do. Then refine the chosen one in their terms: who is involved, what starts the work, what they
35
- need to see, and what a good result looks like. Use their names for things inside the familiar shape.
36
- If they would rather look around a fuller example before building their own, build a slightly larger
37
- one from the chosen playbook first, and say which data is invented.
38
-
39
- ## 3. Agree a small story
40
-
41
- Propose a short flow with a visible result, for example: "We make the controller and its thermal
42
- requirement, record a failed test, then propose a fix on a branch for review." Keep it to two or three
43
- types, a handful of objects, one relationship that shows structure, and one change that shows a
44
- branch and a review. Create a new organisation for the tour (`openeng org create`) unless they ask to
45
- use an existing one. Say which data is invented.
46
-
47
- Design the types with `openeng skill new-use-case`, and keep its stop points. Read `openeng skill
48
- conventions` before you choose relationships: structure (one parent) is not navigation (declared
49
- relationships), and the difference shows in their tree.
50
-
51
- ## 4. Build in small steps, each with something to see
52
-
53
- For each step:
54
- 1. Say in their words what you will do next and why.
55
- 2. Make the smallest useful change with `openeng`. Use one atomic batch for related writes.
56
- 3. Read the result back in the organisation, project and ref you meant. Validate before you publish.
57
- Keep apart: accepted, validated, published, and seen rendered in the app.
58
- 4. Give a link from `openeng link` at once. Say what they should see there, and any limit of that page.
59
- 5. Invite one action that matters: edit a value, comment, subscribe, compare a branch with main, or
60
- accept a proposal if their role allows it. Say what to do and what you will check afterwards.
61
- 6. Check the result with a read, not with their click. Then use their reaction to choose the next step.
62
-
63
- Leave a state on screen until they have had a chance to see it. If they say a step is dull or already
64
- clear, move on.
65
-
66
- ## 5. Make it usable in the app
67
-
68
- Choose readable names and a distinct icon per type from the supported set. Build object views and
69
- apps with `openeng skill build-ui` and the component catalogue it names; do not guess components or
70
- bindings. A view is worth building when it serves the story; most tours need none.
71
-
72
- ## 6. Connect their tools, when it serves the story
73
-
74
- Two extensions show that the platform is open. Offer each one when it fits; ask before starting either.
75
-
76
- **Onshape, if they use it.** Ask whether they have an Onshape account and which document, team or
77
- company they would like to mirror. Create a connector with `openeng connector create`. The person enters
78
- their Onshape key pair themselves at the prompt of `openeng connector set-credential`: never ask for a key
79
- in the conversation, never accept one pasted there, and never type one. Agree the import scope before
80
- `openeng connector run`, then read `openeng connector runs` and show what arrived. Mirrored objects are owned by
81
- the connector and are not edited here; trace them into the story with links. If a run imports nothing,
82
- say what was looked for and ask them to check the scope.
83
-
84
- **A small app of their own, using OAuth.** Offer to build a tiny local web app that signs in to
85
- OpenEngineering and reads their data, for example a dashboard of failed tests. Register it as a public
86
- client of their organisation with `openeng admin-sdk registerClient` (read `openeng help admin-sdk
87
- registerClient` first), using a `http://127.0.0.1:<port>/callback` redirect. The app uses the
88
- authorization-code flow with PKCE against the issuer the help names, so the person signs in and
89
- consents on OpenEngineering's own page; the app never sees their password. Keep it read-only unless
90
- they ask for more, run it on their machine, and give them the local link. Read the platform's published
91
- client contract before you write the app; do not guess the request shape.
92
-
93
- ## 7. When something goes wrong
94
-
95
- Read the refusal and fix the input. When the help does not say enough, make a minimal example, record
96
- the exact command and answer, and ask the person; do not guess in a loop. When an outcome is unknown,
97
- read the state before you write again. Never claim to have contacted the OpenEngineering team.
98
-
99
- ## 8. End on the outcome
100
-
101
- Recap what they saw, with the links to come back to, and one or two next steps for their own work. Say
102
- what remains in the demo organisation: types, objects, branches, proposals and drafts, and any
103
- connector or registered client, which they can revoke (`openeng connector revoke`). Agree before
104
- deleting anything. Do not imply that a short tour proves every feature or permission.
8
+ ## 1. Offer three paths
9
+
10
+ After sign-in, when the person has no task of their own, offer once:
11
+
12
+ - **Seed demo**: create a project, run `openeng demo seed --project <id>`, then follow the
13
+ [Quickstart](https://docs.openeng.io/get-started/quickstart/) together.
14
+ - **Free-form tour** (the main path): build a small example around their work and explore its
15
+ capabilities together in the app.
16
+ - **Something else**: follow the task the person names. They may decline the tour.
17
+
18
+ Before the tour starts, load every capability below into your own native task or plan tool,
19
+ whatever your harness provides: one item per capability, its Checklist line as the title and its
20
+ Features shown line as the detail. Show the person the list and say they may skip any item.
21
+ Run one item at a time. Tick it only when the person has seen its result in the app and you have
22
+ checked that result with a read. Drop a declined item from the remaining work and mark it skipped,
23
+ never done. If you have no task or plan tool, write the same checklist in the conversation and
24
+ show each item's state again whenever it changes.
25
+
26
+ Offer C1, C3 and C5 first, then the others by the person's interest. Use the chosen playbook or
27
+ the example plant for the stories. All capabilities below are shipped. Leave per-field conflicts
28
+ out of every story.
29
+
30
+ - [ ] C1. Describe your workflow, and use the tool five minutes later
31
+ Checklist: Build a working tool from a description of the person's workflow.
32
+ Features shown: Organisations and projects; Familiar workflow playbooks; Types and the ontology;
33
+ Ontology agent; Rail groups and type icons; Objects; Table of one type; The object card.
34
+
35
+ - [ ] C2. One data model, two ways of working: a CRUD app or a branch-first engineering workflow
36
+ Checklist: Switch one project between direct edits on `main` and branch-only edits.
37
+ Features shown: Objects; Branches; Branch diff and changed-object accents; Proposals; Roles and
38
+ membership; Ref rules.
39
+
40
+ - [ ] C3. Follow one question across every tool
41
+ Checklist: Answer one question that crosses requirements, parts and tests.
42
+ Features shown: Relationships; Structure tree; Graph and Explore; Paths between two objects;
43
+ Counts and rollups; The object card.
44
+
45
+ - [ ] C4. Every record carries its own story
46
+ Checklist: Show who changed a record, why, and what a delete would take with it.
47
+ Features shown: The object card; Object history with per-field attribution; Comments and
48
+ subscribers; Delete preview; Branch history and the audit trail.
49
+
50
+ - [ ] C5. An agent does the work, a person makes the call
51
+ Checklist: Have the in-product agent make a change that a person approves and merges.
52
+ Features shown: Branches; Branch diff and changed-object accents; Proposals; Branch history and
53
+ the audit trail; Object agent; Agent model per organisation; Agent ceiling.
54
+
55
+ - [ ] C6. Freeze what shipped, keep building what comes next
56
+ Checklist: Freeze a released part and keep a read-only release baseline.
57
+ Features shown: Types and the ontology; Objects; Relationships; Organisation refs; Instance
58
+ locks; Type rules.
59
+
60
+ - [ ] C7. Your CAD system stays the source of truth
61
+ Checklist: Mirror Onshape parts and link a requirement to one of them.
62
+ Features shown: Types and the ontology; Relationships; Service identities; Onshape mirror; Type
63
+ rules.
64
+
65
+ - [ ] C8. Build on it: a screen for each team, and your own app
66
+ Checklist: Build a team page from configuration, then a small OAuth app on the same data.
67
+ Features shown: Counts and rollups; Object views and App views; Apps with several pages; Roles
68
+ and membership; OAuth apps.
69
+
70
+ ## 2. Agree the workflow and keep its stop points
71
+
72
+ Ask what the person designs or manages and where the work gets hard. Offer a fitting playbook:
73
+ `openeng skill playbook engineering-requirements`, `product-lifecycle` or `project-management`,
74
+ or use their own vocabulary. Agree a small story with a visible result. Create a demo organisation
75
+ with `openeng org create` unless asked to use an existing one; say which data is invented.
76
+ Ask before touching existing data, inviting anyone, connecting Onshape or registering an app.
77
+ Ask at most two questions at a time; do not turn routine commands into permission questions.
78
+
79
+ Whenever the tour designs types, read `openeng skill new-use-case` and follow every stop point
80
+ in order: show the person the work and wait for agreement at each one. Do not skip a stop point
81
+ to speed up the tour. Read `openeng skill conventions` before choosing relationships, properties,
82
+ icons and rail groups. Draft nothing before new-use-case's drafting step; accept a change set
83
+ only on the person's word naming it.
84
+
85
+ ## 3. Show one story at a time
86
+
87
+ Use `openeng help <module> <route>` for request shapes. Each story answers a question the person
88
+ cares about; do not explain a primitive in isolation.
89
+
90
+ - C1: agree and publish types from the chosen playbook, write believable data with
91
+ `objects-sdk mutateBatch`, then show the rail, table and object card with `link type`.
92
+ - C2: edit on main, add a merge-only rule, show the same edit refused `protected`, then branch,
93
+ edit, compare and submit a proposal. The person merges; remove the rule and show direct edits.
94
+ - C3: narrow with `objects-sdk readStructure`, show `link explore`, and answer a question
95
+ across requirements, parts and tests with `queryObjects`, `findPaths` and `aggregateObjects`.
96
+ - C4: open a record's history, comment and subscribe; use `objects-sdk previewDelete` before
97
+ any deletion, and read branch history and `admin-sdk listAudit`.
98
+ - C5: show the organisation's agent model and project's `ceiling show`. The person uses
99
+ "Open agent", approves its plan, inspects the branch diff, submits and merges. Read the audit
100
+ naming the person and run; show the agent refused on protected main.
101
+ - C6: use `locks set --lock frozen` on a released part, show an edit refused, create its successor
102
+ and relationship, and keep a baseline with `org-refs create --read-only`. Show an immutable
103
+ test result refusing changes on a branch too.
104
+ - C7: for an Onshape user, agree the import scope; use `connector create`, `set-credential`,
105
+ `draft-types`, publish agreed types, `run` and `runs`. Link a requirement to a mirrored part,
106
+ show it cannot be edited here, and show a repeat import preserves the requirement.
107
+ - C8: read `openeng skill build-ui` and its component catalogue, publish a team page through
108
+ the App draft workflow, and show `link app`. Offer a small local OAuth app reading the same
109
+ data; show consent and how to disconnect it.
110
+
111
+ At each step, say what comes next and why, make the smallest useful change (one atomic batch
112
+ for related writes), validate before publishing, and read the result in the intended organisation,
113
+ project and ref. Give a link from `openeng link`, say what they should see, and leave time to see it.
114
+ Invite an action that matters, then check its result with a read. Keep accepted, validated,
115
+ published and seen in the app distinct. Drive through the CLI; the person operates the app.
116
+
117
+ The person enters Onshape keys themselves at `openeng connector set-credential`'s prompt;
118
+ never ask for keys in conversation or type them. Mirrored objects are owned by the connector.
119
+ For OAuth, read the published client contract and `openeng help admin-sdk registerClient`.
120
+ Register a public client with a `http://127.0.0.1:<port>/callback` redirect; use authorization code
121
+ with PKCE. Keep the local app read-only unless asked for more; it never sees their password.
122
+
123
+ ## 4. Handle refusals and finish
124
+
125
+ Read a refusal and fix the input. If help is insufficient, record one minimal command and answer
126
+ and ask the person; do not guess in a loop. For an unknown outcome, read state before writing again.
127
+ Never claim to have contacted the OpenEngineering team.
128
+
129
+ Recap completed and skipped tasks, return links and next steps. Say what remains: types, objects,
130
+ branches, proposals, drafts and any connector or registered client, and how to revoke the connector
131
+ (`openeng connector revoke`) or disconnect the app. Agree before deleting anything.
132
+ Do not imply a short tour proves every feature or permission.
105
133
 
106
134
  ## Dogfood mode (only when the person asks for feedback capture)
107
135
 
108
- The OpenEngineering team uses this mode to test the product. Record each friction as it happens, with
109
- the command, the answer and your confidence, classed as: your own omission, a help gap, an observed
110
- defect, a user-reported issue, a feature request, or an open question. Merge later corrections into
111
- earlier entries. At the end, hand over one file: the findings grouped, with evidence, a proposed
112
- priority and the open questions, kept apart from the recap. Never send feedback anywhere yourself.
136
+ Record friction as it happens: command, answer, confidence, and whether it is your omission, a help
137
+ gap, an observed defect, a user-reported issue, a feature request or an open question. Merge later
138
+ corrections into earlier entries. Hand over one file with evidence, proposed priorities and open
139
+ questions, separate from the recap. Never send feedback anywhere yourself.