@zhin.js/plugin-calendar 0.1.14 → 0.1.16

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/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @zhin.js/plugin-calendar
2
2
 
3
+ ## 0.1.16
4
+
5
+ ### Patch Changes
6
+
7
+ - 0d76a7c: Overhaul Console interactive workbenches, platform-specific adapter account onboarding/login flows, DeclarativePageView visual/interactive capabilities, and official utility plugin Console pages.
8
+
9
+ ## 0.1.15
10
+
11
+ ### Patch Changes
12
+
13
+ - 8adce16: fix: post-refactor audit fixes across runtime, console blueprints, AI setup, and plugin stores
14
+
15
+ - **Agent & Runtime**: adapt `DatabaseHost` models for `DatabaseEngagementJournal` after `DatabaseHost.start()` (`this[#db].select is not a function`), suppress deferred database warning in `seedInitialAiPlanIfEmpty`, lazy-load `@zhin.js/agent/runtime` in `agent-console.ts`, wrap `#receiveSideEvent` with `withEndpointEventPayload` and `captureInteraction`, select only `('id', 'timestamp')` in `SystemLogDatabaseTransport.prune()`, and surface clear install errors when optional AI/protocol packages are absent.
16
+ - **Console Blueprints & RPC**: bundle `.ts` blueprint page entries via `esbuild` in `TypeScriptClientBuilder` so `spec`, `fields`, `dictionary`, `pollMs`, and `reviewSpec` are preserved in browser bundles; wire `CommentReviewSession` in `DeclarativePageView`; authorize `zhin.game` / `zhin.feature.game` in `plugin-console-rpc.ts`; forward `locale` in `entry-routes.ts`; pass `pluginId: entry.owner ?? entry.id` in `loadConsoleEntries.ts`.
17
+ - **Plugin Store & Capabilities**: make `deriveStoreDisposer` idempotent in `@zhin.js/plugin-runtime`, guard nullish `carrier.resources`, handle `{ dispose }` return shapes in isolate `bootstrap.ts`, remove duplicate manual disposals in `answers`/`earthquake`, guard optional `projectLocaleToken` in `calendar`/`reminder`/`rss`/`lottery`, migrate `process-monitor` to `definePluginStore`, and align `capabilityGraph` declarations across plugins.
18
+ - **Architectural Enhancements**:
19
+ 1. **Model Capability Baseline Catalog + Override Layer** (`@zhin.js/ai`, `@zhin.js/scaffold-wizard`, `@zhin.js/cli`): add `MODEL_CAPABILITY_CATALOG`, `inferModelCapabilities`, and `applyModelCapabilityDefaults` so built-in models carry accurate `input`/`streaming`/`toolCalling`/`thinking` baselines while preserving explicit `provider.capabilities` overrides.
20
+ 2. **Zero-Bundler Declarative Blueprint Protocol** (`@zhin.js/console-contract`, `@zhin.js/client`, `@zhin.js/pagemanager`): add JSON-serializable `DeclarativeValueExpr` operators (`$path`, `$count`, `$sum`, `$format`, `$map`, `$join`, `$coalesce`) evaluated identically across Web, IM Card, and CLI Panel projections, plus in-process `ts.transpileModule` synthesis (`synthesizePureBlueprintModule`) in `TypeScriptClientBuilder`.
21
+ 3. **Auto CapabilityGraph Convention Merge & Codegen** (`@zhin.js/plugin-runtime`, `@zhin.js/runtime`, `@zhin.js/cli`): add `mergePluginCapabilityGraph`, `scanConventionCapabilityFeatures` (auto-merged during `PluginScopeAssembler.setupTree`), and `zhin runtime codegen [dir] --write --json`.
22
+ 4. **Durable Turn Step Checkpointing** (`@zhin.js/agent`): add `TurnCheckpointStore` and `DatabaseTurnCheckpointStorage` (`agent_turn_checkpoints`) so multi-step tool turns interrupted mid-flight record completed `(assistant[toolCall] -> toolResult[])` rounds and resume from the last committed `toolResult` boundary on retry or `"继续"`/`"continue"`.
23
+ - **UI Component System & Developer Preview Workbench** (`@zhin.js/client`, `@zhin.js/components`, `@zhin.js/cli`, `create-zhin-app`):
24
+ - Expand `@zhin.js/client/ui` and `@zhin.js/components` with unified design tokens (`UI_DESIGN_TOKENS`), option icons (`RadioGroup`/`CheckboxGroup`), custom chart images/logos (`BarChart`/`Sparkline`/`DonutChart`/`GaugeBar`), batch table selection & sticky columns (`DataTable`), responsive viewport presets (`CardCanvas`), and shared layout/display primitives.
25
+ - Add `zhin preview [dir]` command in `@zhin.js/cli` (and `"preview": "zhin preview"` in `create-zhin-app`) for zero-build live SSE component & page blueprint previewing, interactive `previewProps` JSON editing, canvas width/background presets, and box-model outline debugging.
26
+ - **IM Chat Controlled Restart & Post-Restart Channel Receipt** (`@zhin.js/cli`):
27
+ - Add `installRestartHost` (`restart` / `重启` / `reboot` command for Bot owners) and `deliverPendingRestartReceipt` so owners can trigger a supervised process restart from any IM conversation and automatically receive the restart completion summary in the originating channel once the endpoint reconnects.
28
+ - Ignore `SIGHUP` in `NativeTypeScriptSupervisor` when running in `--daemon` mode.
29
+
30
+ - Updated dependencies [8adce16]
31
+ - @zhin.js/console-contract@1.1.5
32
+ - @zhin.js/host-http@1.1.17
33
+ - @zhin.js/page@1.1.17
34
+ - @zhin.js/skill@1.1.16
35
+ - @zhin.js/tool@1.1.18
36
+
3
37
  ## 0.1.14
