zigmini 0.9.0-beta.3 → 1.0.0-beta.1

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.
Files changed (141) hide show
  1. package/README.ko.md +24 -4
  2. package/README.md +24 -4
  3. package/assets/agent/gateway-rules.md +1 -1
  4. package/assets/android/zigmini.apk +0 -0
  5. package/assets/android/zigmini.apk.json +3 -3
  6. package/assets/build.json +1 -1
  7. package/docs/manual.ko.md +51 -11
  8. package/docs/manual.md +52 -12
  9. package/host/omo-bridge/agent-control.ts +274 -0
  10. package/host/omo-bridge/bridge.ts +1 -1
  11. package/host/omo-bridge/continuity-control.ts +1 -1
  12. package/host/omo-bridge/task-control.ts +26 -16
  13. package/host/omo-check/patches/omo-5.1.51-compaction-long-context.patch +92 -0
  14. package/host/omo-check/patches/omo-5.1.51-compaction-port.patch +2635 -0
  15. package/host/omo-check/patches/omo-5.1.51-compaction-recovery.patch +911 -0
  16. package/host/omo-check/patches/omo-5.1.51-gateway-port.manifest.json +363 -0
  17. package/host/omo-check/patches/omo-5.1.51-provider-failover.patch +50 -0
  18. package/host/omo-check/patches/omo-5.1.51-provider-port.patch +441 -0
  19. package/host/omo-check/patches/omo-5.1.51-rpc-port.patch +799 -0
  20. package/host/omo-check/patches/omo-5.1.51-runtime-compat.patch +31 -0
  21. package/package.json +3 -2
  22. package/src/agent/api.ts +215 -0
  23. package/src/agent/definition.ts +177 -0
  24. package/src/agent/fields.ts +42 -0
  25. package/src/agent/files.ts +192 -0
  26. package/src/agent/legacy-files.ts +46 -0
  27. package/src/agent/list.ts +21 -0
  28. package/src/agent-rules.ts +14 -5
  29. package/src/approvals.ts +6 -1
  30. package/src/cli/main.ts +33 -0
  31. package/src/cli/messages.ts +10 -2
  32. package/src/cli/rotate-main.ts +2 -1
  33. package/src/cli/scan.ts +414 -0
  34. package/src/cli/security-import.ts +155 -0
  35. package/src/compact.ts +22 -0
  36. package/src/decisions.ts +6 -4
  37. package/src/engine/compat.json +3 -3
  38. package/src/engine/index.ts +1 -0
  39. package/src/engine/schema-guard.ts +12 -4
  40. package/src/engine/sdk.ts +8 -0
  41. package/src/formal-verification.ts +366 -0
  42. package/src/gc.ts +37 -6
  43. package/src/hub.ts +339 -79
  44. package/src/main.ts +95 -9
  45. package/src/maintenance.ts +1 -1
  46. package/src/manual.ts +9 -2
  47. package/src/profile-prompt.ts +73 -0
  48. package/src/profile.ts +33 -10
  49. package/src/protocol.ts +11 -2
  50. package/src/question-notifications.ts +4 -1
  51. package/src/reply-notifications.ts +7 -1
  52. package/src/repo-security-setting.ts +33 -0
  53. package/src/runtime/paths.ts +16 -0
  54. package/src/security/baseline.ts +170 -0
  55. package/src/security/dex-strings.ts +242 -0
  56. package/src/security/repo-scan.ts +369 -0
  57. package/src/security/revision-probe.ts +144 -0
  58. package/src/security/terms.ts +97 -0
  59. package/src/security-allow.ts +1 -0
  60. package/src/security-baseline.ts +113 -0
  61. package/src/security-check.ts +91 -16
  62. package/src/server-text.ts +38 -0
  63. package/src/store.ts +142 -16
  64. package/src/transcript.ts +7 -1
  65. package/src/ui-language.ts +33 -0
  66. package/src/update/check.ts +7 -3
  67. package/src/update/handoff-system.ts +24 -16
  68. package/src/update/handoff.ts +23 -12
  69. package/src/update/helper.ts +72 -36
  70. package/src/update/request.ts +46 -30
  71. package/src/update/state.ts +21 -11
  72. package/src/update/strategy.ts +12 -5
  73. package/src/update/target.ts +32 -15
  74. package/src/usage.ts +43 -20
  75. package/src/version.ts +39 -16
  76. package/src/voice/agents.ts +8 -3
  77. package/src/voice/install.ts +29 -18
  78. package/src/work-watch.ts +40 -18
  79. package/web/agent-icon.js +15 -9
  80. package/web/agents.d.ts +201 -0
  81. package/web/agents.js +813 -0
  82. package/web/app-download.js +32 -19
  83. package/web/app.js +1407 -278
  84. package/web/autocopy.js +6 -1
  85. package/web/boot.js +27 -8
  86. package/web/commands.js +20 -11
  87. package/web/decisions.js +70 -49
  88. package/web/devlog.js +25 -19
  89. package/web/diagram.js +8 -3
  90. package/web/enroll.js +43 -22
  91. package/web/gc.js +32 -19
  92. package/web/i18n/agent-icon.js +24 -0
  93. package/web/i18n/agents.js +48 -0
  94. package/web/i18n/app-download.js +26 -0
  95. package/web/i18n/autocopy.js +5 -0
  96. package/web/i18n/boot.js +24 -0
  97. package/web/i18n/commands.js +34 -0
  98. package/web/i18n/decisions.js +24 -0
  99. package/web/i18n/devlog.js +60 -0
  100. package/web/i18n/diagram.js +12 -0
  101. package/web/i18n/enroll.js +22 -0
  102. package/web/i18n/gc.js +38 -0
  103. package/web/i18n/lastsent.js +10 -0
  104. package/web/i18n/main.d.ts +4 -0
  105. package/web/i18n/main.js +527 -0
  106. package/web/i18n/manual.d.ts +4 -0
  107. package/web/i18n/manual.js +14 -0
  108. package/web/i18n/memo.js +30 -0
  109. package/web/i18n/notifications.js +16 -0
  110. package/web/i18n/profile.js +13 -0
  111. package/web/i18n/reference.js +26 -0
  112. package/web/i18n/security-inbox.js +40 -0
  113. package/web/i18n/slash.js +38 -0
  114. package/web/i18n/turn-stats.js +5 -0
  115. package/web/i18n/update.js +42 -0
  116. package/web/i18n/voice.js +28 -0
  117. package/web/i18n/wake.js +16 -0
  118. package/web/i18n/workid.js +10 -0
  119. package/web/i18n/workstatus.js +20 -0
  120. package/web/i18n.d.ts +20 -0
  121. package/web/i18n.js +63 -0
  122. package/web/index.html +156 -96
  123. package/web/lastsent.js +9 -4
  124. package/web/manual.d.ts +1 -1
  125. package/web/manual.js +11 -5
  126. package/web/memo.js +18 -13
  127. package/web/notifications.js +12 -7
  128. package/web/profile.js +42 -17
  129. package/web/reference.js +20 -15
  130. package/web/security-inbox.d.ts +18 -1
  131. package/web/security-inbox.js +173 -4
  132. package/web/slash.js +23 -13
  133. package/web/style.css +132 -3
  134. package/web/tooltip.js +5 -2
  135. package/web/turn-stats.js +6 -2
  136. package/web/update.js +31 -23
  137. package/web/voice.js +18 -8
  138. package/web/wake.d.ts +4 -0
  139. package/web/wake.js +7 -3
  140. package/web/workid.js +12 -2
  141. package/web/workstatus.js +36 -32
