remosidian 0.1.13 → 0.1.15
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 +8 -0
- package/dist/remosidian.mjs +166 -13
- package/dist/remoteDirect/vibelet-remote-direct-darwin-amd64 +0 -0
- package/dist/remoteDirect/vibelet-remote-direct-darwin-arm64 +0 -0
- package/dist/remoteDirect/vibelet-remote-direct-linux-amd64 +0 -0
- package/dist/remoteDirect/vibelet-remote-direct-linux-arm64 +0 -0
- package/dist/remoteDirect/vibelet-remote-direct-win32-amd64.exe +0 -0
- package/dist/remoteDirect/vibelet-remote-direct-win32-arm64.exe +0 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Remosidian CLI 更新日志
|
|
2
2
|
|
|
3
|
+
## 0.1.15
|
|
4
|
+
|
|
5
|
+
- Receive a private assistant inbox with routed messages and conversation notifications.
|
|
6
|
+
|
|
7
|
+
## 0.1.14
|
|
8
|
+
|
|
9
|
+
- Follow proactive assistant routines with model routing and execution receipts.
|
|
10
|
+
|
|
3
11
|
## 0.1.13
|
|
4
12
|
|
|
5
13
|
- Resume paired assistant conversations and cancel stalled replies before continuing.
|
package/dist/remosidian.mjs
CHANGED
|
@@ -16644,6 +16644,8 @@ function isAssistantSummary(value) {
|
|
|
16644
16644
|
v.focus.every((goal) => goal &&
|
|
16645
16645
|
typeof goal.id === 'string' &&
|
|
16646
16646
|
typeof goal.title === 'string' &&
|
|
16647
|
+
typeof goal.source === 'string' &&
|
|
16648
|
+
['project', 'theme'].includes(goal.kind) &&
|
|
16647
16649
|
['active', 'paused', 'blocked', 'review', 'completed'].includes(goal.status) &&
|
|
16648
16650
|
Number.isSafeInteger(goal.priority) &&
|
|
16649
16651
|
typeof goal.summary === 'string' &&
|
|
@@ -16658,11 +16660,39 @@ function isAssistantReply(value) {
|
|
|
16658
16660
|
v.text.length <= 30000 &&
|
|
16659
16661
|
Number.isFinite(v.checkedAt) &&
|
|
16660
16662
|
(v.receiptId === undefined || typeof v.receiptId === 'string') &&
|
|
16663
|
+
(v.runtime === undefined ||
|
|
16664
|
+
(typeof v.runtime === 'object' &&
|
|
16665
|
+
v.runtime !== null &&
|
|
16666
|
+
['cli', 'pi-durable'].includes(v.runtime.engine) &&
|
|
16667
|
+
typeof v.runtime.provider === 'string' &&
|
|
16668
|
+
v.runtime.provider.length <= 100 &&
|
|
16669
|
+
typeof v.runtime.model === 'string' &&
|
|
16670
|
+
v.runtime.model.length <= 200 &&
|
|
16671
|
+
Number.isFinite(v.runtime.durationMs) &&
|
|
16672
|
+
v.runtime.durationMs >= 0 &&
|
|
16673
|
+
Number.isSafeInteger(v.runtime.inputTokens) &&
|
|
16674
|
+
v.runtime.inputTokens >= 0 &&
|
|
16675
|
+
Number.isSafeInteger(v.runtime.outputTokens) &&
|
|
16676
|
+
v.runtime.outputTokens >= 0)) &&
|
|
16677
|
+
(v.receipt === undefined ||
|
|
16678
|
+
(typeof v.receipt === 'object' &&
|
|
16679
|
+
v.receipt !== null &&
|
|
16680
|
+
typeof v.receipt.id === 'string' &&
|
|
16681
|
+
v.receipt.id.length <= 256 &&
|
|
16682
|
+
typeof v.receipt.action === 'string' &&
|
|
16683
|
+
v.receipt.action.length <= 5000 &&
|
|
16684
|
+
v.receipt.status === 'completed' &&
|
|
16685
|
+
(v.receipt.goalId === undefined || (typeof v.receipt.goalId === 'string' && v.receipt.goalId.length <= 256)) &&
|
|
16686
|
+
(v.receipt.goalSource === undefined || typeof v.receipt.goalSource === 'string') &&
|
|
16687
|
+
(v.receipt.goalKind === undefined || ['project', 'theme'].includes(v.receipt.goalKind)) &&
|
|
16688
|
+
Number.isFinite(v.receipt.createdAt))) &&
|
|
16661
16689
|
(v.proposal === undefined ||
|
|
16662
16690
|
(typeof v.proposal === 'object' &&
|
|
16663
16691
|
v.proposal !== null &&
|
|
16664
16692
|
typeof v.proposal.id === 'string' &&
|
|
16665
|
-
typeof v.proposal.description === 'string'
|
|
16693
|
+
typeof v.proposal.description === 'string' &&
|
|
16694
|
+
['L2', 'L3'].includes(v.proposal.risk) &&
|
|
16695
|
+
Number.isFinite(v.proposal.expiresAt))));
|
|
16666
16696
|
}
|
|
16667
16697
|
//# sourceMappingURL=assistant.js.map
|
|
16668
16698
|
;// CONCATENATED MODULE: ../../packages/remosidian-protocol/dist/assistant-signals.js
|
|
@@ -16686,11 +16716,78 @@ function isAssistantSignals(value) {
|
|
|
16686
16716
|
v.notifications.every((x) => x &&
|
|
16687
16717
|
typeof x.id === 'string' &&
|
|
16688
16718
|
typeof x.goalId === 'string' &&
|
|
16689
|
-
['started', 'progress', 'decision', 'review', 'blocked', 'failure', 'completed', 'summary'].includes(x.kind) &&
|
|
16719
|
+
['started', 'progress', 'decision', 'review', 'blocked', 'failure', 'completed', 'summary', 'meeting'].includes(x.kind) &&
|
|
16690
16720
|
typeof x.title === 'string' &&
|
|
16691
16721
|
typeof x.body === 'string' &&
|
|
16692
16722
|
Number.isFinite(x.createdAt) &&
|
|
16693
|
-
typeof x.read === 'boolean'
|
|
16723
|
+
typeof x.read === 'boolean' &&
|
|
16724
|
+
['urgent', 'normal', 'low'].includes(x.priority) &&
|
|
16725
|
+
(x.proposalId === undefined || typeof x.proposalId === 'string')) &&
|
|
16726
|
+
Array.isArray(v.triage) &&
|
|
16727
|
+
v.triage.length <= 50 &&
|
|
16728
|
+
v.triage.every((x) => x &&
|
|
16729
|
+
typeof x.id === 'string' &&
|
|
16730
|
+
(x.goalId === null || typeof x.goalId === 'string') &&
|
|
16731
|
+
typeof x.source === 'string' &&
|
|
16732
|
+
['ignore', 'action', 'uncertain'].includes(x.kind) &&
|
|
16733
|
+
Number.isFinite(x.confidence) &&
|
|
16734
|
+
typeof x.summary === 'string' &&
|
|
16735
|
+
typeof x.reason === 'string' &&
|
|
16736
|
+
typeof x.model === 'string' &&
|
|
16737
|
+
['ignored', 'unassigned', 'pending', 'queued'].includes(x.state) &&
|
|
16738
|
+
(x.matchedBy === undefined || ['model', 'automatic'].includes(x.matchedBy)) &&
|
|
16739
|
+
(x.workflow === undefined || x.workflow === 'meeting-prep') &&
|
|
16740
|
+
(x.feedback === undefined || ['correct', 'incorrect', 'wrong-goal'].includes(x.feedback)) &&
|
|
16741
|
+
(x.replySuggestion === undefined ||
|
|
16742
|
+
(typeof x.replySuggestion === 'string' && x.replySuggestion.length <= 600)) &&
|
|
16743
|
+
typeof x.wouldDo === 'string' &&
|
|
16744
|
+
Number.isFinite(x.createdAt)) &&
|
|
16745
|
+
Boolean(v.shadowReview &&
|
|
16746
|
+
['observed', 'ignored', 'actionable', 'uncertain', 'linked', 'unassigned', 'reviewed'].every((key) => Number.isSafeInteger(v.shadowReview[key]))) &&
|
|
16747
|
+
[0, 1, 2, 3].includes(v.permissionLevel) &&
|
|
16748
|
+
Number.isFinite(v.shadowUntil) &&
|
|
16749
|
+
typeof v.shadowActive === 'boolean' &&
|
|
16750
|
+
typeof v.meetingPrepEnabled === 'boolean' &&
|
|
16751
|
+
Number.isSafeInteger(v.dailyPlanHour) &&
|
|
16752
|
+
v.dailyPlanHour >= 0 &&
|
|
16753
|
+
v.dailyPlanHour <= 23 &&
|
|
16754
|
+
Number.isSafeInteger(v.dailyReviewHour) &&
|
|
16755
|
+
v.dailyReviewHour >= 0 &&
|
|
16756
|
+
v.dailyReviewHour <= 23 &&
|
|
16757
|
+
Number.isSafeInteger(v.activeGoalLimit) &&
|
|
16758
|
+
v.activeGoalLimit >= 3 &&
|
|
16759
|
+
v.activeGoalLimit <= 5 &&
|
|
16760
|
+
Boolean(v.portfolio &&
|
|
16761
|
+
['active', 'review', 'blocked', 'stale'].every((key) => Number.isSafeInteger(v.portfolio[key]))) &&
|
|
16762
|
+
Array.isArray(v.approvals) &&
|
|
16763
|
+
v.approvals.length <= 20 &&
|
|
16764
|
+
v.approvals.every((x) => x &&
|
|
16765
|
+
typeof x.id === 'string' &&
|
|
16766
|
+
typeof x.description === 'string' &&
|
|
16767
|
+
['L2', 'L3'].includes(x.risk) &&
|
|
16768
|
+
typeof x.goalId === 'string' &&
|
|
16769
|
+
Number.isFinite(x.expiresAt)) &&
|
|
16770
|
+
Boolean(v.metrics &&
|
|
16771
|
+
v.metrics.period === 'today' &&
|
|
16772
|
+
Number.isSafeInteger(v.metrics.modelCalls) &&
|
|
16773
|
+
Number.isSafeInteger(v.metrics.inputTokens) &&
|
|
16774
|
+
Number.isSafeInteger(v.metrics.outputTokens) &&
|
|
16775
|
+
(v.metrics.estimatedCostUsd === null || Number.isFinite(v.metrics.estimatedCostUsd)) &&
|
|
16776
|
+
Number.isSafeInteger(v.metrics.completedRuns) &&
|
|
16777
|
+
Number.isSafeInteger(v.metrics.failedRuns) &&
|
|
16778
|
+
Number.isSafeInteger(v.metrics.recoveredErrors) &&
|
|
16779
|
+
Number.isSafeInteger(v.metrics.autoActions) &&
|
|
16780
|
+
Number.isSafeInteger(v.metrics.feedbackCount) &&
|
|
16781
|
+
Number.isSafeInteger(v.metrics.acceptedFeedback) &&
|
|
16782
|
+
Number.isSafeInteger(v.metrics.correctionCount) &&
|
|
16783
|
+
Number.isSafeInteger(v.metrics.ineffectiveCount) &&
|
|
16784
|
+
(v.metrics.suggestionAcceptanceRate === null || Number.isFinite(v.metrics.suggestionAcceptanceRate)) &&
|
|
16785
|
+
Number.isSafeInteger(v.metrics.notificationCount) &&
|
|
16786
|
+
Number.isSafeInteger(v.metrics.unreadNotificationCount) &&
|
|
16787
|
+
(v.metrics.notificationNoiseRate === null || Number.isFinite(v.metrics.notificationNoiseRate)) &&
|
|
16788
|
+
Array.isArray(v.metrics.goalProgress) &&
|
|
16789
|
+
v.metrics.goalProgress.length <= 5 &&
|
|
16790
|
+
v.metrics.goalProgress.every((item) => item && typeof item.goalId === 'string' && typeof item.title === 'string' && Number.isSafeInteger(item.runs))));
|
|
16694
16791
|
}
|
|
16695
16792
|
//# sourceMappingURL=assistant-signals.js.map
|
|
16696
16793
|
;// CONCATENATED MODULE: ../../packages/lifeos-query-contracts/dist/viewModes.js
|
|
@@ -16890,7 +16987,17 @@ const vaultId = { vaultId: isId };
|
|
|
16890
16987
|
const pathField = { path: isPath };
|
|
16891
16988
|
const schemas = {
|
|
16892
16989
|
'assistant.signals': { required: { ...id, ...vaultId, customerId: isId } },
|
|
16893
|
-
'assistant.inbox.configure': {
|
|
16990
|
+
'assistant.inbox.configure': {
|
|
16991
|
+
required: { ...id, ...vaultId, customerId: isId, enabled: request_validation_isBoolean },
|
|
16992
|
+
optional: {
|
|
16993
|
+
permissionLevel: oneOf(0, 1, 2, 3),
|
|
16994
|
+
dailyPlanHour: (value) => Number.isSafeInteger(value) && Number(value) >= 0 && Number(value) <= 23,
|
|
16995
|
+
dailyReviewHour: (value) => Number.isSafeInteger(value) && Number(value) >= 0 && Number(value) <= 23,
|
|
16996
|
+
activeGoalLimit: oneOf(3, 4, 5),
|
|
16997
|
+
shadowHours: oneOf(0, 48),
|
|
16998
|
+
meetingPrepEnabled: request_validation_isBoolean,
|
|
16999
|
+
},
|
|
17000
|
+
},
|
|
16894
17001
|
'assistant.inbox.receive': {
|
|
16895
17002
|
required: {
|
|
16896
17003
|
...id,
|
|
@@ -16903,6 +17010,16 @@ const schemas = {
|
|
|
16903
17010
|
},
|
|
16904
17011
|
},
|
|
16905
17012
|
'assistant.notice.read': { required: { ...id, ...vaultId, customerId: isId, noticeId: isId } },
|
|
17013
|
+
'assistant.feedback': {
|
|
17014
|
+
required: {
|
|
17015
|
+
...id,
|
|
17016
|
+
...vaultId,
|
|
17017
|
+
customerId: isId,
|
|
17018
|
+
targetType: oneOf('notice', 'proposal', 'triage'),
|
|
17019
|
+
targetId: isId,
|
|
17020
|
+
action: oneOf('accepted', 'rejected', 'later', 'mute', 'correct', 'incorrect', 'wrong-goal'),
|
|
17021
|
+
},
|
|
17022
|
+
},
|
|
16906
17023
|
'assistant.push.register': {
|
|
16907
17024
|
required: { ...id, ...vaultId, customerId: isId, deviceId: isId, token: boundedString(256), enabled: request_validation_isBoolean },
|
|
16908
17025
|
},
|
|
@@ -17041,6 +17158,7 @@ const responseValidators = {
|
|
|
17041
17158
|
duplicate: response_validation_isBoolean,
|
|
17042
17159
|
}),
|
|
17043
17160
|
'assistant.notice.read': isAssistantSignals,
|
|
17161
|
+
'assistant.feedback': isAssistantSignals,
|
|
17044
17162
|
'assistant.push.register': objectWith({ enabled: response_validation_isBoolean }),
|
|
17045
17163
|
'assistant.configure': isAssistantStatus,
|
|
17046
17164
|
'assistant.chat': isAssistantReply,
|
|
@@ -19059,10 +19177,22 @@ class AssistantPush {
|
|
|
19059
19177
|
!feed.notifications.every((n) => typeof n.id === 'string' &&
|
|
19060
19178
|
Number.isSafeInteger(n.sequence) &&
|
|
19061
19179
|
n.sequence > device.cursor &&
|
|
19062
|
-
[
|
|
19180
|
+
[
|
|
19181
|
+
'started',
|
|
19182
|
+
'progress',
|
|
19183
|
+
'decision',
|
|
19184
|
+
'review',
|
|
19185
|
+
'blocked',
|
|
19186
|
+
'failure',
|
|
19187
|
+
'completed',
|
|
19188
|
+
'summary',
|
|
19189
|
+
'meeting',
|
|
19190
|
+
].includes(n.kind) &&
|
|
19063
19191
|
typeof n.title === 'string' &&
|
|
19064
19192
|
typeof n.body === 'string' &&
|
|
19065
|
-
typeof n.read === 'boolean'
|
|
19193
|
+
typeof n.read === 'boolean' &&
|
|
19194
|
+
['urgent', 'normal', 'low'].includes(n.priority) &&
|
|
19195
|
+
(n.proposalId === undefined || typeof n.proposalId === 'string')))
|
|
19066
19196
|
throw Error('Invalid notice feed');
|
|
19067
19197
|
for (const notice of feed.notifications) {
|
|
19068
19198
|
if (!notice.read)
|
|
@@ -19073,6 +19203,8 @@ class AssistantPush {
|
|
|
19073
19203
|
state: 'queued',
|
|
19074
19204
|
attempts: 0,
|
|
19075
19205
|
nextAt: this.now(),
|
|
19206
|
+
priority: notice.priority,
|
|
19207
|
+
...(notice.proposalId ? { proposalId: notice.proposalId } : {}),
|
|
19076
19208
|
});
|
|
19077
19209
|
device.cursor = Math.max(device.cursor, notice.sequence);
|
|
19078
19210
|
}
|
|
@@ -19121,11 +19253,14 @@ class AssistantPush {
|
|
|
19121
19253
|
body: '打开置顶会话查看详情。',
|
|
19122
19254
|
sound: 'default',
|
|
19123
19255
|
channelId: 'personal-assistant',
|
|
19256
|
+
categoryId: ticket.proposalId ? 'personal-agent-approval' : 'personal-agent-update',
|
|
19257
|
+
priority: ticket.priority === 'urgent' ? 'high' : ticket.priority === 'low' ? 'normal' : 'default',
|
|
19124
19258
|
data: {
|
|
19125
19259
|
type: 'personal-assistant',
|
|
19126
19260
|
daemonId: this.options.daemonId,
|
|
19127
19261
|
vaultId: device.vaultId,
|
|
19128
19262
|
noticeId: ticket.noticeId,
|
|
19263
|
+
...(ticket.proposalId ? { proposalId: ticket.proposalId } : {}),
|
|
19129
19264
|
},
|
|
19130
19265
|
ttl: 3600,
|
|
19131
19266
|
});
|
|
@@ -23323,11 +23458,14 @@ const PRIORITY_ORDER = {
|
|
|
23323
23458
|
low: 4,
|
|
23324
23459
|
lowest: 5,
|
|
23325
23460
|
};
|
|
23461
|
+
function comparePlanningPriority(left, right) {
|
|
23462
|
+
return PRIORITY_ORDER[task_getPlanningPriority(left)] - PRIORITY_ORDER[task_getPlanningPriority(right)];
|
|
23463
|
+
}
|
|
23326
23464
|
function comparePlanningTasks(left, right) {
|
|
23327
23465
|
const leftDate = getPlanningAnchorDate(left) ?? '9999-12-31';
|
|
23328
23466
|
const rightDate = getPlanningAnchorDate(right) ?? '9999-12-31';
|
|
23329
23467
|
return (leftDate.localeCompare(rightDate) ||
|
|
23330
|
-
|
|
23468
|
+
comparePlanningPriority(left, right) ||
|
|
23331
23469
|
left.title.localeCompare(right.title) ||
|
|
23332
23470
|
left.file.localeCompare(right.file) ||
|
|
23333
23471
|
left.line - right.line);
|
|
@@ -23341,8 +23479,7 @@ function task_sortPlanningTasks(tasks, sortBy = 'planning-date') {
|
|
|
23341
23479
|
if (sortBy === 'source') {
|
|
23342
23480
|
return sorted.sort((left, right) => left.file.localeCompare(right.file) || left.line - right.line || left.title.localeCompare(right.title));
|
|
23343
23481
|
}
|
|
23344
|
-
return sorted.sort((left, right) =>
|
|
23345
|
-
comparePlanningTasks(left, right));
|
|
23482
|
+
return sorted.sort((left, right) => comparePlanningPriority(left, right) || comparePlanningTasks(left, right));
|
|
23346
23483
|
}
|
|
23347
23484
|
|
|
23348
23485
|
;// CONCATENATED MODULE: ../../packages/task-core/dist/collections.js
|
|
@@ -30985,16 +31122,29 @@ class RemosidianAssistant {
|
|
|
30985
31122
|
throw new VaultRequestError('请先在设置中开启 Personal Agent。', 'forbidden');
|
|
30986
31123
|
if (req.op === 'assistant.signals' ||
|
|
30987
31124
|
req.op === 'assistant.inbox.configure' ||
|
|
30988
|
-
req.op === 'assistant.notice.read'
|
|
31125
|
+
req.op === 'assistant.notice.read' ||
|
|
31126
|
+
req.op === 'assistant.feedback') {
|
|
30989
31127
|
const result = await this.call(vault.root, req.op === 'assistant.signals'
|
|
30990
31128
|
? '/api/signals'
|
|
30991
31129
|
: req.op === 'assistant.notice.read'
|
|
30992
31130
|
? '/api/signals/read'
|
|
30993
|
-
:
|
|
31131
|
+
: req.op === 'assistant.feedback'
|
|
31132
|
+
? '/api/signals/feedback'
|
|
31133
|
+
: '/api/signals/configure', signal, req.op === 'assistant.signals'
|
|
30994
31134
|
? undefined
|
|
30995
31135
|
: req.op === 'assistant.notice.read'
|
|
30996
31136
|
? { noticeId: req.noticeId }
|
|
30997
|
-
:
|
|
31137
|
+
: req.op === 'assistant.feedback'
|
|
31138
|
+
? { targetType: req.targetType, targetId: req.targetId, action: req.action }
|
|
31139
|
+
: {
|
|
31140
|
+
enabled: req.enabled,
|
|
31141
|
+
permissionLevel: req.permissionLevel,
|
|
31142
|
+
dailyPlanHour: req.dailyPlanHour,
|
|
31143
|
+
dailyReviewHour: req.dailyReviewHour,
|
|
31144
|
+
activeGoalLimit: req.activeGoalLimit,
|
|
31145
|
+
shadowHours: req.shadowHours,
|
|
31146
|
+
meetingPrepEnabled: req.meetingPrepEnabled,
|
|
31147
|
+
});
|
|
30998
31148
|
if (!isAssistantSignals(result))
|
|
30999
31149
|
throw Error('收件箱响应格式无效。');
|
|
31000
31150
|
return result;
|
|
@@ -31050,6 +31200,8 @@ class RemosidianAssistant {
|
|
|
31050
31200
|
.map((goal) => ({
|
|
31051
31201
|
id: goal.id,
|
|
31052
31202
|
title: goal.title.slice(0, 160),
|
|
31203
|
+
source: goal.source.slice(0, 1000),
|
|
31204
|
+
kind: goal.kind,
|
|
31053
31205
|
status: goal.status,
|
|
31054
31206
|
priority: goal.priority,
|
|
31055
31207
|
summary: goal.summary.slice(0, 500),
|
|
@@ -33838,7 +33990,7 @@ function runFileBackedPluginTurn(input, prompt, options, onDelta) {
|
|
|
33838
33990
|
}
|
|
33839
33991
|
//# sourceMappingURL=chat-plugin-runtime.js.map
|
|
33840
33992
|
;// CONCATENATED MODULE: ../../packages/remosidian-server/dist/version.js
|
|
33841
|
-
const VERSION = '0.1.
|
|
33993
|
+
const VERSION = '0.1.15';
|
|
33842
33994
|
//# sourceMappingURL=version.js.map
|
|
33843
33995
|
;// CONCATENATED MODULE: ../../packages/remosidian-server/dist/chat-runtime.js
|
|
33844
33996
|
|
|
@@ -34754,6 +34906,7 @@ async function handleRemosidianRequest(req, vaultService, chatService, conversat
|
|
|
34754
34906
|
case 'assistant.inbox.configure':
|
|
34755
34907
|
case 'assistant.inbox.receive':
|
|
34756
34908
|
case 'assistant.notice.read':
|
|
34909
|
+
case 'assistant.feedback':
|
|
34757
34910
|
case 'assistant.push.register':
|
|
34758
34911
|
if (!context.assistant)
|
|
34759
34912
|
return invalidResponse(req.id, '此服务器尚未支持 Personal Agent,请更新电脑端。');
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|