4
38
 
5
39
  ### Patch Changes
package/lib/console.d.ts CHANGED
@@ -1,4 +1,13 @@
1
1
  import { type PluginConsoleRpc } from 'zhin.js';
2
2
  import { type CalendarRuntime } from './runtime.js';
3
+ export interface CalendarConsoleEventItem {
4
+ readonly id: string;
5
+ readonly title: string;
6
+ readonly date: string;
7
+ readonly time: string;
8
+ readonly repeat: string;
9
+ readonly createdAt: string;
10
+ readonly [key: string]: string;
11
+ }
3
12
  export declare function createCalendarConsoleRpc(defaultRuntime?: CalendarRuntime): PluginConsoleRpc;
4
13
  //# sourceMappingURL=console.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAmB1E,wBAAgB,wBAAwB,CAAC,cAAc,CAAC,EAAE,eAAe,GAAG,gBAAgB,CA0B3F"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAmBD,wBAAgB,wBAAwB,CAAC,cAAc,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAqH3F"}
package/lib/console.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import { definePluginConsoleRpc, PluginConsoleRpcError, } from 'zhin.js';
2
3
  import { DEFAULT_OAUTH_CALLBACK_PATH } from './chat-auth.js';
3
4
  import { calendarRuntimeToken } from './runtime.js';
@@ -9,6 +10,7 @@ function resolveCalendarRuntime(call, fallback) {
9
10
  return runtime;
10
11
  }
