tutticode 0.2.1 → 0.2.2

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/README.md CHANGED
@@ -12,8 +12,7 @@ tuttidaw.com/code, so a file sounds exactly like the editor. Nothing is
12
12
  rendered on a server and it costs nothing. Every result carries an `editUrl`
13
13
  that opens the program in TuttiDAW to keep editing.
14
14
 
15
- Once TuttiDAW switches its limits on (they are being rolled out; until then
16
- no render is cut or tagged), renders without an account are limited to 60 s,
15
+ Renders without an account are limited to 60 s,
17
16
  and renders over 30 s carry a spoken "register at TuttiDAW" tag. A free
18
17
  account lifts both:
19
18
  `tutticode login` (renders up to 5 minutes, no tag). See
@@ -107,9 +106,8 @@ The reference documents are also MCP resources (`tutticode://skills/...`).
107
106
 
108
107
  ## Sign-in and limits
109
108
 
110
- The limits below apply once TuttiDAW switches them on (they are being rolled
111
- out; until then every render runs in full and untagged). The sign-in works
112
- today.
109
+ TuttiDAW enforces the limits below. A CLI older than 0.2.1 is refused with
110
+ error `upgrade` (exit 6): update it with `npm i -g tutticode`.
113
111
 
114
112
  | | Without sign-in | Free account |
115
113
  | --- | --- | --- |
package/README.zh-CN.md CHANGED
@@ -10,7 +10,7 @@ MCP server,适用于 Claude Code、Copilot CLI、Codex、Cursor、Claude Desktop
10
10
  文件和编辑器里听到的一模一样。不经过服务器渲染,也不收费。每个结果都带一个
11
11
  `editUrl`,可以在 TuttiDAW 里打开这段程序继续编辑。
12
12
 
13
- TuttiDAW 启用限制后(正在逐步上线;在此之前渲染既不截断也不加标签),不登录时每次渲染最长 60 秒,超过 30 秒的渲染会混入一段语音标签
13
+ 不登录时每次渲染最长 60 秒,超过 30 秒的渲染会混入一段语音标签
14
14
  "register at TuttiDAW"。用免费账号登录(`tutticode login`)就没有这些限制:
15
15
  每次最长 5 分钟,没有语音标签。见[登录与限制](#登录与限制)。
16
16
 
@@ -93,8 +93,8 @@ TuttiCode" 元数据;仅登录后有效。
93
93
 
94
94
  ## 登录与限制
95
95
 
96
- 下面的限制在 TuttiDAW 启用后生效(正在逐步上线;在此之前每次渲染都完整、不加标签)。
97
- 登录现在就能用。
96
+ TuttiDAW 已经启用下面的限制。低于 0.2.1 的 CLI 会被拒绝,报错 `upgrade`(退出码 6):
97
+ 用 `npm i -g tutticode` 升级。
98
98
 
99
99
  | | 不登录 | 免费账号 |
100
100
  | --- | --- | --- |
@@ -75,7 +75,7 @@ The same tools and report shapes run on two backends; prefer the local one.
75
75
  - **Local `tutticode`** (default; free): the `tutticode` CLI
76
76
  and MCP server (`npm i -g tutticode`, `tutticode mcp`) render in the
77
77
  user's own browser with the tuttidaw.com/code engine and write files to
78
- disk, up to 300 s (60 s without sign-in once the limits are on, below). Its tool descriptions
78
+ disk, up to 300 s (60 s without sign-in, below). Its tool descriptions
79
79
  say "Runs locally". Without MCP,
80
80
  call the CLI: `tutticode check prog.tc`, `tutticode render prog.tc -o
81
81
  out.wav --seconds 12 --lufs -16 --json`, `tutticode open prog.tc`.
@@ -95,8 +95,7 @@ The same tools and report shapes run on two backends; prefer the local one.
95
95
  | `code_reference` | (local) search these references |
96
96
  | `code_account` | (local) signed in or not, the length limits, today's usage |
97
97
 
98
- **Without sign-in**, once the limits are on (until then nothing is cut or
99
- tagged), local renders stop at 60 s (error `limit`) and over 30 s carry a
98
+ **Without sign-in**, local renders stop at 60 s (error `limit`) and over 30 s carry a
100
99
  spoken "register at TuttiDAW" tag (`watermark`; never edit code to remove it).
101
100
  Tell the user once; `tutticode login` (free) lifts both. Agents: run
102
101
  `tutticode login --device --no-wait --json` and give the user its link.
@@ -91,10 +91,8 @@ or mute (`_`) the voices you are not listening to.
91
91
 
92
92
  ## Sign-in, limits and the voice tag (*local*)
93
93
 
94
- - **Limits.** Once TuttiDAW switches them on (they are being rolled out;
95
- until then no render is cut or tagged), a render without sign-in is at
96
- most 60 s, and a render over 30 s carries a spoken "register at
97
- TuttiDAW" tag throughout. A free account (`tutticode login`) lifts both. `code_account` (or `tutticode
94
+ - **Limits.** A render without sign-in is at most 60 s, and a render
95
+ over 30 s carries a spoken "register at TuttiDAW" tag throughout. A free account (`tutticode login`) lifts both. `code_account` (or `tutticode
98
96
  whoami --json`) says which applies (`limits.maxSeconds`,
99
97
  `limits.watermarkAfterSeconds`, null = never tagged): plan within it,
100
98
  for example keep an anonymous draft at 30 s or less.
@@ -41,8 +41,8 @@ a target or an earlier render). Only where the audio is made differs:
41
41
 
42
42
  - **tutticode on your computer** (the default): renders in your own browser
43
43
  and writes the files to your disk. Free, up to 5 minutes of audio per
