kiokuko-dsh 0.1.59 → 0.1.61
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/client.cjs +49 -17
- package/dist/client.d.ts.map +1 -1
- package/dist/dsh/lisp/approval.d.ts +10 -0
- package/dist/dsh/lisp/approval.d.ts.map +1 -0
- package/dist/dsh/lisp/approval.js +36 -0
- package/dist/dsh/lisp/approval.js.map +1 -0
- package/dist/dsh/lisp/attachment-input.d.ts +26 -0
- package/dist/dsh/lisp/attachment-input.d.ts.map +1 -0
- package/dist/dsh/lisp/attachment-input.js +47 -0
- package/dist/dsh/lisp/attachment-input.js.map +1 -0
- package/dist/dsh/lisp/ci.d.ts +3 -0
- package/dist/dsh/lisp/ci.d.ts.map +1 -1
- package/dist/dsh/lisp/ci.js +44 -17
- package/dist/dsh/lisp/ci.js.map +1 -1
- package/dist/dsh/lisp/contracts.d.ts +1 -3
- package/dist/dsh/lisp/contracts.d.ts.map +1 -1
- package/dist/dsh/lisp/contracts.js +3 -8
- package/dist/dsh/lisp/contracts.js.map +1 -1
- package/dist/dsh/lisp/files.d.ts +5 -1
- package/dist/dsh/lisp/files.d.ts.map +1 -1
- package/dist/dsh/lisp/files.js +28 -3
- package/dist/dsh/lisp/files.js.map +1 -1
- package/dist/dsh/lisp/inspection.d.ts +29 -0
- package/dist/dsh/lisp/inspection.d.ts.map +1 -0
- package/dist/dsh/lisp/inspection.js +53 -0
- package/dist/dsh/lisp/inspection.js.map +1 -0
- package/dist/dsh/lisp/manager.d.ts +4 -4
- package/dist/dsh/lisp/manager.d.ts.map +1 -1
- package/dist/dsh/lisp/manager.js +81 -119
- package/dist/dsh/lisp/manager.js.map +1 -1
- package/dist/dsh/lisp/model-result.d.ts +5 -0
- package/dist/dsh/lisp/model-result.d.ts.map +1 -0
- package/dist/dsh/lisp/model-result.js +95 -0
- package/dist/dsh/lisp/model-result.js.map +1 -0
- package/dist/dsh/lisp/proposal-batch.d.ts +33 -0
- package/dist/dsh/lisp/proposal-batch.d.ts.map +1 -0
- package/dist/dsh/lisp/proposal-batch.js +137 -0
- package/dist/dsh/lisp/proposal-batch.js.map +1 -0
- package/dist/dsh/lisp/recorded-result.d.ts +4 -0
- package/dist/dsh/lisp/recorded-result.d.ts.map +1 -0
- package/dist/dsh/lisp/recorded-result.js +43 -0
- package/dist/dsh/lisp/recorded-result.js.map +1 -0
- package/dist/dsh/lisp/store.d.ts +6 -0
- package/dist/dsh/lisp/store.d.ts.map +1 -1
- package/dist/dsh/lisp/store.js +11 -0
- package/dist/dsh/lisp/store.js.map +1 -1
- package/dist/dsh/lisp/surface.d.ts +2 -1
- package/dist/dsh/lisp/surface.d.ts.map +1 -1
- package/dist/dsh/lisp/surface.js +39 -13
- package/dist/dsh/lisp/surface.js.map +1 -1
- package/dist/dsh/lisp/worker.d.ts.map +1 -1
- package/dist/dsh/lisp/worker.js +12 -10
- package/dist/dsh/lisp/worker.js.map +1 -1
- package/dist/dsh/skill-prompts.json +1 -1
- package/dist/enno-oduno/schemas.d.ts +10 -10
- package/dist/model-tools/contracts.d.ts +2 -2
- package/docs/dsh-plugin.md +5 -1
- package/docs/lisp.md +60 -4
- package/lisp/tools.lisp +10 -4
- package/package.json +2 -1
- package/skills/kiokuko-lisp/SKILL.md +135 -151
- package/skills/kiokuko-soul/SKILL.md +7 -5
package/dist/client.cjs
CHANGED
|
@@ -6,7 +6,7 @@ window.__ModuleLoader__.load({
|
|
|
6
6
|
const { createSnapshotStore } = require("@deepseek-ai/dsh-client-store");
|
|
7
7
|
const { jsx, jsxs, Fragment } = require("react/jsx-runtime");
|
|
8
8
|
const { useState, useRef, useEffect } = require("react");
|
|
9
|
-
const { Modal, Button, IconDownloadOutline16 } = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
9
|
+
const { Modal, Button, IconDownloadOutline16, MarkdownText } = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
10
10
|
const SESSION_EXPORT_PATH = '/api/session.export';
|
|
11
11
|
const LOCALE_NAMESPACE = 'kiokuko-session-log-download';
|
|
12
12
|
const INITIAL_DOWNLOAD_STATE = { bySession: {} };
|
|
@@ -19,6 +19,10 @@ window.__ModuleLoader__.load({
|
|
|
19
19
|
'dialog.errorTitle': 'Session export failed',
|
|
20
20
|
'dialog.close': 'Close',
|
|
21
21
|
'dialog.commandFailed': 'Could not export the Session log.',
|
|
22
|
+
'review.discuss': 'Chat about it',
|
|
23
|
+
'review.copy': 'Copy',
|
|
24
|
+
'review.copied': 'Copied',
|
|
25
|
+
'review.footnotes': 'Footnotes',
|
|
22
26
|
};
|
|
23
27
|
const ja = {
|
|
24
28
|
'header.action': 'Session log',
|
|
@@ -29,6 +33,10 @@ window.__ModuleLoader__.load({
|
|
|
29
33
|
'dialog.errorTitle': 'Sessionのエクスポートに失敗',
|
|
30
34
|
'dialog.close': '閉じる',
|
|
31
35
|
'dialog.commandFailed': 'Session logをエクスポートできませんでした。',
|
|
36
|
+
'review.discuss': '相談に戻る',
|
|
37
|
+
'review.copy': 'コピー',
|
|
38
|
+
'review.copied': 'コピーしました',
|
|
39
|
+
'review.footnotes': '脚注',
|
|
32
40
|
};
|
|
33
41
|
const zh = {
|
|
34
42
|
'header.action': 'Session 日志',
|
|
@@ -39,6 +47,10 @@ window.__ModuleLoader__.load({
|
|
|
39
47
|
'dialog.errorTitle': 'Session 导出失败',
|
|
40
48
|
'dialog.close': '关闭',
|
|
41
49
|
'dialog.commandFailed': '无法导出 Session 日志。',
|
|
50
|
+
'review.discuss': '继续讨论',
|
|
51
|
+
'review.copy': '复制',
|
|
52
|
+
'review.copied': '已复制',
|
|
53
|
+
'review.footnotes': '脚注',
|
|
42
54
|
};
|
|
43
55
|
function hostBase() {
|
|
44
56
|
const origin = globalThis.location?.origin;
|
|
@@ -478,10 +490,16 @@ window.__ModuleLoader__.load({
|
|
|
478
490
|
}
|
|
479
491
|
function intakePending(props) {
|
|
480
492
|
const pending = props.pendingInteraction;
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
493
|
+
if (!pending || pending.questions?.length !== 1 || typeof pending.answer !== 'function' || typeof pending.cancel !== 'function')
|
|
494
|
+
return null;
|
|
495
|
+
const question = pending.questions[0];
|
|
496
|
+
if (!isSupportedQuestion(question))
|
|
497
|
+
return null;
|
|
498
|
+
if (pending.kind === 'question')
|
|
499
|
+
return pending;
|
|
500
|
+
return pending.kind === 'plan-review' && question.intent?.kind === 'plan-review'
|
|
501
|
+
&& typeof question.detail === 'string' && question.options.length <= 2
|
|
502
|
+
&& question.options.some(option => option.label === question.intent.approve) ? pending : null;
|
|
485
503
|
}
|
|
486
504
|
/**
|
|
487
505
|
* Native pending carrier, plugin-only presentation. The card answers through the
|
|
@@ -490,11 +508,24 @@ window.__ModuleLoader__.load({
|
|
|
490
508
|
*/
|
|
491
509
|
function IntakeQuestion(props) {
|
|
492
510
|
const pending = props.matched;
|
|
493
|
-
|
|
511
|
+
const t = props.t;
|
|
512
|
+
return jsx(IntakeQuestionCard, { key: pending.key, pending,
|
|
513
|
+
...(pending.kind === 'plan-review' ? { reviewCopy: { discuss: t('review.discuss'),
|
|
514
|
+
labels: { code: { copyLabel: t('review.copy'), copiedLabel: t('review.copied') }, footnotes: t('review.footnotes') } } } : {}),
|
|
515
|
+
});
|
|
494
516
|
}
|
|
495
517
|
function IntakeQuestionCard(props) {
|
|
496
518
|
const pending = props.pending;
|
|
497
|
-
const
|
|
519
|
+
const reviewing = pending.kind === 'plan-review';
|
|
520
|
+
const reviewCopy = props.reviewCopy;
|
|
521
|
+
const original = pending.questions[0];
|
|
522
|
+
// The review's first choice cancels back to discussion. Other choices retain
|
|
523
|
+
// the host's exact labels; approval stays last, even if supplied first.
|
|
524
|
+
const question = reviewing ? { ...original, options: [
|
|
525
|
+
{ label: reviewCopy.discuss },
|
|
526
|
+
...original.options.filter(option => option.label !== original.intent.approve),
|
|
527
|
+
...original.options.filter(option => option.label === original.intent.approve),
|
|
528
|
+
] } : original;
|
|
498
529
|
const inputKind = questionInputKind(question);
|
|
499
530
|
const mac = /Mac|iPhone|iPad|iPod/u.test(globalThis.navigator?.platform ?? '');
|
|
500
531
|
const userAgent = globalThis.navigator?.userAgent ?? '';
|
|
@@ -532,10 +563,10 @@ window.__ModuleLoader__.load({
|
|
|
532
563
|
let custom = current.custom.trim();
|
|
533
564
|
let selected = current.selected;
|
|
534
565
|
if (!cancel && selected === null && custom === '') {
|
|
535
|
-
setError('選択肢を選ぶか、自由入力してください。');
|
|
566
|
+
setError(reviewing ? '選択肢を選んでから確定してください。' : '選択肢を選ぶか、自由入力してください。');
|
|
536
567
|
return;
|
|
537
568
|
}
|
|
538
|
-
if (!cancel && inputKind === 'choice' && /^[0-90-9]+$/u.test(custom)) {
|
|
569
|
+
if (!cancel && !reviewing && inputKind === 'choice' && /^[0-90-9]+$/u.test(custom)) {
|
|
539
570
|
const ordinal = Number(custom.normalize('NFKC'));
|
|
540
571
|
if (ordinal < 1 || ordinal > question.options.length) {
|
|
541
572
|
setError(`番号は1〜${question.options.length}で入力してください。`);
|
|
@@ -548,7 +579,7 @@ window.__ModuleLoader__.load({
|
|
|
548
579
|
setBusy(true);
|
|
549
580
|
setError('');
|
|
550
581
|
// Enter is a separate confirmation. Typing, key-repeat and IME cannot submit twice.
|
|
551
|
-
void Promise.resolve().then(() => cancel ? pending.cancel() : pending.answer({ answers: [{
|
|
582
|
+
void Promise.resolve().then(() => cancel || (reviewing && selected === 0) ? pending.cancel() : pending.answer({ answers: [{
|
|
552
583
|
id: question.id,
|
|
553
584
|
selected: selected === null ? [] : [question.options[selected].label],
|
|
554
585
|
...(custom ? { custom } : {}),
|
|
@@ -591,7 +622,7 @@ window.__ModuleLoader__.load({
|
|
|
591
622
|
const keyDown = (event) => {
|
|
592
623
|
if (selectShortcut(event))
|
|
593
624
|
return;
|
|
594
|
-
if (busy || inFlight.current || event.repeat || event.nativeEvent?.isComposing || event.nativeEvent?.keyCode === 229
|
|
625
|
+
if (busy || inFlight.current || event.repeat || event.isComposing || event.keyCode === 229 || event.nativeEvent?.isComposing || event.nativeEvent?.keyCode === 229
|
|
595
626
|
|| event.ctrlKey || event.altKey || event.metaKey || event.shiftKey)
|
|
596
627
|
return;
|
|
597
628
|
const editing = event.target?.isContentEditable || ['INPUT', 'TEXTAREA', 'SELECT'].includes(event.target?.tagName ?? '');
|
|
@@ -624,18 +655,19 @@ window.__ModuleLoader__.load({
|
|
|
624
655
|
jsxs('header', { children: [jsx('h2', { id: titleId, children: question.question }),
|
|
625
656
|
jsx('button', { type: 'button', disabled: busy, onClick: () => settle(true), 'aria-label': '質問を閉じる', children: '閉じる' })] }),
|
|
626
657
|
jsxs('div', { className: 'kiokuko-intake-body', children: [
|
|
627
|
-
|
|
658
|
+
reviewing ? jsx(MarkdownText, { text: question.detail, labels: reviewCopy.labels })
|
|
659
|
+
: question.detail ? jsx('p', { children: question.detail }) : null,
|
|
628
660
|
jsx('p', { children: question.options.length > 9
|
|
629
661
|
? `${shortcutModifier}+1〜9で選択、Enterで確定。10以上は番号(1〜${question.options.length})を数字で続けて入力、Backspaceで訂正できます。`
|
|
630
662
|
: `${shortcutModifier}+1〜${question.options.length}で選択、Enterで確定。` }),
|
|
631
663
|
jsx('div', { 'aria-label': '選択肢', children: question.options.map((option, index) => jsxs('button', {
|
|
632
|
-
key:
|
|
664
|
+
key: index, type: 'button', className: 'kiokuko-intake-option', disabled: busy,
|
|
633
665
|
ref: (element) => { optionElements.current[index] = element; },
|
|
634
666
|
'aria-pressed': draft.selected === index,
|
|
635
667
|
...(index < 9 ? { 'aria-keyshortcuts': `${question.options.length <= 9 ? `${index + 1} ` : ''}${controlShortcut ? 'Control' : 'Meta'}+${index + 1}` } : {}),
|
|
636
668
|
onClick: () => update({ selected: index, custom: '' }),
|
|
637
669
|
onKeyDown: (event) => {
|
|
638
|
-
if (event.key !== 'Enter' || event.repeat || event.shiftKey || event.ctrlKey || event.altKey || event.metaKey || event.nativeEvent?.isComposing || event.nativeEvent?.keyCode === 229 || (intakeDrafts.get(pending) ?? draft).selected !== index)
|
|
670
|
+
if (event.key !== 'Enter' || event.repeat || event.shiftKey || event.ctrlKey || event.altKey || event.metaKey || event.isComposing || event.keyCode === 229 || event.nativeEvent?.isComposing || event.nativeEvent?.keyCode === 229 || (intakeDrafts.get(pending) ?? draft).selected !== index)
|
|
639
671
|
return;
|
|
640
672
|
event.preventDefault();
|
|
641
673
|
event.stopPropagation();
|
|
@@ -644,12 +676,12 @@ window.__ModuleLoader__.load({
|
|
|
644
676
|
children: [jsx('strong', { children: `${index + 1}. ${option.label}` }), option.description ? jsx('span', { children: option.description }) : null,
|
|
645
677
|
jsx('kbd', { className: 'kiokuko-intake-shortcut', 'aria-hidden': true, children: index < 9 ? `${shortcutModifier}+${index + 1}` : `${index + 1} → Enter` })],
|
|
646
678
|
})) }),
|
|
647
|
-
jsx('label', { htmlFor: `${titleId}-custom`, children: inputKind === 'search' ? '検索(Enterで検索・数字も検索語として入力できます)' : inputKind === 'value' ? '値を入力(Enterで確定)' : '自由入力(任意)' }),
|
|
679
|
+
!reviewing ? jsx('label', { htmlFor: `${titleId}-custom`, children: inputKind === 'search' ? '検索(Enterで検索・数字も検索語として入力できます)' : inputKind === 'value' ? '値を入力(Enterで確定)' : '自由入力(任意)' }) : null,
|
|
648
680
|
inputKind === 'choice' && question.header === '実行方式とモデル'
|
|
649
681
|
? jsx('p', { children: '選択肢に当てはまらない内容はAIに渡し、会話に戻ります。実行方式やモデル構成は確定しません。' }) : null,
|
|
650
|
-
jsx('textarea', { id: `${titleId}-custom`, rows: 1, disabled: busy, value: draft.custom,
|
|
682
|
+
!reviewing ? jsx('textarea', { id: `${titleId}-custom`, rows: 1, disabled: busy, value: draft.custom,
|
|
651
683
|
onChange: (event) => update({ selected: null, custom: event.target.value }),
|
|
652
|
-
}),
|
|
684
|
+
}) : null,
|
|
653
685
|
] }),
|
|
654
686
|
jsxs('footer', { children: [
|
|
655
687
|
jsx('span', { role: 'status', 'aria-live': 'polite', children: error || (busy ? '送信中…' : draft.selected === null ? '' : `${draft.selected + 1}. ${question.options[draft.selected].label}を選択中`) }),
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,UAAU,wBAAwB;IAChC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,CAAC,CAAA;IAC7G,QAAQ,EAAE;QAAE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CACxC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAA;CAC3C;AAYD,UAAU,gBAAgB;IACxB,QAAQ,CAAC,cAAc,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAA;SAAE,CAAA;KAAE,CAAA;IACxF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAA;KAC3F,CAAA;IACD,QAAQ,CAAC,KAAK,EAAE;QACd,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,GAAG,OAAO,CAAA;QACtD,QAAQ,CACN,UAAU,EAAE;YACV,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;YACpB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;YAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;YAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;YACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAChD,EACD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GACrD,OAAO,CAAA;KACX,CAAA;IACD,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IAChF,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAA;CACtI;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,UAAU,wBAAwB;IAChC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,CAAC,CAAA;IAC7G,QAAQ,EAAE;QAAE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CACxC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAA;CAC3C;AAYD,UAAU,gBAAgB;IACxB,QAAQ,CAAC,cAAc,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAA;SAAE,CAAA;KAAE,CAAA;IACxF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAA;KAC3F,CAAA;IACD,QAAQ,CAAC,KAAK,EAAE;QACd,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,GAAG,OAAO,CAAA;QACtD,QAAQ,CACN,UAAU,EAAE;YACV,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;YACpB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;YAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;YAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;YACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAChD,EACD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GACrD,OAAO,CAAA;KACX,CAAA;IACD,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IAChF,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAA;CACtI;AAuFD,+EAA+E;AAC/E,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,CAqBjH;AAuHD,eAAO,MAAM,MAAM,gDAAiD,CAAA;AA6apE,mEAAmE;AACnE,wBAAgB,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAmCjD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DshUserQuestions } from '../user-interaction.js';
|
|
2
|
+
export type Approval = {
|
|
3
|
+
approved: true;
|
|
4
|
+
} | {
|
|
5
|
+
approved: false;
|
|
6
|
+
reason: 'declined' | 'cancelled' | 'timed_out' | 'unavailable' | 'invalid_answer';
|
|
7
|
+
};
|
|
8
|
+
/** One concrete review; no timeout, UI failure or free text can grant authority. */
|
|
9
|
+
export declare function confirm(questions: DshUserQuestions | undefined, agentId: string, question: Parameters<DshUserQuestions['ask']>[0]['questions'][0], signal: AbortSignal, timeoutMs?: number): Promise<Approval>;
|
|
10
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,CAAA;CAAE,CAAA;AAElJ,oFAAoF;AACpF,wBAAsB,OAAO,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EACpF,QAAQ,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiB9H"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** One concrete review; no timeout, UI failure or free text can grant authority. */
|
|
2
|
+
export async function confirm(questions, agentId, question, signal, timeoutMs = 300000) {
|
|
3
|
+
if (signal.aborted)
|
|
4
|
+
return { approved: false, reason: 'cancelled' };
|
|
5
|
+
if (!questions)
|
|
6
|
+
return { approved: false, reason: 'unavailable' };
|
|
7
|
+
const timeout = new AbortController(), combined = AbortSignal.any([signal, timeout.signal]);
|
|
8
|
+
const timer = setTimeout(() => timeout.abort(), timeoutMs);
|
|
9
|
+
let onAbort;
|
|
10
|
+
try {
|
|
11
|
+
const answer = await Promise.race([questions.ask({ agent: { id: agentId }, signal: combined, questions: [question] }),
|
|
12
|
+
new Promise(resolve => { onAbort = () => resolve(undefined); if (combined.aborted)
|
|
13
|
+
onAbort();
|
|
14
|
+
else
|
|
15
|
+
combined.addEventListener('abort', onAbort, { once: true }); })]);
|
|
16
|
+
if (combined.aborted)
|
|
17
|
+
return { approved: false, reason: signal.aborted ? 'cancelled' : 'timed_out' };
|
|
18
|
+
if (!answer)
|
|
19
|
+
return { approved: false, reason: 'unavailable' };
|
|
20
|
+
const response = answer.answers[0];
|
|
21
|
+
if (answer.answers.length !== 1 || response?.id !== question.id || response.custom || response.selected.length !== 1)
|
|
22
|
+
return { approved: false, reason: 'invalid_answer' };
|
|
23
|
+
if (response.selected[0] === question.intent?.approve)
|
|
24
|
+
return { approved: true };
|
|
25
|
+
return { approved: false, reason: response.selected[0] === question.options?.[0]?.label ? 'declined' : 'invalid_answer' };
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return { approved: false, reason: signal.aborted ? 'cancelled' : timeout.signal.aborted ? 'timed_out' : 'unavailable' };
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
clearTimeout(timer);
|
|
32
|
+
if (onAbort)
|
|
33
|
+
combined.removeEventListener('abort', onAbort);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/dsh/lisp/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface FileRef {
|
|
2
|
+
attachmentId: string;
|
|
3
|
+
name: string;
|
|
4
|
+
bytes: number;
|
|
5
|
+
}
|
|
6
|
+
export interface LispAttachmentStore {
|
|
7
|
+
fileHostPath?(ref: FileRef): string | undefined;
|
|
8
|
+
readFileStream?(ref: FileRef, signal?: AbortSignal): AsyncIterable<Uint8Array>;
|
|
9
|
+
}
|
|
10
|
+
export interface LispAttachmentSession {
|
|
11
|
+
snapshotEvents?(): readonly unknown[];
|
|
12
|
+
}
|
|
13
|
+
export interface AttachmentInput {
|
|
14
|
+
source: {
|
|
15
|
+
path: string;
|
|
16
|
+
attachmentId: string;
|
|
17
|
+
size: number;
|
|
18
|
+
hash: string;
|
|
19
|
+
};
|
|
20
|
+
size: number;
|
|
21
|
+
read(): Promise<Buffer>;
|
|
22
|
+
}
|
|
23
|
+
/** Only durable user-file parts in this live session confer attachment access. */
|
|
24
|
+
export declare function attachmentInput(session: LispAttachmentSession, store: LispAttachmentStore | undefined, path: string, signal?: AbortSignal): AttachmentInput;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=attachment-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-input.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/attachment-input.ts"],"names":[],"mappings":"AAGA,UAAU,OAAO;IAAG,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACvE,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IAC/C,cAAc,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;CAC/E;AACD,MAAM,WAAW,qBAAqB;IAAG,cAAc,CAAC,IAAI,SAAS,OAAO,EAAE,CAAA;CAAE;AAChF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CACxB;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,eAAe,CAmC3J"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { FILE_BYTES, LispError, fail } from './contracts.js';
|
|
3
|
+
/** Only durable user-file parts in this live session confer attachment access. */
|
|
4
|
+
export function attachmentInput(session, store, path, signal) {
|
|
5
|
+
if (!store?.fileHostPath || !store.readFileStream || !session.snapshotEvents) {
|
|
6
|
+
throw new LispError('ATTACHMENT_UNAVAILABLE', 'このホストでは Lisp への添付入力を利用できません。', 'DSH の添付サービスを確認するか、ファイルを作業フォルダに置いて相対パスで指定してください。');
|
|
7
|
+
}
|
|
8
|
+
for (const raw of session.snapshotEvents()) {
|
|
9
|
+
const event = raw;
|
|
10
|
+
if (event?.type !== 'user/message' || event.data?.source?.kind !== 'user' || !Array.isArray(event.data.content))
|
|
11
|
+
continue;
|
|
12
|
+
for (const rawPart of event.data.content) {
|
|
13
|
+
const part = rawPart;
|
|
14
|
+
const ref = part?.attachment;
|
|
15
|
+
if (part?.type !== 'file' || !ref || typeof ref.attachmentId !== 'string' || !/^sha256:[a-f0-9]{64}$/u.test(ref.attachmentId)
|
|
16
|
+
|| typeof ref.name !== 'string' || !Number.isSafeInteger(ref.bytes) || ref.bytes < 0)
|
|
17
|
+
continue;
|
|
18
|
+
const file = { attachmentId: ref.attachmentId, name: ref.name, bytes: ref.bytes };
|
|
19
|
+
if (store.fileHostPath(file) !== path)
|
|
20
|
+
continue;
|
|
21
|
+
if (file.bytes > FILE_BYTES)
|
|
22
|
+
fail('FILE_LIMIT', '添付入力は 64 MiB 以下のファイルに限ります。');
|
|
23
|
+
const hash = file.attachmentId.slice(7);
|
|
24
|
+
return { source: { path, attachmentId: file.attachmentId, size: file.bytes, hash }, size: file.bytes,
|
|
25
|
+
read: async () => {
|
|
26
|
+
signal?.throwIfAborted();
|
|
27
|
+
const chunks = [], digest = createHash('sha256');
|
|
28
|
+
let size = 0;
|
|
29
|
+
for await (const chunk of store.readFileStream(file, signal)) {
|
|
30
|
+
signal?.throwIfAborted();
|
|
31
|
+
size += chunk.byteLength;
|
|
32
|
+
if (size > file.bytes || size > FILE_BYTES)
|
|
33
|
+
fail('ATTACHMENT_CHANGED', '添付ファイルの容量が記録と一致しません。');
|
|
34
|
+
const copy = Buffer.from(chunk);
|
|
35
|
+
chunks.push(copy);
|
|
36
|
+
digest.update(copy);
|
|
37
|
+
}
|
|
38
|
+
signal?.throwIfAborted();
|
|
39
|
+
if (size !== file.bytes || digest.digest('hex') !== hash)
|
|
40
|
+
fail('ATTACHMENT_CHANGED', '添付ファイルの内容が記録と一致しません。');
|
|
41
|
+
return Buffer.concat(chunks, size);
|
|
42
|
+
} };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
throw new LispError('ATTACHMENT_NOT_IN_SESSION', 'このセッションに添付されたファイルのパスではありません。', 'このセッションの添付パス、または作業フォルダ内の相対パスを inputs に指定してください。');
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=attachment-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-input.js","sourceRoot":"","sources":["../../../src/dsh/lisp/attachment-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAc5D,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,OAA8B,EAAE,KAAsC,EAAE,IAAY,EAAE,MAAoB;IACxI,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC7E,MAAM,IAAI,SAAS,CAAC,wBAAwB,EAAE,8BAA8B,EAAE,iDAAiD,CAAC,CAAA;IAClI,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,GAA2F,CAAA;QACzG,IAAI,KAAK,EAAE,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,SAAQ;QACzH,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAkE,CAAA;YAC/E,MAAM,GAAG,GAAG,IAAI,EAAE,UAAU,CAAA;YAC5B,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;mBACxH,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAM,GAAG,CAAC;gBAAE,SAAQ;YACjG,MAAM,IAAI,GAAY,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAM,EAAE,CAAA;YAC3F,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI;gBAAE,SAAQ;YAC/C,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU;gBAAE,IAAI,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAA;YAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACvC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK;gBAClG,IAAI,EAAE,KAAK,IAAI,EAAE;oBACf,MAAM,EAAE,cAAc,EAAE,CAAA;oBACxB,MAAM,MAAM,GAAa,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;oBAC1D,IAAI,IAAI,GAAG,CAAC,CAAA;oBACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,cAAe,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;wBAC9D,MAAM,EAAE,cAAc,EAAE,CAAA;wBACxB,IAAI,IAAI,KAAK,CAAC,UAAU,CAAA;wBACxB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,UAAU;4BAAE,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAA;wBAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBACxC,CAAC;oBACD,MAAM,EAAE,cAAc,EAAE,CAAA;oBACxB,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;wBAAE,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAA;oBAC5G,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBACpC,CAAC,EAAE,CAAA;QACP,CAAC;IACH,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,2BAA2B,EAAE,8BAA8B,EAAE,iDAAiD,CAAC,CAAA;AACrI,CAAC"}
|
package/dist/dsh/lisp/ci.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type LispCiRequest = {
|
|
|
9
9
|
} | {
|
|
10
10
|
kind: 'verify';
|
|
11
11
|
target: keyof typeof VERIFIERS;
|
|
12
|
+
script?: string | undefined;
|
|
12
13
|
};
|
|
13
14
|
interface CommandResult {
|
|
14
15
|
code: number;
|
|
@@ -52,6 +53,8 @@ declare const VERIFIERS: {
|
|
|
52
53
|
readonly timeoutMs: 60000;
|
|
53
54
|
};
|
|
54
55
|
};
|
|
56
|
+
/** Discovery is read-only; missing scripts never need a model-driven trial run. */
|
|
57
|
+
export declare function describeVerifiers(owner: LispOwner): Promise<unknown>;
|
|
55
58
|
/** Host-only CI adapter. Credentials remain in the host child process and are never copied into the Lisp worker. */
|
|
56
59
|
export declare function createLispCiAdapter(questions?: DshUserQuestions, runner?: CommandRunner): (owner: LispOwner, request: LispCiRequest, signal: AbortSignal) => Promise<unknown>;
|
|
57
60
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/ci.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/ci.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAIxE,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,OAAO,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEnF,UAAU,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACxE,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AAG/I,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOL,CAAA;AA0CV,mFAAmF;AACnF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAM1E;AAED,oHAAoH;AACpH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,MAAM,GAAE,aAA0B,IACpF,OAAO,SAAS,EAAE,SAAS,aAAa,EAAE,QAAQ,WAAW,KAAG,OAAO,CAAC,OAAO,CAAC,CA8B/F"}
|
package/dist/dsh/lisp/ci.js
CHANGED
|
@@ -3,7 +3,9 @@ import { randomUUID } from 'node:crypto';
|
|
|
3
3
|
import { access, realpath } from 'node:fs/promises';
|
|
4
4
|
import { constants } from 'node:fs';
|
|
5
5
|
import { delimiter, join, relative } from 'node:path';
|
|
6
|
-
import { LispError, fail } from './contracts.js';
|
|
6
|
+
import { LispError, fail, digest } from './contracts.js';
|
|
7
|
+
import { checkedBytes, snapshot } from './files.js';
|
|
8
|
+
import { confirm } from './approval.js';
|
|
7
9
|
const OUTPUT_LIMIT = 1024 * 1024;
|
|
8
10
|
const VERIFIERS = {
|
|
9
11
|
typecheck: { file: 'npm', args: ['run', 'typecheck'], timeoutMs: 120_000 },
|
|
@@ -42,22 +44,32 @@ const runCommand = async (file, args, options) => {
|
|
|
42
44
|
});
|
|
43
45
|
});
|
|
44
46
|
};
|
|
45
|
-
async function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
async function scriptsFor(owner) {
|
|
48
|
+
const file = await snapshot(owner.root, 'package.json', []);
|
|
49
|
+
if (!file.exists)
|
|
50
|
+
return {};
|
|
51
|
+
if (file.size > 1024 * 1024)
|
|
52
|
+
throw new LispError('PACKAGE_INVALID', 'package.json が大きすぎます。', 'package.json を確認してください。');
|
|
53
|
+
let parsed;
|
|
50
54
|
try {
|
|
51
|
-
|
|
52
|
-
id, header: 'Lisp · 検証実行の確認', question: `${target} を実行しますか?`,
|
|
53
|
-
detail: `実行: ${command.file} ${command.args.join(' ')}\n作業ディレクトリ: ${owner.root}\nタイムアウト: ${command.timeoutMs} ms\nテスト・ビルド成果物が作業ディレクトリに作成される場合があります。拒否・取消・無回答では実行しません。`,
|
|
54
|
-
options: [{ label: '実行しない' }, { label }], intent: { kind: 'plan-review', approve: label },
|
|
55
|
-
}] });
|
|
56
|
-
return !signal.aborted && answer.answers.length === 1 && answer.answers[0]?.id === id && !answer.answers[0].custom && answer.answers[0].selected.length === 1 && answer.answers[0].selected[0] === label;
|
|
55
|
+
parsed = JSON.parse((await checkedBytes(file)).toString('utf8'));
|
|
57
56
|
}
|
|
58
57
|
catch {
|
|
59
|
-
|
|
58
|
+
throw new LispError('PACKAGE_INVALID', 'package.json を読み取れません。', 'package.json のJSONを修正してください。');
|
|
60
59
|
}
|
|
60
|
+
const scripts = parsed && typeof parsed === 'object' && 'scripts' in parsed ? parsed.scripts : undefined;
|
|
61
|
+
if (!scripts || typeof scripts !== 'object' || Array.isArray(scripts))
|
|
62
|
+
return {};
|
|
63
|
+
return Object.fromEntries(Object.entries(scripts).filter(([, value]) => typeof value === 'string' && value.trim()));
|
|
64
|
+
}
|
|
65
|
+
const scriptFor = (target, scripts, selected) => selected ?? (target === 'test' ? 'test' : target === 'typecheck' && !Object.hasOwn(scripts, 'typecheck') && Object.hasOwn(scripts, 'check') ? 'check' : VERIFIERS[target].args[1]);
|
|
66
|
+
/** Discovery is read-only; missing scripts never need a model-driven trial run. */
|
|
67
|
+
export async function describeVerifiers(owner) {
|
|
68
|
+
const scripts = await scriptsFor(owner);
|
|
69
|
+
return Object.fromEntries(Object.keys(VERIFIERS).map(key => {
|
|
70
|
+
const target = key, script = scriptFor(target, scripts);
|
|
71
|
+
return [target, { script, available: Object.hasOwn(scripts, script), ...(target === 'test' ? { focused: Object.keys(scripts).filter(key => /^test(?::[A-Za-z0-9._-]+)*$/u.test(key)) } : {}) }];
|
|
72
|
+
}));
|
|
61
73
|
}
|
|
62
74
|
/** Host-only CI adapter. Credentials remain in the host child process and are never copied into the Lisp worker. */
|
|
63
75
|
export function createLispCiAdapter(questions, runner = runCommand) {
|
|
@@ -79,11 +91,26 @@ export function createLispCiAdapter(questions, runner = runCommand) {
|
|
|
79
91
|
fail('CI_COMMAND_FAILED', result.stderr || 'GitHub CI の失敗ログを取得できませんでした。');
|
|
80
92
|
return { source: 'github', repositoryRoot: owner.root, runId: request.runId, log: result.stdout };
|
|
81
93
|
}
|
|
82
|
-
const
|
|
83
|
-
if (
|
|
84
|
-
return { target: request.target, state: 'NOT_APPLIED' };
|
|
94
|
+
const scripts = await scriptsFor(owner);
|
|
95
|
+
if (request.script !== undefined && (request.target !== 'test' || !/^test(?::[A-Za-z0-9._-]+)*$/u.test(request.script))) {
|
|
96
|
+
return { target: request.target, state: 'NOT_APPLIED', code: 'INVALID_TEST_SCRIPT', reason: 'invalid_input', message: 'script は test 対象の test または test:* のみ指定できます。' };
|
|
97
|
+
}
|
|
98
|
+
const script = scriptFor(request.target, scripts, request.script);
|
|
99
|
+
if (!Object.hasOwn(scripts, script))
|
|
100
|
+
return { target: request.target, state: 'NOT_APPLIED', code: 'SCRIPT_MISSING', reason: 'script_missing', script,
|
|
101
|
+
message: `package.json に ${script} がありません。実行・確認はしていません。`, availableScripts: Object.keys(scripts) };
|
|
102
|
+
const command = { ...VERIFIERS[request.target], args: script === 'test' ? ['test'] : ['run', script] };
|
|
103
|
+
const approval = await confirm(questions, owner.agentId, {
|
|
104
|
+
id: `lisp-ci-${randomUUID()}`, header: 'Lisp · 検証実行の確認', question: `${script} を実行しますか?`,
|
|
105
|
+
detail: `実行: ${command.file} ${command.args.join(' ')}\nスクリプト: ${scripts[script]}\n作業ディレクトリ: ${owner.root}\nタイムアウト: ${command.timeoutMs} ms\nテスト・ビルド成果物が作成される場合があります。`,
|
|
106
|
+
options: [{ label: '実行しない' }, { label: 'この検証を実行' }], intent: { kind: 'plan-review', approve: 'この検証を実行' },
|
|
107
|
+
}, signal);
|
|
108
|
+
if (!approval.approved)
|
|
109
|
+
return { target: request.target, script, state: 'NOT_APPLIED', reason: approval.reason };
|
|
110
|
+
if (digest(scripts) !== digest(await scriptsFor(owner)))
|
|
111
|
+
return { target: request.target, script, state: 'NOT_APPLIED', code: 'TARGET_CHANGED', reason: 'scripts_changed', message: '確認中にnpmスクリプトが変わりました。実行していません。' };
|
|
85
112
|
const result = await runner(command.file, [...command.args], { cwd: owner.root, timeoutMs: command.timeoutMs, signal });
|
|
86
|
-
return { target: request.target, state: result.code === 0 ? 'SUCCEEDED' : 'FAILED', ...result };
|
|
113
|
+
return { target: request.target, script, state: result.code === 0 ? 'SUCCEEDED' : 'FAILED', ...result };
|
|
87
114
|
};
|
|
88
115
|
}
|
|
89
116
|
//# sourceMappingURL=ci.js.map
|
package/dist/dsh/lisp/ci.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/dsh/lisp/ci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAkB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/dsh/lisp/ci.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export declare const LISP_TOOLS: readonly ["lisp_eval", "lisp_describe", "lisp_i
|
|
|
12
12
|
export type LispTool = typeof LISP_TOOLS[number];
|
|
13
13
|
export declare const FRAME_BYTES = 1048576;
|
|
14
14
|
export declare const FILE_BYTES: number;
|
|
15
|
-
export
|
|
15
|
+
export { RESULT_BYTES, renderResult } from './model-result.js';
|
|
16
16
|
export declare const identifier: z.ZodString;
|
|
17
17
|
export interface LispOwner {
|
|
18
18
|
sessionId: string;
|
|
@@ -26,8 +26,6 @@ export declare class LispError extends Error {
|
|
|
26
26
|
constructor(code: string, message: string, recovery?: string);
|
|
27
27
|
}
|
|
28
28
|
export declare function digest(value: unknown): string;
|
|
29
|
-
/** Preserve valid JSON and UTF-8 even when the complete result is too large. */
|
|
30
|
-
export declare function renderResult(value: unknown): string;
|
|
31
29
|
export declare function fail(code: string, message: string): never;
|
|
32
30
|
export declare function failure(error: unknown): {
|
|
33
31
|
ok: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,UAAU;;;;;;;kBAMZ,CAAA;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAC1D,eAAO,MAAM,UAAU,qGAAsG,CAAA;AAC7H,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAChD,eAAO,MAAM,WAAW,UAAY,CAAA;AACpC,eAAO,MAAM,UAAU,QAAmB,CAAA;AAC1C,
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,UAAU;;;;;;;kBAMZ,CAAA;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAC1D,eAAO,MAAM,UAAU,qGAAsG,CAAA;AAC7H,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAChD,eAAO,MAAM,WAAW,UAAY,CAAA;AACpC,eAAO,MAAM,UAAU,QAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC9D,eAAO,MAAM,UAAU,aAA0D,CAAA;AACjF,MAAM,WAAW,SAAS;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC/E,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;AACjI,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAmB,QAAQ,CAAC,QAAQ;gBAAhD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAW,QAAQ,SAAqC;CAC3G;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK7C;AACD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAuC;AACjG,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAItG;AACD,eAAO,MAAM,SAAS;;;;kBACyD,CAAA;AAC/E,eAAO,MAAM,eAAe;;;;;;;iCAG1B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;4BAGtB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAA"}
|
|
@@ -10,7 +10,7 @@ export const LispConfig = z.object({
|
|
|
10
10
|
export const LISP_TOOLS = ['lisp_eval', 'lisp_describe', 'lisp_inspect', 'lisp_status', 'lisp_cancel', 'lisp_reset'];
|
|
11
11
|
export const FRAME_BYTES = 1_048_576;
|
|
12
12
|
export const FILE_BYTES = 64 * 1024 * 1024;
|
|
13
|
-
export
|
|
13
|
+
export { RESULT_BYTES, renderResult } from './model-result.js';
|
|
14
14
|
export const identifier = z.string().min(1).max(256).regex(/^[^\p{Cc}\p{Cf}]+$/u);
|
|
15
15
|
export class LispError extends Error {
|
|
16
16
|
code;
|
|
@@ -29,15 +29,10 @@ export function digest(value) {
|
|
|
29
29
|
return item;
|
|
30
30
|
})).digest('hex');
|
|
31
31
|
}
|
|
32
|
-
/** Preserve valid JSON and UTF-8 even when the complete result is too large. */
|
|
33
|
-
export function renderResult(value) {
|
|
34
|
-
const json = JSON.stringify(value);
|
|
35
|
-
if (Buffer.byteLength(json) <= RESULT_BYTES)
|
|
36
|
-
return json;
|
|
37
|
-
return JSON.stringify({ truncated: true, message: '応答が表示上限を超えました。lisp_status または /kioku-lisp diagnostics で操作 ID を確認してください。', preview: Buffer.from(json).subarray(0, 12000).toString('utf8') });
|
|
38
|
-
}
|
|
39
32
|
export function fail(code, message) { throw new LispError(code, message); }
|
|
40
33
|
export function failure(error) {
|
|
34
|
+
if (error instanceof z.ZodError)
|
|
35
|
+
return { ok: false, code: 'INVALID_INPUT', message: error.issues.map(issue => `${issue.path.join('.')}: ${issue.message}`).join('\n').slice(0, 1000), recovery: '指定した引数を修正してください。Lisp の復旧は不要です。' };
|
|
41
36
|
return error instanceof LispError ? { ok: false, code: error.code, message: error.message, recovery: error.recovery }
|
|
42
37
|
: { ok: false, code: 'LISP_INTERNAL_ERROR', message: error instanceof Error ? error.message.slice(0, 1000) : 'Lisp 処理に失敗しました。', recovery: '/kioku-lisp status で確認し、/kioku-lisp recover で照合してください。自動再実行はしません。' };
|
|
43
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAClE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC7E,CAAC,CAAC,MAAM,EAAE,CAAA;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,CAAU,CAAA;AAE7H,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAC1C,
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAClE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC7E,CAAC,CAAC,MAAM,EAAE,CAAA;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,CAAU,CAAA;AAE7H,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;AAGjF,MAAM,OAAO,SAAU,SAAQ,KAAK;IACb;IAAwC;IAA7D,YAAqB,IAAY,EAAE,OAAe,EAAW,WAAW,kCAAkC;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAAxG,SAAI,GAAJ,IAAI,CAAQ;QAA4B,aAAQ,GAAR,QAAQ,CAAqC;QAAoB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;IAAC,CAAC;CACxJ;AACD,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE;QAC/E,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpJ,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACnB,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,OAAe,IAAW,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC;AACjG,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,gCAAgC,EAAE,CAAA;IACnO,OAAO,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;QACnH,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,EAAE,mEAAmE,EAAE,CAAA;AACnN,CAAC;AACD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;IACpI,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACzH,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;CACzF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACtD,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACtE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;CAC3K,CAAC,CAAA"}
|
package/dist/dsh/lisp/files.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ export interface FrozenChange {
|
|
|
23
23
|
size: number;
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
|
+
export type CreatedParents = Map<string, {
|
|
27
|
+
dev: number;
|
|
28
|
+
ino: number;
|
|
29
|
+
}>;
|
|
26
30
|
export declare function under(root: string, path: string): boolean;
|
|
27
31
|
/** Resolve every directory without following links; no directory deletion is exposed. */
|
|
28
32
|
export declare function snapshot(root: string, path: string, protectedRoots: readonly string[]): Promise<FileSnapshot>;
|
|
@@ -30,7 +34,7 @@ export declare function sameFile(a: FileSnapshot, b: FileSnapshot): boolean;
|
|
|
30
34
|
export declare function checkedBytes(before: FileSnapshot): Promise<Buffer>;
|
|
31
35
|
export declare function freezeChange(owner: LispOwner, request: ProposalInput, backupRoot: string, protectedRoots: readonly string[]): Promise<FrozenChange>;
|
|
32
36
|
/** Backups are independent copies. Never replay this function after an uncertain outcome. */
|
|
33
|
-
export declare function applyChange(owner: LispOwner, change: FrozenChange, protectedRoots: readonly string[]): Promise<void>;
|
|
37
|
+
export declare function applyChange(owner: LispOwner, change: FrozenChange, protectedRoots: readonly string[], createdParents?: CreatedParents): Promise<void>;
|
|
34
38
|
export declare function backupUsage(root: string): Promise<number>;
|
|
35
39
|
export declare function restoreBytes(source: NonNullable<FrozenChange['restoration']>): Promise<Buffer>;
|
|
36
40
|
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/files.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAErF,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AACzN,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/files.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAErF,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AACzN,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAC7K,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEtE,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAkI;AAE5L,yFAAyF;AACzF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAkCnH;AACD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAElE;AACD,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CASxE;AAQD,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAKzJ;AACD,6FAA6F;AAC7F,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,EAAE,cAAc,GAAE,cAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CtK;AACD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AACD,wBAAsB,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CASpG"}
|