11
12
  export function createCalendarConsoleRpc(defaultRuntime) {
13
+ const localEvents = [];
12
14
  return definePluginConsoleRpc({
13
15
  status: {
14
16
  page: 'index',
@@ -28,9 +30,93 @@ export function createCalendarConsoleRpc(defaultRuntime) {
28
30
  ready: Boolean(runtime.provider),
29
31
  oauthCallbackPath: cfg.oauth_callback_path?.trim() || DEFAULT_OAUTH_CALLBACK_PATH,
30
32
  workingHours: `${start} - ${end}`,
33
+ ...(localEvents.length > 0
34
+ ? {
35
+ eventCount: localEvents.length,
36
+ events: [...localEvents],
37
+ }
38
+ : {}),
31
39
  };
32
40
  },
33
41
  },
42
+ actions: {
43
+ create: {
44
+ page: 'index',
45
+ requiredPermissions: ['calendar:write'],
46
+ async handler(input, call) {
47
+ const runtime = resolveCalendarRuntime(call, defaultRuntime);
48
+ const title = typeof input.title === 'string' ? input.title.trim() : '';
49
+ if (!title) {
50
+ throw new PluginConsoleRpcError('invalid_input', '请输入日程标题');
51
+ }
52
+ const date = typeof input.date === 'string' ? input.date.trim() : '';
53
+ if (!/^\d{4}-\d{2}-\d{2}$/u.test(date)) {
54
+ throw new PluginConsoleRpcError('invalid_input', '请提供 YYYY-MM-DD 格式的日期');
55
+ }
56
+ const time = typeof input.time === 'string' && input.time.trim()
57
+ ? input.time.trim()
58
+ : '09:00';
59
+ const repeat = typeof input.repeat === 'string' &&
60
+ ['none', 'daily', 'weekly', 'monthly', 'yearly'].includes(input.repeat)
61
+ ? input.repeat
62
+ : 'none';
63
+ let id = randomUUID().slice(0, 8);
64
+ if (runtime.provider) {
65
+ try {
66
+ const start = new Date(`${date}T${time}:00`);
67
+ const end = new Date(start.getTime() + 3600_000);
68
+ if (!Number.isNaN(start.getTime())) {
69
+ const created = await runtime.provider.createEvent({ title, start, end }, call.signal);
70
+ if (created?.id)
71
+ id = created.id;
72
+ }
73
+ }
74
+ catch {
75
+ // Keep console event creation working even when external provider is unreachable
76
+ }
77
+ }
78
+ const eventItem = {
79
+ id,
80
+ title,
81
+ date,
82
+ time,
83
+ repeat,
84
+ createdAt: new Date().toISOString(),
85
+ };
86
+ localEvents.unshift(eventItem);
87
+ return {
88
+ ok: true,
89
+ id,
90
+ title,
91
+ date,
92
+ time,
93
+ repeat,
94
+ message: `已添加日程:${title} (${date} ${time})`,
95
+ };
96
+ },
97
+ },
98
+ delete: {
99
+ page: 'index',
100
+ requiredPermissions: ['calendar:write'],
101
+ handler(input, call) {
102
+ resolveCalendarRuntime(call, defaultRuntime);
103
+ const id = typeof input.id === 'string' ? input.id.trim() : '';
104
+ if (!id) {
105
+ throw new PluginConsoleRpcError('invalid_input', '请提供要删除的日程 ID');
106
+ }
107
+ const idx = localEvents.findIndex((item) => item.id === id);
108
+ const removed = idx >= 0;
109
+ if (removed) {
110
+ localEvents.splice(idx, 1);
111
+ }
112
+ return {
113
+ ok: removed,
114
+ id,
115
+ message: removed ? `已删除日程 ${id}` : `未找到日程 ${id}`,
116
+ };
117
+ },
118
+ },
119
+ },
34
120
  });
35
121
  }
36
122
  //# sourceMappingURL=console.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAKtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAwB,MAAM,cAAc,CAAC;AAW1E,SAAS,sBAAsB,CAAC,IAA0B,EAAE,QAA0B;IACpF,MAAM,OAAO,GAAI,IAAI,CAAC,OAA6C,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,QAAQ,CAAC;IAC7G,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,cAAgC;IACvE,OAAO,sBAAsB,CAAC;QAC5B,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,mBAAmB,EAAE,CAAC,eAAe,CAAC;YACtC,OAAO,CAAC,MAA6B,EAAE,IAA0B;gBAC/D,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAgC,CAAC;gBACrD,MAAM,KAAK,GACT,GAAG,CAAC,kBAAkB,KAAK,SAAS;oBAClC,CAAC,CAAC,GAAG,GAAG,CAAC,kBAAkB,KAAK;oBAChC,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;gBAC5C,MAAM,GAAG,GACP,GAAG,CAAC,gBAAgB,KAAK,SAAS;oBAChC,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,KAAK;oBAC9B,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;gBAC1C,OAAO;oBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAChC,iBAAiB,EAAE,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,2BAA2B;oBACjF,YAAY,EAAE,GAAG,KAAK,MAAM,GAAG,EAAE;iBAClC,CAAC;YACJ,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export { parseCalDavEvents } from "./caldav.js";
8
8
  export { calendarConfig, assertCalendarTimezone, type CalendarConfig, } from "./config.js";
9
9
  export { cleanSecret } from "./secrets.js";
10
10
  export { calendarRuntimeToken, type CalendarRuntime } from "./runtime.js";
11
- export { createCalendarConsoleRpc } from "./console.js";
11
+ export { createCalendarConsoleRpc, type CalendarConsoleEventItem, } from "./console.js";
12
12
  export { OAuthTokenManager, OAuthTokenError, authCommandFor, type OAuthProviderKind, type RefreshTokenStore, type TokenManagerOptions, type TokenSet, } from "./token-manager.js";
13
13
  export { CalendarCredentialStore, type CalendarStateStore, type CredentialOwner, type StoredCredential, } from "./credential-store.js";
14
14
  export { CalendarAuthService, DEFAULT_OAUTH_CALLBACK_PATH, buildRedirectUri, localOriginFromAddress, parseOAuthProvider, } from "./chat-auth.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,4BAA4B;IAC3C,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAC/C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,wBAA6B,GAC1C,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAiCvD;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,4BAAiC,GAC9C,gBAAgB,GAAG,SAAS,CAyE9B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,4BAA4B;IAC3C,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAC/C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,wBAA6B,GAC1C,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAiCvD;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,4BAAiC,GAC9C,gBAAgB,GAAG,SAAS,CAyE9B"}