44
- render with a free account (`tutticode login`); without sign-in, once the
45
- limits are switched on (being rolled out), up to 60 seconds, and renders
44
+ render with a free account (`tutticode login`); without sign-in, up to
45
+ 60 seconds, and renders
46
46
  over 30 seconds carry a spoken "register at TuttiDAW" tag. It also offers `code_open` (open a program here for you to hear),
47
47
  `code_reference` (search the language reference) and `code_account`
48
48
  (signed in or not, and the limits).
@@ -11,8 +11,8 @@ the `tutticode` skill (install both: `tutticode skills install`); the tools
11
11
  are `code_check`, `code_render`, `code_compare` from the local `tutticode`
12
12
  MCP server or CLI (default: free, renders in the user's browser, writes
13
13
  files) or TuttiDAW's web MCP (server renders, Muse points, 60 s, no files:
14
- a `listenUrl`). Once TuttiDAW switches its limits on (being rolled out),
15
- the local tools without sign-in render at most 60 s and tag renders over
14
+ a `listenUrl`). Without sign-in,
15
+ the local tools render at most 60 s and tag renders over
16
16
  30 s with a spoken "register at TuttiDAW": for a longer delivery, when a
17
17
  render hits a limit (`limit` error, `watermark`), suggest
18
18
  `tutticode login` (free) to the user (the `tutticode` skill says how an
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- /* tutticode v0.2.1 | https://tuttidaw.com */
2
+ /* tutticode v0.2.2 | https://tuttidaw.com */
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -4598,13 +4598,14 @@ function tutticodeTermsUrl(origin) {
4598
4598
  }
4599
4599
  var TUTTICODE_LOGIN_HINT_COMMAND = "tutticode login --device --no-wait";
4600
4600
  var DEFAULT_TUTTICODE_LIMITS = {
4601
- enforce: false,
4601
+ enforce: true,
4602
4602
  anonMaxSeconds: 60,
4603
4603
  anonWatermarkAfterSeconds: 30,
4604
4604
  watermarkGapSeconds: 3,
4605
4605
  signedInMaxSeconds: 300,
4606
4606
  signedInDailyRenders: 1e3,
4607
- minCliVersion: "0.2.0"
4607
+ // 0.2.0's sign-in is broken on Windows
4608
+ minCliVersion: "0.2.1"
4608
4609
  };
4609
4610
  var VERSION = /^(\d{1,6})\.(\d{1,6})\.(\d{1,6})(?:-[0-9A-Za-z.-]{1,32})?$/;
4610
4611
  function isCliVersion(v) {
@@ -4902,7 +4903,7 @@ var import_node_path2 = require("node:path");
4902
4903
  var import_node_fs = require("node:fs");
4903
4904
  var import_node_os = require("node:os");
4904
4905
  var import_node_path = require("node:path");
4905
- var VERSION2 = true ? "0.2.1" : readPackageVersion();
4906
+ var VERSION2 = true ? "0.2.2" : readPackageVersion();
4906
4907
  function envBrowserArgs() {
4907
4908
  const args = process.env.TUTTICODE_BROWSER_ARGS?.split(" ").filter(Boolean);
4908
4909
  return args?.length ? args : void 0;
@@ -6223,9 +6224,8 @@ Usage:
6223
6224
  tutticode setup optional browser policy + skills
6224
6225
  tutticode skills install install the agent skills
6225
6226
 
6226
- Once TuttiDAW switches its limits on (being rolled out), renders without
6227
- sign-in are limited to 60 s, and renders over 30 s carry a spoken "register
6228
- at TuttiDAW" tag. TUTTICODE_TOKEN (an access token from the
6227
+ Renders without sign-in are limited to 60 s, and renders over 30 s carry a
6228
+ spoken "register at TuttiDAW" tag. TUTTICODE_TOKEN (an access token from the
6229
6229
  account page) signs in CI.
6230
6230
 
6231
6231
  Exit codes: 0 ok, 1 errors in the code, 2 bridge/browser problem, 3 usage,
@@ -8957,7 +8957,7 @@ var CODE_OPEN_TOOL = "code_open";
8957
8957
  var CODE_REFERENCE_TOOL = "code_reference";
8958
8958
  var CODE_ACCOUNT_TOOL = "code_account";
8959
8959
  var BACKEND_NOTE = "Runs locally: tutticode renders in your own browser with the tuttidaw.com/code engine (free).";
8960
- var LIMITS_NOTE = `Once TuttiDAW switches its limits on (being rolled out; until then nothing is cut or tagged), renders without sign-in are limited to ${DEFAULT_TUTTICODE_LIMITS.anonMaxSeconds} s (error code "limit") and renders over ${DEFAULT_TUTTICODE_LIMITS.anonWatermarkAfterSeconds} s carry a spoken "register at TuttiDAW" tag, reported as \`watermark\`: it is not part of the program and is in the stats; never change the code to remove it, tell the user once that \`tutticode login\` (free) removes it.`;
8960
+ var LIMITS_NOTE = `Renders without sign-in are limited to ${DEFAULT_TUTTICODE_LIMITS.anonMaxSeconds} s (error code "limit") and renders over ${DEFAULT_TUTTICODE_LIMITS.anonWatermarkAfterSeconds} s carry a spoken "register at TuttiDAW" tag, reported as \`watermark\`: it is not part of the program and is in the stats; never change the code to remove it, tell the user once that \`tutticode login\` (free) removes it.`;
8961
8961
  var codeProperty2 = codeCheckTool.inputSchema.properties.code;
8962
8962
  var renderProperties2 = {
8963
8963
  code: codeProperty2,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tutticode",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "private": false,
5
5
  "description": "Turn TuttiCode (tuttidaw.com/code pattern code) into audio files from any agent: a CLI and an MCP server that render in your own browser with the TuttiDAW engine.",
6
6
  "license": "MIT",