@undefineds.co/linx 0.3.30 → 0.3.31
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/dist/lib/codex-plugin/symphony-mcp.js +3 -3
- package/dist/lib/codex-plugin/symphony-mcp.js.map +1 -1
- package/dist/lib/linx-interactive-command-routing.js +0 -2
- package/dist/lib/linx-interactive-command-routing.js.map +1 -1
- package/dist/lib/linx-interactive-shell-state.js +0 -31
- package/dist/lib/linx-interactive-shell-state.js.map +1 -1
- package/dist/lib/linx-pod-mirror.js +55 -5
- package/dist/lib/linx-pod-mirror.js.map +1 -1
- package/dist/lib/linx-runtime-resources.js +1 -1
- package/dist/lib/linx-runtime-resources.js.map +1 -1
- package/dist/lib/linx-symphony-interactive-command.js +6 -12
- package/dist/lib/linx-symphony-interactive-command.js.map +1 -1
- package/dist/lib/symphony/run.js +166 -4
- package/dist/lib/symphony/run.js.map +1 -1
- package/dist/lib/symphony/runtime.js +7 -1
- package/dist/lib/symphony/runtime.js.map +1 -1
- package/dist/plugins/{linx-symphony-codex → linx-symphony}/.codex-plugin/plugin.json +7 -8
- package/dist/plugins/{linx-symphony-codex → linx-symphony}/README.md +3 -3
- package/dist/plugins/{linx-symphony-codex → linx-symphony}/scripts/symphony-mcp.mjs +3 -3
- package/dist/plugins/{linx-symphony-codex → linx-symphony}/skills/symphony/SKILL.md +39 -8
- package/dist/skills/capture/SKILL.md +95 -0
- package/dist/skills/symphony/SKILL.md +39 -8
- package/dist/skills/xpod-cli/SKILL.md +5 -5
- package/package.json +1 -1
- package/dist/lib/linx-interactive-idea-capture.js +0 -294
- package/dist/lib/linx-interactive-idea-capture.js.map +0 -1
- /package/dist/plugins/{linx-symphony-codex → linx-symphony}/.mcp.json +0 -0
- /package/dist/plugins/{linx-symphony-codex → linx-symphony}/hooks.json +0 -0
- /package/dist/plugins/{linx-symphony-codex → linx-symphony}/scripts/symphony-hook-events.mjs +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: capture
|
|
3
|
+
description: Use when the current AI needs to decide whether a user message contains a durable idea, decision, preference, memory, research finding, or project rule worth saving to the user's Pod. The AI decides; the shell must not pre-classify ordinary chat with keyword heuristics.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Capture
|
|
7
|
+
|
|
8
|
+
Capture is an AI judgment workflow, not a shell keyword detector.
|
|
9
|
+
|
|
10
|
+
Use this skill when the current conversation may contain something durable:
|
|
11
|
+
|
|
12
|
+
- a product or architecture idea;
|
|
13
|
+
- a design decision or rejected alternative;
|
|
14
|
+
- a user preference, personal rule, or recurring instruction;
|
|
15
|
+
- a research finding with provenance;
|
|
16
|
+
- an important project context note;
|
|
17
|
+
- an explicit request such as “记下来”, “保存”, “抓进 Pod”, “capture this”.
|
|
18
|
+
|
|
19
|
+
Do not capture ordinary exploratory chat, transient commands, social chatter, or
|
|
20
|
+
statements whose meaning is still unclear.
|
|
21
|
+
|
|
22
|
+
## Decision Rule
|
|
23
|
+
|
|
24
|
+
The active AI decides whether to capture based on current context. Do not rely on
|
|
25
|
+
literal trigger words such as “是不是”, “应该”, “maybe”, or “idea” by themselves.
|
|
26
|
+
A capture is appropriate only when saving the statement would improve future
|
|
27
|
+
recall, planning, personalization, or system evolution.
|
|
28
|
+
|
|
29
|
+
When unsure, ask one concise clarification or continue the conversation without
|
|
30
|
+
capturing. Do not announce internal classification unless the user asked about
|
|
31
|
+
capture.
|
|
32
|
+
|
|
33
|
+
## How To Write
|
|
34
|
+
|
|
35
|
+
Use `xpod` as the Pod tool surface. Prefer modeled object commands when
|
|
36
|
+
available. Do not hand-write Turtle for modeled product resources.
|
|
37
|
+
|
|
38
|
+
## Login And No-Login Behavior
|
|
39
|
+
|
|
40
|
+
Prefer LinX when the current host is LinX. Use the host application's normal
|
|
41
|
+
Solid/LinX login flow. In LinX interactive runtime, tell the user to use
|
|
42
|
+
`/login` only when a real Pod write requires it. For scriptable LinX sessions,
|
|
43
|
+
use:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
linx login
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Keep `xpod` available for Codex, Claude Code, and other external agent shells.
|
|
50
|
+
Those hosts usually do not have the LinX runtime bridge or product local-first
|
|
51
|
+
outbox, so `xpod` is the direct Pod tool surface:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
xpod auth login
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
LinX and xpod should use the same Solid authority under
|
|
58
|
+
`$SOLID_HOME/auth` (default `~/.solid/auth`). Do not treat old
|
|
59
|
+
`~/.xpod/config.json` or `~/.xpod/secrets.json` as proof of login.
|
|
60
|
+
|
|
61
|
+
Do not ask the model to handle raw tokens, refresh tokens, cookies, DPoP
|
|
62
|
+
material, client secrets, or copied browser session data.
|
|
63
|
+
|
|
64
|
+
No-login use is still valid. The AI may still decide what should be captured and
|
|
65
|
+
continue the conversation. If a durable write is required before login, use the
|
|
66
|
+
host's local-first capture/outbox path when available. In LinX, mark the record
|
|
67
|
+
as pending Pod persistence so LinX can replay it after login. In Codex/Claude
|
|
68
|
+
without a local-first host, keep a local note/report and state that it is not
|
|
69
|
+
shared to the Pod yet. Missing login must not make the AI drop a durable
|
|
70
|
+
decision, Idea, preference, or project rule.
|
|
71
|
+
|
|
72
|
+
Before writing, verify the Solid authority when the operation is not purely
|
|
73
|
+
local:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
xpod auth status --json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
For modeled product resources, inspect the descriptor or existing examples first:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
xpod obj --help
|
|
83
|
+
xpod obj export Idea --json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Then write through the modeled object surface. If the current xpod version does
|
|
87
|
+
not expose a suitable modeled command, report the blocker instead of inventing a
|
|
88
|
+
path.
|
|
89
|
+
|
|
90
|
+
## Reporting
|
|
91
|
+
|
|
92
|
+
- If captured, mention the durable summary briefly only when useful.
|
|
93
|
+
- If capture failed, state the persistence blocker without pretending the item
|
|
94
|
+
was saved.
|
|
95
|
+
- If not captured, answer normally; do not explain that capture was skipped.
|
|
@@ -99,6 +99,35 @@ different WebID or Pod root than the shared Solid auth file, treat it as an
|
|
|
99
99
|
auth-store mismatch and stop before writing. Never ask the model to handle raw
|
|
100
100
|
tokens, refresh tokens, client secrets, cookies, or DPoP material directly.
|
|
101
101
|
|
|
102
|
+
## Login And No-Login Behavior
|
|
103
|
+
|
|
104
|
+
No-login use is still valid. Symphony can run in portable local mode inside
|
|
105
|
+
LinX, Codex, Claude Code, or another agent shell without a Solid login. In that
|
|
106
|
+
mode it may keep local control records, Markdown/JSON notes, task briefs,
|
|
107
|
+
worker reports, Delivery files, and host-provided local-first outbox entries.
|
|
108
|
+
Those records are durable local working state, but they are not cross-device
|
|
109
|
+
shared authority and must not be described as saved to the user's Pod. Local
|
|
110
|
+
mode is not cross-device shared authority.
|
|
111
|
+
|
|
112
|
+
When the current host is LinX and shared Pod state is required, prefer the LinX
|
|
113
|
+
login surface: `/login` in interactive sessions or `linx login` in scriptable
|
|
114
|
+
sessions. LinX owns the product local-first path: before login it may record
|
|
115
|
+
pending control writes locally and replay them after login or auth recovery.
|
|
116
|
+
|
|
117
|
+
When the current host is Codex, Claude Code, or another external agent shell,
|
|
118
|
+
keep `xpod` available as the neutral Solid/Pod tool surface:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
xpod auth login
|
|
122
|
+
xpod auth status --json
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
If `xpod` is unauthenticated or unavailable, continue the Symphony reasoning and
|
|
126
|
+
local record/report work, but state the persistence limitation when a Pod write
|
|
127
|
+
was requested. Do not block ordinary control-lane analysis, task splitting,
|
|
128
|
+
Delivery review, or follow-up extraction solely because the user has not logged
|
|
129
|
+
in.
|
|
130
|
+
|
|
102
131
|
## Agent Config And Skill Resources
|
|
103
132
|
|
|
104
133
|
Do not treat an agent's backend, model, credentials, tools, or skills as hidden
|
|
@@ -313,12 +342,13 @@ lane updates Pod plus repo docs.
|
|
|
313
342
|
Use Idea as the buffer between fragmented conversation and committed system
|
|
314
343
|
work.
|
|
315
344
|
|
|
316
|
-
Capture is a Secretary/
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
345
|
+
Capture is a Secretary/AI skill capability, not a Symphony mode switch and not a
|
|
346
|
+
shell keyword preflight. The active AI decides whether meaningful but
|
|
347
|
+
uncommitted fragments from ordinary chat should be captured, then uses the
|
|
348
|
+
capture skill and Pod tool surface to save them. Symphony consumes captured
|
|
349
|
+
Ideas when it is active. Capture as Ideas when the fragment describes a possible
|
|
350
|
+
system direction, concern, product capability, modeling principle, or
|
|
351
|
+
improvement area. Do not capture ordinary chat, games, or one-off explanations.
|
|
322
352
|
|
|
323
353
|
An Idea record should stay small and explicit:
|
|
324
354
|
|
|
@@ -343,8 +373,9 @@ Promotion gates:
|
|
|
343
373
|
- Promote to Work/Task only after implementation boundary, evidence plan, and
|
|
344
374
|
blocker rules are explicit.
|
|
345
375
|
|
|
346
|
-
Symphony may
|
|
347
|
-
|
|
376
|
+
Symphony may decide to use the capture skill and merge Ideas, but it must not
|
|
377
|
+
treat keyword matches or raw chat text as committed product semantics or
|
|
378
|
+
dispatchable work.
|
|
348
379
|
If commitment is unclear, keep it as `thought` or `candidate` and continue
|
|
349
380
|
discussion.
|
|
350
381
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: xpod-cli
|
|
3
|
-
description: Use when
|
|
3
|
+
description: Use when an AI agent needs to inspect, import, export, or update Solid Pod resources through the xpod command line; especially user-owned files, RDF resources, descriptor-backed objects, JSON output, and secret-safe operations. This skill is for using xpod CLI in product workflows, not for maintaining the xpod CLI implementation.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Xpod CLI
|
|
7
7
|
|
|
8
|
-
Use `xpod` as the default terminal surface for Solid Pod operations
|
|
9
|
-
This replaces ad-hoc `pod_read` / `pod_write` style tools:
|
|
10
|
-
prefer one shared CLI contract for Pod files, RDF resources,
|
|
11
|
-
secrets.
|
|
8
|
+
Use `xpod` as the default terminal surface for Solid Pod operations when the
|
|
9
|
+
command is available. This replaces ad-hoc `pod_read` / `pod_write` style tools:
|
|
10
|
+
the product should prefer one shared CLI contract for Pod files, RDF resources,
|
|
11
|
+
objects, and secrets.
|
|
12
12
|
|
|
13
13
|
## When To Use
|
|
14
14
|
|
package/package.json
CHANGED
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { upsertExactRecord } from '@undefineds.co/drizzle-solid';
|
|
3
|
-
import { showLinxInteractiveError } from './linx-interactive-error-display.js';
|
|
4
|
-
import { showLinxInteractiveStatus } from './linx-interactive-status-display.js';
|
|
5
|
-
import { DEFAULT_SECRETARY_CHAT_ID, secretaryChatUri, secretaryThreadUri } from './pod-mirror-mapping.js';
|
|
6
|
-
import { resolveLinxInteractivePodWebId } from './linx-interactive-runtime-host.js';
|
|
7
|
-
import { resolveLinxSessionId } from './linx-session-metadata.js';
|
|
8
|
-
import { registerLinxInteractiveSubmitHandler } from './linx-interactive-submit-router.js';
|
|
9
|
-
import { getDefaultPodDataSession } from './pod-data-session.js';
|
|
10
|
-
import { getLinxInteractiveCaptureIdea, getLinxInteractiveIdeaCaptureForegroundTimeoutMs, setLinxInteractiveLastIdeaCapture, } from './linx-interactive-shell-state.js';
|
|
11
|
-
import { chatResource, drizzle, ideaResource, solidResources, threadResource, } from './models.js';
|
|
12
|
-
const ideaCaptureInstalled = new WeakSet();
|
|
13
|
-
const DEFAULT_IDEA_CAPTURE_FOREGROUND_TIMEOUT_MS = 1_500;
|
|
14
|
-
export function installLinxInteractiveIdeaCapture(interactive, runtime) {
|
|
15
|
-
if (!interactive || ideaCaptureInstalled.has(interactive)) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
registerLinxInteractiveSubmitHandler(interactive, {
|
|
19
|
-
name: 'linx-idea-capture',
|
|
20
|
-
priority: 10,
|
|
21
|
-
async handler({ interactive: target, input }) {
|
|
22
|
-
if (!shouldConsiderIdeaCaptureInput(input) || !shouldCaptureIdeaInput(input)) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
showLinxInteractiveStatus(target, 'Capturing Idea…');
|
|
26
|
-
const capture = captureInteractiveIdeaForInput(target, runtime, input);
|
|
27
|
-
const projection = await waitForForegroundIdeaCapture(capture, resolveIdeaCaptureForegroundTimeoutMs(target));
|
|
28
|
-
setLinxInteractiveLastIdeaCapture(target, input, projection);
|
|
29
|
-
if (projection?.kind === 'pending') {
|
|
30
|
-
showLinxInteractiveStatus(target, 'Idea capture is still running; continuing chat.');
|
|
31
|
-
void capture.catch((error) => {
|
|
32
|
-
const normalized = normalizeError(error);
|
|
33
|
-
showLinxInteractiveError(target, `Capture failed: ${normalized.message}`);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
ideaCaptureInstalled.add(interactive);
|
|
40
|
-
}
|
|
41
|
-
function resolveIdeaCaptureForegroundTimeoutMs(interactive) {
|
|
42
|
-
const configured = getLinxInteractiveIdeaCaptureForegroundTimeoutMs(interactive);
|
|
43
|
-
return typeof configured === 'number' && Number.isFinite(configured) && configured >= 0
|
|
44
|
-
? configured
|
|
45
|
-
: DEFAULT_IDEA_CAPTURE_FOREGROUND_TIMEOUT_MS;
|
|
46
|
-
}
|
|
47
|
-
async function waitForForegroundIdeaCapture(capture, timeoutMs) {
|
|
48
|
-
let timeout;
|
|
49
|
-
try {
|
|
50
|
-
return await Promise.race([
|
|
51
|
-
capture,
|
|
52
|
-
new Promise((resolve) => {
|
|
53
|
-
timeout = setTimeout(() => {
|
|
54
|
-
resolve({ kind: 'pending', message: 'Idea capture is still running downstream.' });
|
|
55
|
-
}, timeoutMs);
|
|
56
|
-
}),
|
|
57
|
-
]);
|
|
58
|
-
}
|
|
59
|
-
finally {
|
|
60
|
-
if (timeout) {
|
|
61
|
-
clearTimeout(timeout);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export async function captureInteractiveIdeaForInput(interactive, runtime, input, options = {}) {
|
|
66
|
-
try {
|
|
67
|
-
const source = await resolveIdeaSourceContext(interactive, runtime);
|
|
68
|
-
const context = await captureIdeaIfNeeded(input, source, getLinxInteractiveCaptureIdea(interactive), options.podRuntime);
|
|
69
|
-
if (!context) {
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
|
-
showLinxInteractiveStatus(interactive, `Captured Idea: ${context.summary} (${context.status}).`);
|
|
73
|
-
return { kind: 'captured', context };
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
const normalized = normalizeError(error);
|
|
77
|
-
showLinxInteractiveError(interactive, `Capture failed: ${normalized.message}`);
|
|
78
|
-
return { kind: 'failed', error: normalized };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
export function renderIdeaCaptureProjection(ideaCapture) {
|
|
82
|
-
if (!ideaCapture) {
|
|
83
|
-
return [];
|
|
84
|
-
}
|
|
85
|
-
if (ideaCapture.kind === 'captured') {
|
|
86
|
-
return [
|
|
87
|
-
'',
|
|
88
|
-
'Capture status:',
|
|
89
|
-
'Idea already captured before this model turn.',
|
|
90
|
-
`URI: ${ideaCapture.context.uri}`,
|
|
91
|
-
`Summary: ${ideaCapture.context.summary}`,
|
|
92
|
-
`Status: ${ideaCapture.context.status}`,
|
|
93
|
-
`Commitment: ${ideaCapture.context.commitment}`,
|
|
94
|
-
'Do not ask the user to repeat this capture and do not claim capture is still pending.',
|
|
95
|
-
];
|
|
96
|
-
}
|
|
97
|
-
if (ideaCapture.kind === 'pending') {
|
|
98
|
-
return [
|
|
99
|
-
'',
|
|
100
|
-
'Capture status:',
|
|
101
|
-
'Idea capture started before this model turn but is still waiting on a downstream Pod call.',
|
|
102
|
-
`Status: ${ideaCapture.message}`,
|
|
103
|
-
'Do not claim it was captured yet. Continue the answer normally and mention the pending capture only if relevant.',
|
|
104
|
-
];
|
|
105
|
-
}
|
|
106
|
-
return [
|
|
107
|
-
'',
|
|
108
|
-
'Capture status:',
|
|
109
|
-
'Idea capture was required but Pod write failed before this model turn.',
|
|
110
|
-
`Error: ${ideaCapture.error.message}`,
|
|
111
|
-
'Do not claim it was captured. Surface the persistence blocker briefly if the user-facing answer would otherwise imply durable capture.',
|
|
112
|
-
];
|
|
113
|
-
}
|
|
114
|
-
export function serializeIdeaCaptureProjection(ideaCapture) {
|
|
115
|
-
if (ideaCapture.kind === 'captured') {
|
|
116
|
-
return {
|
|
117
|
-
kind: 'captured',
|
|
118
|
-
...ideaCapture.context,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
if (ideaCapture.kind === 'pending') {
|
|
122
|
-
return {
|
|
123
|
-
kind: 'pending',
|
|
124
|
-
message: ideaCapture.message,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
return {
|
|
128
|
-
kind: 'failed',
|
|
129
|
-
message: ideaCapture.error.message,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
function shouldConsiderIdeaCaptureInput(input) {
|
|
133
|
-
return Boolean(input)
|
|
134
|
-
&& !input.startsWith('/')
|
|
135
|
-
&& !input.startsWith('!');
|
|
136
|
-
}
|
|
137
|
-
async function captureIdeaIfNeeded(input, source, captureIdea, runtime) {
|
|
138
|
-
if (!shouldCaptureIdeaInput(input)) {
|
|
139
|
-
return undefined;
|
|
140
|
-
}
|
|
141
|
-
if (captureIdea) {
|
|
142
|
-
return normalizeCapturedIdeaContext(await captureIdea(input, source));
|
|
143
|
-
}
|
|
144
|
-
return persistCapturedIdeaToPod({
|
|
145
|
-
input,
|
|
146
|
-
source,
|
|
147
|
-
affectedArea: inferIdeaAffectedArea(input),
|
|
148
|
-
runtime,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
async function persistCapturedIdeaToPod(input) {
|
|
152
|
-
const runtime = input.runtime ?? createDefaultIdeaCaptureRuntime();
|
|
153
|
-
const podSession = await runtime.getPodDataSession();
|
|
154
|
-
if (!podSession) {
|
|
155
|
-
throw new Error('No active Pod session; Idea capture requires LinX/Solid login.');
|
|
156
|
-
}
|
|
157
|
-
const db = runtime.createDb(podSession);
|
|
158
|
-
const now = new Date();
|
|
159
|
-
const row = buildCapturedIdeaRow({
|
|
160
|
-
input: input.input,
|
|
161
|
-
source: input.source,
|
|
162
|
-
webId: podSession.webId,
|
|
163
|
-
now,
|
|
164
|
-
affectedArea: input.affectedArea,
|
|
165
|
-
});
|
|
166
|
-
await db.init([
|
|
167
|
-
runtime.ideaResource,
|
|
168
|
-
runtime.chatResource,
|
|
169
|
-
runtime.threadResource,
|
|
170
|
-
]).catch(() => undefined);
|
|
171
|
-
await upsertExactRecord(db, runtime.ideaResource, { id: row.id }, row, {
|
|
172
|
-
operation: 'linx.capture.idea.upsert',
|
|
173
|
-
});
|
|
174
|
-
return {
|
|
175
|
-
uri: runtime.ideaResource.buildIri(podSession.webId, { id: row.id, createdAt: row.createdAt }),
|
|
176
|
-
summary: row.summary,
|
|
177
|
-
status: row.status,
|
|
178
|
-
commitment: row.commitment,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
function createDefaultIdeaCaptureRuntime() {
|
|
182
|
-
return {
|
|
183
|
-
getPodDataSession: getDefaultPodDataSession,
|
|
184
|
-
createDb(podSession) {
|
|
185
|
-
return drizzle(podSession.solidSession, {
|
|
186
|
-
logger: false,
|
|
187
|
-
disableInteropDiscovery: true,
|
|
188
|
-
podUrl: podSession.podUrl,
|
|
189
|
-
resourcePreparation: 'best-effort',
|
|
190
|
-
schema: solidResources,
|
|
191
|
-
});
|
|
192
|
-
},
|
|
193
|
-
ideaResource,
|
|
194
|
-
chatResource,
|
|
195
|
-
threadResource,
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
function buildCapturedIdeaRow(input) {
|
|
199
|
-
const text = input.input.trim();
|
|
200
|
-
const summary = summarizeIdeaInput(text);
|
|
201
|
-
const id = buildIdeaResourceId(input.now);
|
|
202
|
-
return {
|
|
203
|
-
id,
|
|
204
|
-
summary,
|
|
205
|
-
input: text,
|
|
206
|
-
status: 'captured',
|
|
207
|
-
commitment: 'thought',
|
|
208
|
-
affectedArea: input.affectedArea,
|
|
209
|
-
currentUnderstanding: text,
|
|
210
|
-
openQuestions: [],
|
|
211
|
-
related: [],
|
|
212
|
-
conflicts: [],
|
|
213
|
-
nextStep: 'Review this captured Idea against related conversation and promote only after scope and commitment are clear.',
|
|
214
|
-
chat: input.source?.chat,
|
|
215
|
-
thread: input.source?.thread,
|
|
216
|
-
sourceMessages: [],
|
|
217
|
-
createdBy: input.webId,
|
|
218
|
-
metadata: {
|
|
219
|
-
surface: 'linx-capture',
|
|
220
|
-
source: 'interactive-user-message',
|
|
221
|
-
...(input.source?.sessionId ? { sessionId: input.source.sessionId } : {}),
|
|
222
|
-
},
|
|
223
|
-
createdAt: input.now,
|
|
224
|
-
updatedAt: input.now,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
function buildIdeaResourceId(now) {
|
|
228
|
-
const yyyy = String(now.getUTCFullYear()).padStart(4, '0');
|
|
229
|
-
const mm = String(now.getUTCMonth() + 1).padStart(2, '0');
|
|
230
|
-
const dd = String(now.getUTCDate()).padStart(2, '0');
|
|
231
|
-
return `${yyyy}/${mm}/${dd}.ttl#idea_${now.toISOString().replace(/[-:.TZ]/g, '')}_${randomUUID().slice(0, 8)}`;
|
|
232
|
-
}
|
|
233
|
-
function shouldCaptureIdeaInput(input) {
|
|
234
|
-
const normalized = input.trim();
|
|
235
|
-
if (normalized.length < 12) {
|
|
236
|
-
return false;
|
|
237
|
-
}
|
|
238
|
-
return /\b(idea|maybe|perhaps|could we|should we|what if|proposal|direction)\b/iu.test(normalized)
|
|
239
|
-
|| /(我觉得|感觉|也许|可能|考虑|想法|方向|要不要|能不能|是不是|是否|应该)/u.test(normalized);
|
|
240
|
-
}
|
|
241
|
-
function inferIdeaAffectedArea(input) {
|
|
242
|
-
const normalized = input.toLowerCase();
|
|
243
|
-
if (/symphony|secretary|auto|approval|grant|pod|xpod|skill|worker|agent|capture/u.test(normalized)) {
|
|
244
|
-
return normalized.match(/symphony|secretary|auto|approval|grant|pod|xpod|skill|worker|agent|capture/u)?.[0];
|
|
245
|
-
}
|
|
246
|
-
if (/(建模|模型|数据|同步|权限|审批|托管|多端|工作流|指标|质检|抓取|收藏|记忆)/u.test(input)) {
|
|
247
|
-
return input.match(/建模|模型|数据|同步|权限|审批|托管|多端|工作流|指标|质检|抓取|收藏|记忆/u)?.[0];
|
|
248
|
-
}
|
|
249
|
-
return undefined;
|
|
250
|
-
}
|
|
251
|
-
function summarizeIdeaInput(input) {
|
|
252
|
-
const normalized = input.replace(/\s+/g, ' ').trim();
|
|
253
|
-
return normalized.length <= 80 ? normalized : `${normalized.slice(0, 77)}...`;
|
|
254
|
-
}
|
|
255
|
-
function normalizeCapturedIdeaContext(value) {
|
|
256
|
-
if (!isRecord(value)) {
|
|
257
|
-
return undefined;
|
|
258
|
-
}
|
|
259
|
-
const uri = normalizeString(value.uri);
|
|
260
|
-
const summary = normalizeString(value.summary);
|
|
261
|
-
if (!uri || !summary) {
|
|
262
|
-
return undefined;
|
|
263
|
-
}
|
|
264
|
-
return {
|
|
265
|
-
uri,
|
|
266
|
-
summary,
|
|
267
|
-
status: normalizeString(value.status) ?? 'captured',
|
|
268
|
-
commitment: normalizeString(value.commitment) ?? 'thought',
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
async function resolveIdeaSourceContext(interactive, runtime) {
|
|
272
|
-
const sessionId = resolveLinxSessionId({ interactive, runtime });
|
|
273
|
-
const webId = await resolveLinxInteractivePodWebId(interactive);
|
|
274
|
-
if (typeof sessionId !== 'string' || !sessionId.trim() || !webId) {
|
|
275
|
-
return undefined;
|
|
276
|
-
}
|
|
277
|
-
const trimmedSessionId = sessionId.trim();
|
|
278
|
-
return {
|
|
279
|
-
chat: secretaryChatUri(webId),
|
|
280
|
-
thread: secretaryThreadUri(webId, trimmedSessionId, DEFAULT_SECRETARY_CHAT_ID),
|
|
281
|
-
sessionId: trimmedSessionId,
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
function normalizeString(value) {
|
|
285
|
-
const normalized = typeof value === 'string' ? value.trim() : '';
|
|
286
|
-
return normalized || undefined;
|
|
287
|
-
}
|
|
288
|
-
function normalizeError(error) {
|
|
289
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
290
|
-
}
|
|
291
|
-
function isRecord(value) {
|
|
292
|
-
return Boolean(value) && typeof value === 'object';
|
|
293
|
-
}
|
|
294
|
-
//# sourceMappingURL=linx-interactive-idea-capture.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"linx-interactive-idea-capture.js","sourceRoot":"","sources":["../../src/lib/linx-interactive-idea-capture.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
/package/dist/plugins/{linx-symphony-codex → linx-symphony}/scripts/symphony-hook-events.mjs
RENAMED
|
File without changes
|