package/lib/index.js CHANGED
@@ -7,7 +7,7 @@ export { parseCalDavEvents } from "./caldav.js";
7
7
  export { calendarConfig, assertCalendarTimezone, } from "./config.js";
8
8
  export { cleanSecret } from "./secrets.js";
9
9
  export { calendarRuntimeToken } from "./runtime.js";
10
- export { createCalendarConsoleRpc } from "./console.js";
10
+ export { createCalendarConsoleRpc, } from "./console.js";
11
11
  export { OAuthTokenManager, OAuthTokenError, authCommandFor, } from "./token-manager.js";
12
12
  export { CalendarCredentialStore, } from "./credential-store.js";
13
13
  export { CalendarAuthService, DEFAULT_OAUTH_CALLBACK_PATH, buildRedirectUri, localOriginFromAddress, parseOAuthProvider, } from "./chat-auth.js";
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/plugin-calendar",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "description": "CalDAV / Google / Microsoft calendar tools for Zhin Agent",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -40,27 +40,27 @@
40
40
  "url": "https://github.com/lc-cn"
41
41
  },
42
42
  "dependencies": {
43
- "@zhin.js/console-contract": "1.1.4",
44
- "@zhin.js/host-http": "1.1.16",
43
+ "@zhin.js/console-contract": "1.1.5",
44
+ "@zhin.js/host-http": "1.1.17",
45
45
  "@zhin.js/im-contract": "1.1.13",
46
- "@zhin.js/page": "1.1.16",
47
- "@zhin.js/skill": "1.1.15",
48
- "@zhin.js/tool": "1.1.17"
46
+ "@zhin.js/page": "1.1.17",
47
+ "@zhin.js/skill": "1.1.16",
48
+ "@zhin.js/tool": "1.1.18"
49
49
  },
50
50
  "devDependencies": {
51
51
  "typescript": "^6.0.3",
52
52
  "vitest": "^4.1.10",
53
53
  "zod": "^4.4.3",
54
- "@zhin.js/command": "1.1.16",
55
- "zhin.js": "1.1.23"
54
+ "@zhin.js/command": "1.1.17",
55
+ "zhin.js": "1.1.25"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "zod": "^4.0.0",
59
- "@zhin.js/command": "^1.1.16",
60
- "@zhin.js/page": "^1.1.16",
61
- "@zhin.js/skill": "^1.1.15",
62
- "@zhin.js/tool": "^1.1.17",
63
- "zhin.js": "^1.1.23"
59
+ "@zhin.js/command": "^1.1.17",
60
+ "@zhin.js/page": "^1.1.17",
61
+ "@zhin.js/skill": "^1.1.16",
62
+ "@zhin.js/tool": "^1.1.18",
63
+ "zhin.js": "^1.1.25"
64
64
  },
