@volter/world 3.0.153 → 3.0.155

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.
@@ -13,7 +13,7 @@ You need Node 22.6+, npm and registry access during installation. The browser pa
13
13
  Copy this starter into a new folder:
14
14
 
15
15
  ```console
16
- $ npx @volter/world@3.0.153 example customer-onboarding --dir onboarding
16
+ $ npx @volter/world@3.0.155 example customer-onboarding --dir onboarding
17
17
  $ cd onboarding
18
18
  $ npm install
19
19
  ```
@@ -11,10 +11,10 @@
11
11
  "pg": "8.16.3"
12
12
  },
13
13
  "devDependencies": {
14
- "@volter/world": "3.0.153",
14
+ "@volter/world": "3.0.155",
15
15
  "@volter/world-core": "3.0.147",
16
- "@volter/world-runtime": "3.0.152",
17
- "@volter/world-console": "3.0.146",
16
+ "@volter/world-runtime": "3.0.153",
17
+ "@volter/world-console": "3.0.147",
18
18
  "@volter/twin-stripe": "3.0.2",
19
19
  "@volter/twin-resend": "1.0.1"
20
20
  }
@@ -30,6 +30,7 @@
30
30
  "operate.mjs",
31
31
  "package.json",
32
32
  "public-files.json",
33
+ "read-slack-mail.mjs",
33
34
  "reset-receipts.mjs",
34
35
  "seed.mjs",
35
36
  "LICENSE"
@@ -13,7 +13,7 @@ Give two workers the same Stripe baseline, let them change different existing cu
13
13
  Use an empty parent folder. Create the baseline starter there:
14
14
 
15
15
  ```console
16
- $ npx @volter/world@3.0.153 example integration-branches --dir baseline
16
+ $ npx @volter/world@3.0.155 example integration-branches --dir baseline
17
17
  $ cd baseline
18
18
  $ npm install
19
19
  $ ./node_modules/.bin/volter world init --name baseline --twins stripe
@@ -38,9 +38,9 @@ The stopped baseline retains its history and can supply local path remotes. Defa
38
38
  Create three more copies in the same parent folder:
39
39
 
40
40
  ```console
41
- $ npx @volter/world@3.0.153 example integration-branches --dir integration
42
- $ npx @volter/world@3.0.153 example integration-branches --dir worker-a
43
- $ npx @volter/world@3.0.153 example integration-branches --dir worker-b
41
+ $ npx @volter/world@3.0.155 example integration-branches --dir integration
42
+ $ npx @volter/world@3.0.155 example integration-branches --dir worker-a
43
+ $ npx @volter/world@3.0.155 example integration-branches --dir worker-b
44
44
  ```
45
45
 
46
46
  In `integration`, then `worker-a`, then `worker-b`, install dependencies and initialize with the folder's name. Before a first boot or app write, link and pull the baseline:
@@ -9,10 +9,10 @@
9
9
  "stripe": "17.7.0"
10
10
  },
11
11
  "devDependencies": {
12
- "@volter/world": "3.0.153",
12
+ "@volter/world": "3.0.155",
13
13
  "@volter/world-core": "3.0.147",
14
- "@volter/world-runtime": "3.0.152",
15
- "@volter/world-console": "3.0.146",
14
+ "@volter/world-runtime": "3.0.153",
15
+ "@volter/world-console": "3.0.147",
16
16
  "@volter/twin-stripe": "3.0.2"
17
17
  }
18
18
  }
@@ -12,8 +12,14 @@ You need Node 22.6+, npm and registry access during installation. No platform ac
12
12
 
13
13
  ## Prepare an ordinary workplace
14
14
 
15
+ This starter pins [GitHub 3.0.9](https://world.volter.ai/twins/github/~40volter~2Ftwin-github/3~2E0~2E9),
16
+ [Linear 3.0.5](https://world.volter.ai/twins/linear/~40volter~2Ftwin-linear/3~2E0~2E5)
17
+ and [Slack 3.0.8](https://world.volter.ai/twins/slack/~40volter~2Ftwin-slack/3~2E0~2E8).
18
+ A catalog page may select a newer default. Keep this example's manifest and installation lock
19
+ together; its recorded workflow does not establish behavior for a different release.
20
+
15
21
  ```console
16
- $ npx @volter/world@3.0.153 example workplace-agent --dir workplace
22
+ $ npx @volter/world@3.0.155 example workplace-agent --dir workplace
17
23
  $ cd workplace
18
24
  $ npm install
19
25
  $ ./node_modules/.bin/volter world init --name workplace --twins github,linear,slack
@@ -82,6 +88,42 @@ The retry uses the recorded ticket and attempts only the notification. An uncert
82
88
 