@@ -1,19 +1,32 @@
1
- // Plan Todo 20 (improvement 88): the 앱 내려받기 area of the web 설정 panel. Like web/enroll.js, only decisions live
2
- // here, with no DOM and no imports, so test/unit/app-download-web.test.ts and the mutation run drive them directly. The
3
- // link token exists only inside the QR: no text here carries the link.
1
+ import { onLanguageChange, registerStrings, t } from "./i18n.js";
2
+ import strings from "./i18n/app-download.js";
3
+
4
+ registerStrings(strings);
4
5
 
5
6
  export const DOWNLOAD_LINK_PATH = "/api/app/download-link";
6
7
  export const APK_LINK = /^https?:\/\/[^\s/]+\/app\/zigmini\.apk\?t=[A-Za-z0-9_-]+$/;
7
8
  export const QR_MARGIN = 4;
8
- export const INSTALL_HINT = "출처를 알 수 없는 앱 설치 허가가 필요합니다. 폰 카메라로 QR을 찍어 APK를 받은 뒤 설치하세요.";
9
- export const LOADING_LINE = "내려받기 QR을 만드는 중…";
10
- export const EXPIRED_LINE = "내려받기 QR이 만료되었습니다. 새로 만들어 다시 찍으세요.";
11
- export const ERROR_LINES = Object.freeze({
12
- apk_unavailable: "이 설치에는 내려받을 앱(APK)이 없습니다.",
13
- access_url_unknown: "접속 주소를 알 수 없습니다. 맥이 Wi-Fi에 연결되어 있는지 확인한 뒤 새로 만드세요.",
14
- qr_unavailable: "QR 라이브러리를 불러오지 못했습니다. 페이지를 새로 고치세요.",
15
- network: "게이트웨이에 연결하지 못했습니다. 잠시 후 새로 만드세요.",
9
+ export let INSTALL_HINT = t("appDownload.installHint");
10
+ export let LOADING_LINE = t("appDownload.loading");
11
+ export let EXPIRED_LINE = t("appDownload.expired");
12
+ export let ERROR_LINES = Object.freeze({
13
+ apk_unavailable: t("appDownload.apkUnavailable"),
14
+ access_url_unknown: t("appDownload.accessUrlUnknown"),
15
+ qr_unavailable: t("appDownload.qrUnavailable"),
16
+ network: t("appDownload.network"),
16
17
  });
18
+ function refreshStrings() {
19
+ INSTALL_HINT = t("appDownload.installHint");
20
+ LOADING_LINE = t("appDownload.loading");
21
+ EXPIRED_LINE = t("appDownload.expired");
22
+ ERROR_LINES = Object.freeze({
23
+ apk_unavailable: t("appDownload.apkUnavailable"),
24
+ access_url_unknown: t("appDownload.accessUrlUnknown"),
25
+ qr_unavailable: t("appDownload.qrUnavailable"),
26
+ network: t("appDownload.network"),
27
+ });
28
+ }
29
+ onLanguageChange(refreshStrings);
17
30
 
18
31
  export function parseDownloadLink(body) {
19
32
  if (body === null || typeof body !== "object") return null;
@@ -34,21 +47,21 @@ export function formatLeft(seconds) {
34
47
  }
35
48
 
36
49
  export function errorLine(error) {
37
- return ERROR_LINES[error] ?? `내려받기 QR을 만들지 못했습니다 (${error}). 새로 만들기를 누르세요.`;
50
+ return t(({ apk_unavailable: "appDownload.apkUnavailable", access_url_unknown: "appDownload.accessUrlUnknown", qr_unavailable: "appDownload.qrUnavailable", network: "appDownload.network" })[error] ?? "appDownload.error", { error });
38
51
  }
39
52
 
40
53
  /**
41
- * What the 앱 내려받기 area shows: `qr` the drawing, `version` the served version, `countdown` the remaining time and
42
- * `renew` the 새로 만들기 button. No APK on this install leaves only the message, with no button to press.
54
+ * What the app download area shows: `qr` the drawing, `version` the served version, `countdown` the remaining time and
55
+ * `renew` the create-new button. No APK on this install leaves only the message, with no button to press.
43
56
  */
44
57
  export function downloadView(state, now) {
45
58
  const none = { qr: false, version: null, countdown: null, renew: false, expired: false, error: false };
46
- if (state.status === "loading") return { ...none, message: LOADING_LINE };
59
+ if (state.status === "loading") return { ...none, message: t("appDownload.loading") };
47
60
  if (state.status === "error") return { ...none, renew: state.error !== "apk_unavailable", error: true, message: errorLine(state.error) };
48
- if (!state.link) return { ...none, renew: true, message: INSTALL_HINT };
61
+ if (!state.link) return { ...none, renew: true, message: t("appDownload.installHint") };
49
62
  const left = secondsLeft(state.link.expiresAt, now);
50
- if (left === 0) return { ...none, renew: true, expired: true, message: EXPIRED_LINE };
51
- return { ...none, qr: true, version: `지그미니 ${state.link.versionName}`, countdown: `남은 시간 ${formatLeft(left)}`, message: INSTALL_HINT };
63
+ if (left === 0) return { ...none, renew: true, expired: true, message: t("appDownload.expired") };
64
+ return { ...none, qr: true, version: t("appDownload.version", { version: state.link.versionName }), countdown: t("appDownload.countdown", { time: formatLeft(left) }), message: t("appDownload.installHint") };
52
65
  }
53
66
 
54
67
  export function downloadQrSvg(qrcode, url) {
@@ -62,7 +75,7 @@ export function linkRequest() {
62
75
  return { path: DOWNLOAD_LINK_PATH, init: { method: "POST" } };
63
76
  }
64
77
 
65
- /** The 앱 내려받기 state machine; `deps.render(view, svg)` paints after every change, `svg` null whenever no QR shows. */
78
+ /** The app download state machine; `deps.render(view, svg)` paints after every change, `svg` null whenever no QR shows. */
66
79
  export function createAppDownload(deps) {
67
80
  const s = { status: "idle", error: "", link: null, svg: null, timer: null };
68
81