65
65
  "peerDependenciesMeta": {
66
66
  "@zhin.js/command": {
@@ -1,5 +1,5 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
- import { definePage, createDeclarativePage } from '@zhin.js/console-contract';
2
+ import { definePage, definePageBlueprint } from '@zhin.js/console-contract';
3
3
  export const meta = definePage({
4
4
  title: '日历日程',
5
5
  titleI18n: { en: 'Calendar' },
@@ -7,11 +7,11 @@ export const meta = definePage({
7
7
  order: 53,
8
8
  requiredPermissions: ['calendar:read'],
9
9
  });
10
- export default createDeclarativePage({
10
+ export default definePageBlueprint({
11
11
  title: { zh: '日历日程', en: 'Calendar' },
12
12
  description: {
13
- zh: '查看日历后端连接状态、时区与工作时间范围',
14
- en: 'View calendar provider status, timezone, and working hours configuration',
13
+ zh: '查看日历后端连接状态、时区与工作时间范围,并在线新建或管理日程',
14
+ en: 'View calendar provider status, timezone, and working hours configuration, and create or manage events',
15
15
  },
16
16
  dictionary: {
17
17
  '已就绪': 'Ready',
@@ -20,8 +20,26 @@ export default createDeclarativePage({
20
20
  badges: [
21
21
  {
22
22
  key: 'ready',
23
- label: (data, ctx) => (data.ready ? ctx.t('已就绪') : ctx.t('未就绪')),
24
- tone: (data) => (data.ready ? 'success' : 'warning'),
23
+ label: {
24
+ $map: {
25
+ path: 'ready',
26
+ cases: {
27
+ true: { zh: '已就绪', en: 'Ready' },
28
+ false: { zh: '未就绪', en: 'Not ready' },
29
+ },
30
+ default: { zh: '未就绪', en: 'Not ready' },
31
+ },
32
+ },
33
+ tone: {
34
+ $map: {
35
+ path: 'ready',
36
+ cases: {
37
+ true: 'success',
38
+ false: 'warning',
39
+ },
40
+ default: 'warning',
41
+ },
42
+ },
25
43
  },
26
44
  ],
27
45
  stats: [
@@ -41,17 +59,85 @@ export default createDeclarativePage({
41
59
  value: 'workingHours',
42
60
  },
43
61
  ],
62
+ actions: [
63
+ {
64
+ name: 'create',
65
+ label: { zh: '新建日程', en: 'Create Event' },
66
+ variant: 'primary',
67
+ fields: [
68
+ {
69
+ key: 'title',
70
+ label: { zh: '日程标题', en: 'Event Title' },
71
+ type: 'text',
72
+ required: true,
73
+ },
74
+ {
75
+ key: 'date',
76
+ label: { zh: '日期 YYYY-MM-DD', en: 'Date (YYYY-MM-DD)' },
77
+ type: 'text',
78
+ required: true,
79
+ placeholder: '2026-11-08',
80
+ },
81
+ {
82
+ key: 'time',
83
+ label: { zh: '时间 HH:mm', en: 'Time (HH:mm)' },
84
+ type: 'text',
85
+ defaultValue: '09:00',
86
+ },
87
+ {
88
+ key: 'repeat',
89
+ label: { zh: '重复周期', en: 'Repeat' },
90
+ type: 'select',
91
+ defaultValue: 'none',
92
+ options: [
93
+ { value: 'none', label: { zh: '不重复 (none)', en: 'None' } },
94
+ { value: 'daily', label: { zh: '每天 (daily)', en: 'Daily' } },
95
+ { value: 'weekly', label: { zh: '每周 (weekly)', en: 'Weekly' } },
96
+ { value: 'monthly', label: { zh: '每月 (monthly)', en: 'Monthly' } },
97
+ { value: 'yearly', label: { zh: '每年 (yearly)', en: 'Yearly' } },
98
+ ],
99
+ },
100
+ ],
101
+ },
102
+ {
103
+ name: 'delete',
104
+ label: { zh: '删除日程', en: 'Delete Event' },
105
+ variant: 'danger',
106
+ fields: [
107
+ {
108
+ key: 'id',
109
+ label: { zh: '日程 ID', en: 'Event ID' },
110
+ type: 'text',
111
+ required: true,
112
+ },
113
+ ],
114
+ },
115
+ ],
44
116
  sections: [
117
+ {
118
+ id: 'events',
119
+ layout: 'table',
120
+ title: { zh: '日程列表', en: 'Calendar Events' },
121
+ emptyText: { zh: '暂无日程记录', en: 'No calendar events yet' },
122
+ items: 'events',
123
+ columns: [
124
+ { key: 'id', label: { zh: 'ID', en: 'ID' } },
125
+ { key: 'title', label: { zh: '日程标题', en: 'Title' } },
126
+ { key: 'date', label: { zh: '日期', en: 'Date' } },
127
+ { key: 'time', label: { zh: '时间', en: 'Time' } },
128
+ { key: 'repeat', label: { zh: '重复', en: 'Repeat' } },
129
+ ],
130
+ },
45
131
  {
46
132
  id: 'overview',
47
133
  title: { zh: '配置概览', en: 'Configuration Overview' },
48
- entries: (data) => ({
49
- provider: data.provider,
50
- timezone: data.timezone,
51
- ready: data.ready ? 'true' : 'false',
52
- oauthCallbackPath: data.oauthCallbackPath,
53
- workingHours: data.workingHours,
54
- }),
134
+ entries: [
135
+ { label: 'provider', dataKey: 'provider' },
136
+ { label: 'timezone', dataKey: 'timezone' },
137
+ { label: 'ready', dataKey: 'ready' },
138
+ { label: 'oauthCallbackPath', dataKey: 'oauthCallbackPath' },
139
+ { label: 'workingHours', dataKey: 'workingHours' },
140
+ ],
55
141
  },
56
142
  ],
57
143
  });
@@ -1,11 +1,14 @@
1
- import { definePage, createDeclarativePage } from '@zhin.js/console-contract';
1
+ import { definePage, definePageBlueprint } from '@zhin.js/console-contract';
2
+ import type { CalendarConsoleEventItem } from '../../plugin.js';
2
3
 
3
4
  export interface CalendarConsoleStatus {
4
- readonly provider: 'none' | 'google' | 'microsoft' | 'caldav' | 'ics';
5
+ readonly provider: 'none' | 'google' | 'microsoft' | 'caldav';
5
6
  readonly timezone: string;
6
7
  readonly ready: boolean;
7
8
  readonly oauthCallbackPath: string;
8
9
  readonly workingHours: string;
10
+ readonly eventCount?: number;
11
+ readonly events?: readonly CalendarConsoleEventItem[];
9
12
  }
10
13
 
11
14
  export const meta = definePage({
@@ -16,11 +19,11 @@ export const meta = definePage({
16
19
  requiredPermissions: ['calendar:read'],
17
20
  });
18
21
 
19
- export default createDeclarativePage<CalendarConsoleStatus>({
22
+ export default definePageBlueprint<CalendarConsoleStatus>({
20
23
  title: { zh: '日历日程', en: 'Calendar' },
21
24
  description: {
22
- zh: '查看日历后端连接状态、时区与工作时间范围',
23
- en: 'View calendar provider status, timezone, and working hours configuration',
25
+ zh: '查看日历后端连接状态、时区与工作时间范围,并在线新建或管理日程',
26
+ en: 'View calendar provider status, timezone, and working hours configuration, and create or manage events',
24
27
  },
25
28
  dictionary: {
26
29
  '已就绪': 'Ready',
@@ -29,8 +32,26 @@ export default createDeclarativePage<CalendarConsoleStatus>({
29
32
  badges: [
30
33
  {
31
34
  key: 'ready',
32
- label: (data, ctx) => (data.ready ? ctx.t('已就绪') : ctx.t('未就绪')),
33
- tone: (data) => (data.ready ? 'success' : 'warning'),
35
+ label: {
36
+ $map: {
37
+ path: 'ready',
38
+ cases: {
39
+ true: { zh: '已就绪', en: 'Ready' },
40
+ false: { zh: '未就绪', en: 'Not ready' },
41
+ },
42
+ default: { zh: '未就绪', en: 'Not ready' },
43
+ },
44
+ },
45
+ tone: {
46
+ $map: {
47
+ path: 'ready',
48
+ cases: {
49
+ true: 'success',
50
+ false: 'warning',
51
+ },
52
+ default: 'warning',
53
+ },
54
+ },
34
55
  },
35
56
  ],
36
57
  stats: [
@@ -50,17 +71,85 @@ export default createDeclarativePage<CalendarConsoleStatus>({
50
71
  value: 'workingHours',
51
72
  },
52
73
  ],
74
+ actions: [
75
+ {
76
+ name: 'create',
77
+ label: { zh: '新建日程', en: 'Create Event' },
78
+ variant: 'primary',
79
+ fields: [
80
+ {
81
+ key: 'title',
82
+ label: { zh: '日程标题', en: 'Event Title' },
83
+ type: 'text',
84
+ required: true,
85
+ },
86
+ {
87
+ key: 'date',
88
+ label: { zh: '日期 YYYY-MM-DD', en: 'Date (YYYY-MM-DD)' },
89
+ type: 'text',
90
+ required: true,
91
+ placeholder: '2026-11-08',
92
+ },
93
+ {
94
+ key: 'time',
95
+ label: { zh: '时间 HH:mm', en: 'Time (HH:mm)' },
96
+ type: 'text',
97
+ defaultValue: '09:00',
98
+ },
99
+ {
100
+ key: 'repeat',
101
+ label: { zh: '重复周期', en: 'Repeat' },
102
+ type: 'select',
103
+ defaultValue: 'none',
104
+ options: [
105
+ { value: 'none', label: { zh: '不重复 (none)', en: 'None' } },
106
+ { value: 'daily', label: { zh: '每天 (daily)', en: 'Daily' } },
107
+ { value: 'weekly', label: { zh: '每周 (weekly)', en: 'Weekly' } },
108
+ { value: 'monthly', label: { zh: '每月 (monthly)', en: 'Monthly' } },
109
+ { value: 'yearly', label: { zh: '每年 (yearly)', en: 'Yearly' } },
110
+ ],
111
+ },
112
+ ],
113
+ },
114
+ {
115
+ name: 'delete',
116
+ label: { zh: '删除日程', en: 'Delete Event' },
117
+ variant: 'danger',
118
+ fields: [
119
+ {
120
+ key: 'id',
121
+ label: { zh: '日程 ID', en: 'Event ID' },
122
+ type: 'text',
123
+ required: true,
124
+ },
125
+ ],
126
+ },
127
+ ],
53
128
  sections: [
129
+ {
130
+ id: 'events',
131
+ layout: 'table',
132
+ title: { zh: '日程列表', en: 'Calendar Events' },
133
+ emptyText: { zh: '暂无日程记录', en: 'No calendar events yet' },
134
+ items: 'events',
135
+ columns: [
136
+ { key: 'id', label: { zh: 'ID', en: 'ID' } },
137
+ { key: 'title', label: { zh: '日程标题', en: 'Title' } },
138
+ { key: 'date', label: { zh: '日期', en: 'Date' } },
139
+ { key: 'time', label: { zh: '时间', en: 'Time' } },
140
+ { key: 'repeat', label: { zh: '重复', en: 'Repeat' } },
141
+ ],
142
+ },
54
143
  {
55
144
  id: 'overview',
56
145
  title: { zh: '配置概览', en: 'Configuration Overview' },
57
- entries: (data) => ({
58
- provider: data.provider,
59
- timezone: data.timezone,
60
- ready: data.ready ? 'true' : 'false',
61
- oauthCallbackPath: data.oauthCallbackPath,
62
- workingHours: data.workingHours,
63
- }),
146
+ entries: [
147
+ { label: 'provider', dataKey: 'provider' },
148
+ { label: 'timezone', dataKey: 'timezone' },
149
+ { label: 'ready', dataKey: 'ready' },
150
+ { label: 'oauthCallbackPath', dataKey: 'oauthCallbackPath' },
151
+ { label: 'workingHours', dataKey: 'workingHours' },
152
+ ],
64
153
  },
65
154
  ],
66
155
  });
package/plugin.js CHANGED
@@ -16,7 +16,11 @@ export default definePlugin({
16
16
  features: {
17
17
  commands: ["calendar/auth", "calendar/logout", "calendar/status"],
18
18
  skills: ["calendar-scheduling"],
19
- tools: ["create_event", "find_free_time", "list_events"],
19
+ tools: [
20
+ "skill/calendar-scheduling/create_event",
21
+ "skill/calendar-scheduling/find_free_time",
22
+ "skill/calendar-scheduling/list_events",
23
+ ],
20
24
  pages: ["index"],
21
25
  },
22
26
  }),
@@ -55,9 +59,16 @@ export default definePlugin({
55
59
  credentials,
56
60
  onAuthorizationLost: (provider, message) => auth.notifyAuthorizationLost(provider, message),
57
61
  });
62
+ let projectLocale;
63
+ try {
64
+ projectLocale = context.resources.use(projectLocaleToken);
65
+ }
66
+ catch {
67
+ projectLocale = undefined;
68
+ }
58
69
  const auth = new CalendarAuthService({
59
70
  config,
60
- locale: resources.use(projectLocaleToken),
71
+ locale: projectLocale,
61
72
  managers,
62
73
  credentials,
63
74
  notify,
package/src/console.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import {
2
3
  definePluginConsoleRpc,
3
4
  PluginConsoleRpcError,
@@ -10,6 +11,16 @@ import { DEFAULT_OAUTH_CALLBACK_PATH } from './chat-auth.js';
10
11
  import type { CalendarConfig } from './config.js';
11
12
  import { calendarRuntimeToken, type CalendarRuntime } from './runtime.js';
12
13
 
14
+ export interface CalendarConsoleEventItem {
15
+ readonly id: string;
16
+ readonly title: string;
17
+ readonly date: string;
18
+ readonly time: string;
19
+ readonly repeat: string;
20
+ readonly createdAt: string;
21
+ readonly [key: string]: string;
22
+ }
23
+
13
24
  type CalendarRuntimeLookup = {
14
25
  readonly use?: (token: typeof calendarRuntimeToken) => CalendarRuntime | undefined;
15
26
  };
@@ -28,6 +39,8 @@ function resolveCalendarRuntime(call: PluginConsoleRpcCall, fallback?: CalendarR
28
39
  }
29
40
 
30
41
  export function createCalendarConsoleRpc(defaultRuntime?: CalendarRuntime): PluginConsoleRpc {
42
+ const localEvents: CalendarConsoleEventItem[] = [];
43
+
31
44
  return definePluginConsoleRpc({
32
45
  status: {
33
46
  page: 'index',
@@ -49,8 +62,97 @@ export function createCalendarConsoleRpc(defaultRuntime?: CalendarRuntime): Plug
49
62
  ready: Boolean(runtime.provider),
50
63
  oauthCallbackPath: cfg.oauth_callback_path?.trim() || DEFAULT_OAUTH_CALLBACK_PATH,
51
64
  workingHours: `${start} - ${end}`,
65
+ ...(localEvents.length > 0
66
+ ? {
67
+ eventCount: localEvents.length,
68
+ events: [...localEvents],
69
+ }
70
+ : {}),
52
71
  };
53
72
  },
54
73
  },
74
+ actions: {
75
+ create: {
76
+ page: 'index',
77
+ requiredPermissions: ['calendar:write'],
78
+ async handler(input: PluginConsoleRpcInput, call: PluginConsoleRpcCall): Promise<PluginConsoleRpcJson> {
79
+ const runtime = resolveCalendarRuntime(call, defaultRuntime);
80
+ const title = typeof input.title === 'string' ? input.title.trim() : '';
81
+ if (!title) {
82
+ throw new PluginConsoleRpcError('invalid_input', '请输入日程标题');
83
+ }
84
+ const date = typeof input.date === 'string' ? input.date.trim() : '';
85
+ if (!/^\d{4}-\d{2}-\d{2}$/u.test(date)) {
86
+ throw new PluginConsoleRpcError('invalid_input', '请提供 YYYY-MM-DD 格式的日期');
87
+ }
88
+ const time =
89
+ typeof input.time === 'string' && input.time.trim()
90
+ ? input.time.trim()
91
+ : '09:00';
92
+ const repeat =
93
+ typeof input.repeat === 'string' &&
94
+ ['none', 'daily', 'weekly', 'monthly', 'yearly'].includes(input.repeat)
95
+ ? input.repeat
96
+ : 'none';
97
+
98
+ let id = randomUUID().slice(0, 8);
99
+ if (runtime.provider) {
100
+ try {
101
+ const start = new Date(`${date}T${time}:00`);
102
+ const end = new Date(start.getTime() + 3600_000);
103
+ if (!Number.isNaN(start.getTime())) {
104
+ const created = await runtime.provider.createEvent(
105
+ { title, start, end },
106
+ call.signal,
107
+ );
108
+ if (created?.id) id = created.id;
109
+ }
110
+ } catch {
111
+ // Keep console event creation working even when external provider is unreachable
112
+ }
113
+ }
114
+
115
+ const eventItem: CalendarConsoleEventItem = {
116
+ id,
117
+ title,
118
+ date,
119
+ time,
120
+ repeat,
121
+ createdAt: new Date().toISOString(),
122
+ };
123
+ localEvents.unshift(eventItem);
124
+ return {
125
+ ok: true,
126
+ id,
127
+ title,
128
+ date,
129
+ time,
130
+ repeat,
131
+ message: `已添加日程:${title} (${date} ${time})`,
132
+ };
133
+ },
134
+ },
135
+ delete: {
136
+ page: 'index',
137
+ requiredPermissions: ['calendar:write'],
138
+ handler(input: PluginConsoleRpcInput, call: PluginConsoleRpcCall): PluginConsoleRpcJson {
139
+ resolveCalendarRuntime(call, defaultRuntime);
140
+ const id = typeof input.id === 'string' ? input.id.trim() : '';
141
+ if (!id) {
142
+ throw new PluginConsoleRpcError('invalid_input', '请提供要删除的日程 ID');
143
+ }
144
+ const idx = localEvents.findIndex((item) => item.id === id);
145
+ const removed = idx >= 0;
146
+ if (removed) {
147
+ localEvents.splice(idx, 1);
148
+ }
149
+ return {
150
+ ok: removed,
151
+ id,
152
+ message: removed ? `已删除日程 ${id}` : `未找到日程 ${id}`,
153
+ };
154
+ },
155
+ },
156
+ },
55
157
  });
56
158
  }
package/src/index.ts CHANGED
@@ -28,7 +28,10 @@ export {
28
28
  } from "./config.js";
29
29
  export { cleanSecret } from "./secrets.js";
30
30
  export { calendarRuntimeToken, type CalendarRuntime } from "./runtime.js";
31
- export { createCalendarConsoleRpc } from "./console.js";
31
+ export {
32
+ createCalendarConsoleRpc,
33
+ type CalendarConsoleEventItem,
34
+ } from "./console.js";
32
35
  export {
33
36
  OAuthTokenManager,
34
37
  OAuthTokenError,