83
89
  `company.json` and `outcomes/` are application files outside declared World services. They are not branched or reset with vendor history. After explicitly resetting this disposable World, clear only this example's receipts with `node reset-receipts.mjs`, restore the frozen clock, then seed again. Do not reuse receipts from one World with another.
84
90
 
91
+ ## Inspect Slack's local member screen
92
+
93
+ The Slack twin provides workspace administration screens. They are separate from Slack's chat UI;
94
+ read the handoff's ticket and channel messages with `operate.mjs read` as shown above.
95
+
96
+ Stop the running World before starting its viewer. The viewer resumes the retained records and
97
+ keeps running in the background:
98
+
99
+ ```console
100
+ $ ./node_modules/.bin/volter world down
101
+ $ ./node_modules/.bin/volter world view --no-open &
102
+ $ workplace_view_pid=$!
103
+ ```
104
+
105
+ Open the printed console link. Select **Slack** under **Records**, then **Its screens**.
106
+ Choose **Sign in to Slack** and enter the synthetic default owner's address, `owner@world.test`.
107
+ The screen asks for a confirmation code. Read the twin's captured mail in another terminal,
108
+ from this app folder:
109
+
110
+ ```console
111
+ $ ./node_modules/.bin/volter world run -- node read-slack-mail.mjs owner@world.test
112
+ ```
113
+
114
+ [read-slack-mail.mjs](./read-slack-mail.mjs) reads Slack's declared local `/_twin/mail` endpoint.
115
+ Enter the code from the latest message and continue to **Manage members**, where **World Owner**
116
+ appears as the active primary owner. This uses synthetic local identity; no real Slack account or
117
+ email delivery is involved. This walkthrough covers sign-in and the member list, not invitations
118
+ or other administration actions.
119
+
120
+ When finished, stop the viewer you started and retain the workplace:
121
+
122
+ ```console
123
+ $ kill -INT "$workplace_view_pid"
124
+ $ ./node_modules/.bin/volter world down
125
+ ```
126
+
85
127
  ## Create a synthetic GitHub organization
86
128
 
87
129
  Personal repositories use GitHub's ordinary create-repository API. Organization creation is a settings-page operation; this twin provides the declared `POST /_twin/orgs` endpoint for synthetic setup. [create-organization.mjs](./create-organization.mjs) discovers the authenticated account and sends:
@@ -11,12 +11,12 @@
11
11
  "@slack/web-api": "7.19.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@volter/world": "3.0.153",
14
+ "@volter/world": "3.0.155",
15
15
  "@volter/world-core": "3.0.147",
16
- "@volter/world-runtime": "3.0.152",
17
- "@volter/world-console": "3.0.146",
18
- "@volter/twin-github": "3.0.6",
19
- "@volter/twin-linear": "3.0.4",
20
- "@volter/twin-slack": "3.0.5"
16
+ "@volter/world-runtime": "3.0.153",
17
+ "@volter/world-console": "3.0.147",
18
+ "@volter/twin-github": "3.0.9",
19
+ "@volter/twin-linear": "3.0.5",
20
+ "@volter/twin-slack": "3.0.8"
21
21
  }
22
22
  }
@@ -9,6 +9,7 @@
9
9
  "package-lock.json",
10
10
  "package.json",
11
11
  "public-files.json",
12
+ "read-slack-mail.mjs",
12
13
  "reset-receipts.mjs",
13
14
  "seed.mjs"
14
15
  ]
@@ -0,0 +1,8 @@
1
+ const base = process.env.SLACK_TWIN_URL;
2
+ if (!base) throw new Error('Run this reader inside the workplace World.');
3
+ const address = process.argv[2] ?? 'owner@world.test';
4
+ const url = new URL('/_twin/mail', base);
5
+ url.searchParams.set('to', address);
6
+ const response = await fetch(url, { signal: AbortSignal.timeout(2000) });
7
+ if (!response.ok) throw new Error(`Captured Slack mail: HTTP ${response.status}`);
8
+ console.log(JSON.stringify(await response.json(), null, 2));
@@ -13,7 +13,7 @@ You need Node 22.6+, npm and registry access during installation. The browser pa
13
13
  Copy this starter into a new folder:
14
14
 
15
15
  ```console
16
- $ npx @volter/world@3.0.153 example customer-onboarding --dir onboarding
16
+ $ npx @volter/world@3.0.155 example customer-onboarding --dir onboarding
17
17
  $ cd onboarding
18
18
  $ npm install
19
19
  ```
@@ -11,10 +11,10 @@
11
11
  "pg": "8.16.3"
12
12
  },
13
13
  "devDependencies": {
14
- "@volter/world": "3.0.153",
14
+ "@volter/world": "3.0.155",
15
15
  "@volter/world-core": "3.0.147",
16
- "@volter/world-runtime": "3.0.152",
17
- "@volter/world-console": "3.0.146",
16
+ "@volter/world-runtime": "3.0.153",
17
+ "@volter/world-console": "3.0.147",
18
18
  "@volter/twin-stripe": "3.0.2",
19
19
  "@volter/twin-resend": "1.0.1"
20
20
  }
@@ -30,6 +30,7 @@
30
30
  "operate.mjs",
31
31
  "package.json",
32
32
  "public-files.json",
33
+ "read-slack-mail.mjs",
33
34
  "reset-receipts.mjs",
34
35
  "seed.mjs",
35
36
  "LICENSE"
@@ -13,7 +13,7 @@ Give two workers the same Stripe baseline, let them change different existing cu
13
13
  Use an empty parent folder. Create the baseline starter there:
14
14
 
15
15
  ```console
16
- $ npx @volter/world@3.0.153 example integration-branches --dir baseline
16
+ $ npx @volter/world@3.0.155 example integration-branches --dir baseline
17
17
  $ cd baseline
18
18
  $ npm install
19
19
  $ ./node_modules/.bin/volter world init --name baseline --twins stripe
@@ -38,9 +38,9 @@ The stopped baseline retains its history and can supply local path remotes. Defa
38
38
  Create three more copies in the same parent folder:
39
39
 
40
40
  ```console
41
- $ npx @volter/world@3.0.153 example integration-branches --dir integration
42
- $ npx @volter/world@3.0.153 example integration-branches --dir worker-a
43
- $ npx @volter/world@3.0.153 example integration-branches --dir worker-b
41
+ $ npx @volter/world@3.0.155 example integration-branches --dir integration
42
+ $ npx @volter/world@3.0.155 example integration-branches --dir worker-a
43
+ $ npx @volter/world@3.0.155 example integration-branches --dir worker-b
44
44
  ```
45
45
 
46
46
  In `integration`, then `worker-a`, then `worker-b`, install dependencies and initialize with the folder's name. Before a first boot or app write, link and pull the baseline:
@@ -9,10 +9,10 @@
9
9
  "stripe": "17.7.0"
10
10
  },
11
11
  "devDependencies": {
12
- "@volter/world": "3.0.153",
12
+ "@volter/world": "3.0.155",
13
13
  "@volter/world-core": "3.0.147",
14
- "@volter/world-runtime": "3.0.152",
15
- "@volter/world-console": "3.0.146",
14
+ "@volter/world-runtime": "3.0.153",
15
+ "@volter/world-console": "3.0.147",
16
16
  "@volter/twin-stripe": "3.0.2"
17
17
  }
18
18
  }
@@ -12,8 +12,14 @@ You need Node 22.6+, npm and registry access during installation. No platform ac
12
12
 
13
13
  ## Prepare an ordinary workplace
14
14
 
15
+ This starter pins [GitHub 3.0.9](https://world.volter.ai/twins/github/~40volter~2Ftwin-github/3~2E0~2E9),
16
+ [Linear 3.0.5](https://world.volter.ai/twins/linear/~40volter~2Ftwin-linear/3~2E0~2E5)
17
+ and [Slack 3.0.8](https://world.volter.ai/twins/slack/~40volter~2Ftwin-slack/3~2E0~2E8).
18
+ A catalog page may select a newer default. Keep this example's manifest and installation lock
19
+ together; its recorded workflow does not establish behavior for a different release.
20
+
15
21
  ```console
16
- $ npx @volter/world@3.0.153 example workplace-agent --dir workplace
22
+ $ npx @volter/world@3.0.155 example workplace-agent --dir workplace
17
23
  $ cd workplace
18
24
  $ npm install
19
25
  $ ./node_modules/.bin/volter world init --name workplace --twins github,linear,slack
@@ -82,6 +88,42 @@ The retry uses the recorded ticket and attempts only the notification. An uncert
82
88
 
83
89
  `company.json` and `outcomes/` are application files outside declared World services. They are not branched or reset with vendor history. After explicitly resetting this disposable World, clear only this example's receipts with `node reset-receipts.mjs`, restore the frozen clock, then seed again. Do not reuse receipts from one World with another.
84
90
 
91
+ ## Inspect Slack's local member screen
92
+
93
+ The Slack twin provides workspace administration screens. They are separate from Slack's chat UI;
94
+ read the handoff's ticket and channel messages with `operate.mjs read` as shown above.
95
+
96
+ Stop the running World before starting its viewer. The viewer resumes the retained records and
97
+ keeps running in the background:
98
+
99
+ ```console
100
+ $ ./node_modules/.bin/volter world down
101
+ $ ./node_modules/.bin/volter world view --no-open &
102
+ $ workplace_view_pid=$!
103
+ ```
104
+
105
+ Open the printed console link. Select **Slack** under **Records**, then **Its screens**.
106
+ Choose **Sign in to Slack** and enter the synthetic default owner's address, `owner@world.test`.
107
+ The screen asks for a confirmation code. Read the twin's captured mail in another terminal,
108
+ from this app folder:
109
+
110
+ ```console
111
+ $ ./node_modules/.bin/volter world run -- node read-slack-mail.mjs owner@world.test
112
+ ```
113
+
114
+ [read-slack-mail.mjs](./read-slack-mail.mjs) reads Slack's declared local `/_twin/mail` endpoint.
115
+ Enter the code from the latest message and continue to **Manage members**, where **World Owner**
116
+ appears as the active primary owner. This uses synthetic local identity; no real Slack account or
117
+ email delivery is involved. This walkthrough covers sign-in and the member list, not invitations
118
+ or other administration actions.
119
+
120
+ When finished, stop the viewer you started and retain the workplace:
121
+
122
+ ```console
123
+ $ kill -INT "$workplace_view_pid"
124
+ $ ./node_modules/.bin/volter world down
125
+ ```
126
+
85
127
  ## Create a synthetic GitHub organization
86
128
 
87
129
  Personal repositories use GitHub's ordinary create-repository API. Organization creation is a settings-page operation; this twin provides the declared `POST /_twin/orgs` endpoint for synthetic setup. [create-organization.mjs](./create-organization.mjs) discovers the authenticated account and sends:
@@ -11,12 +11,12 @@
11
11
  "@slack/web-api": "7.19.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@volter/world": "3.0.153",
14
+ "@volter/world": "3.0.155",
15
15
  "@volter/world-core": "3.0.147",
16
- "@volter/world-runtime": "3.0.152",
17
- "@volter/world-console": "3.0.146",
18
- "@volter/twin-github": "3.0.6",
19
- "@volter/twin-linear": "3.0.4",
20
- "@volter/twin-slack": "3.0.5"
16
+ "@volter/world-runtime": "3.0.153",
17
+ "@volter/world-console": "3.0.147",
18
+ "@volter/twin-github": "3.0.9",
19
+ "@volter/twin-linear": "3.0.5",
20
+ "@volter/twin-slack": "3.0.8"
21
21
  }
22
22
  }
@@ -9,6 +9,7 @@
9
9
  "package-lock.json",
10
10
  "package.json",
11
11
  "public-files.json",
12
+ "read-slack-mail.mjs",
12
13
  "reset-receipts.mjs",
13
14
  "seed.mjs"
14
15
  ]
@@ -0,0 +1,8 @@
1
+ const base = process.env.SLACK_TWIN_URL;
2
+ if (!base) throw new Error('Run this reader inside the workplace World.');
3
+ const address = process.argv[2] ?? 'owner@world.test';
4
+ const url = new URL('/_twin/mail', base);
5
+ url.searchParams.set('to', address);
6
+ const response = await fetch(url, { signal: AbortSignal.timeout(2000) });
7
+ if (!response.ok) throw new Error(`Captured Slack mail: HTTP ${response.status}`);
8
+ console.log(JSON.stringify(await response.json(), null, 2));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter/world",
3
- "version": "3.0.153",
3
+ "version": "3.0.155",
4
4
  "description": "Run your app against a world of twins. `World` and `Repo` — one method per verb: init, up, run, log, diff, reset, branch, checkout, clone, fetch, changeset, push — and the `volter` command, one client of them.",
5
5
  "keywords": [
6
6
  "volter",
@@ -32,11 +32,11 @@
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.30.1",
34
34
  "@volter/world-core": "3.0.147",
35
- "@volter/world-runtime": "3.0.152",
35
+ "@volter/world-runtime": "3.0.153",
36
36
  "zod": "^4.6.5"
37
37
  },
38
38
  "peerDependencies": {
39
- "@volter/world-console": "3.0.146"
39
+ "@volter/world-console": "3.0.147"
40
40
  },
41
41
  "peerDependenciesMeta": {
42
42
  "@volter/world-console": {
@@ -44,7 +44,7 @@
44
44
  }
45
45
  },
46
46
  "devDependencies": {
47
- "@volter/world-console": "3.0.146"
47
+ "@volter/world-console": "3.0.147"
48
48
  },
49
49
  "bin": {
50
50
  "volter": "dist/src/cli.js"