@dotit/core 1.1.1 → 1.2.0
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/document-css.d.ts +1 -1
- package/dist/document-css.js +6 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +10 -2
- package/dist/parser.js +18 -1
- package/dist/sha256.d.ts +2 -0
- package/dist/sha256.js +122 -0
- package/dist/trust.d.ts +13 -0
- package/dist/trust.js +46 -6
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +39 -0
- package/package.json +1 -1
package/dist/document-css.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const DOCUMENT_CSS = "\n/* \u2500\u2500 Base \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-document{font-family:Georgia,'Times New Roman',serif;line-height:1.7;color:#111;max-width:680px;margin:0 auto;padding:32px 24px;}\n/* \u2500\u2500 Typography \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-title{font-size:1.75rem;line-height:1.2;margin:0 0 12px;font-weight:700;letter-spacing:-0.01em;}\n.intent-summary{margin:8px 0 20px;padding-block:8px;padding-inline:0;padding-inline-start:14px;border-inline-start:2px solid #999;color:#333;font-style:italic;font-size:0.95rem;}\n.intent-section{margin:24px 0 8px;font-size:1.1rem;line-height:1.3;font-weight:600;padding-bottom:4px;border-bottom:1px solid #ccc;}\n.intent-sub{margin:16px 0 6px;font-size:1rem;line-height:1.3;font-weight:600;}\n.intent-note{margin:6px 0;color:#222;}\n.intent-prose{margin:0 0 1em;color:#222;font-size:1rem;line-height:1.8;max-width:65ch;text-wrap:pretty;}\n.intent-align-center{text-align:center;}\n.intent-align-right{text-align:end;}\n.intent-align-justify{text-align:justify;}\n/* \u2500\u2500 Two-sided rows (end:) \u2014 flex start/end, RTL-native \u2500\u2500 */\n.it-split{display:flex;justify-content:space-between;align-items:baseline;gap:12px;}\n.it-split-main{min-width:0;}\n.it-split-end{flex-shrink:0;}\n/* \u2500\u2500 Divider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-divider{margin:18px 0;text-align:center;}\n.intent-divider-line{border:none;border-top:1px solid #ccc;margin:0;}\n.intent-divider-label{display:inline-block;padding:0 10px;background:#fff;color:#888;font-size:0.78rem;position:relative;top:-9px;}\n/* \u2500\u2500 Tasks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-task{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-task-checkbox{margin-top:3px;flex-shrink:0;}\n.intent-task-text{flex:1;}\n.intent-task-meta{display:flex;gap:6px;color:#888;font-size:0.78rem;white-space:nowrap;}\n.intent-task-owner::before{content:'@ ';opacity:0.6;}\n.intent-task-due::before{content:'due ';}\n.intent-task-time::before{content:'at ';}\n.intent-task-text-done{text-decoration:line-through;color:#999;}\n/* \u2500\u2500 Ask \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-ask{display:flex;gap:10px;margin:10px 0;padding-block:6px;padding-inline:0;padding-inline-start:12px;border-inline-start:2px solid #999;align-items:baseline;}\n.intent-ask-label{font-size:0.68rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:#555;flex-shrink:0;line-height:1.65;}\n.intent-ask-content{flex:1;color:#333;font-style:italic;}\n/* \u2500\u2500 Quote \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-quote{margin:14px 0;padding-block:2px;padding-inline:0;padding-inline-start:16px;border-inline-start:2px solid #999;font-style:italic;color:#333;}\n.intent-quote p{margin:0;line-height:1.7;}\n.intent-quote-cite{display:block;margin-top:5px;font-style:normal;color:#888;font-size:0.82rem;}\n/* \u2500\u2500 Code \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-code{margin:10px 0;padding:10px 12px;background:#f5f5f5;border:1px solid #ddd;overflow-x:auto;}\n.intent-code code{font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,monospace;font-size:0.85rem;color:#111;}\n/* \u2500\u2500 Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-table{width:100%;border-collapse:collapse;margin:12px 0;font-size:0.9em;}\n.intent-table th,.intent-table-th{padding:6px 10px;text-align:start;font-weight:600;font-size:0.78rem;text-transform:uppercase;letter-spacing:0.04em;border-bottom:2px solid #333;}\n.intent-table td,.intent-table-td{padding:6px 10px;text-align:start;border-bottom:1px solid #ddd;vertical-align:top;}\n.intent-row:last-child .intent-table-td,.intent-row:last-child td{border-bottom:none;}\n/* \u2500\u2500 Image \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-image{margin:12px 0;}\n.intent-image-img{max-width:100%;height:auto;border:1px solid #ddd;}\n.intent-image-caption{margin-top:4px;color:#555;font-size:0.82rem;text-align:center;font-style:italic;}\n/* \u2500\u2500 Links / Refs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-link{margin:4px 0;}\n.intent-link a{color:#111;text-decoration:underline;}\n.intent-ref{margin:4px 0;}\n.intent-ref a{color:#111;text-decoration:underline;font-style:italic;}\n.intent-unknown{margin:6px 0;padding:6px 10px;border:1px dashed #ccc;color:#888;}\n/* \u2500\u2500 Embed \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-embed{margin:14px 0;}\n.intent-embed iframe,.intent-embed video,.intent-embed audio{display:block;width:100%;border:1px solid #ddd;}\n/* \u2500\u2500 Callouts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-callout{display:flex;gap:10px;margin:10px 0;padding-block:6px;padding-inline:0;padding-inline-start:12px;border-inline-start:2px solid #888;align-items:baseline;}\n.intent-callout-label{font-size:0.68rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;flex-shrink:0;white-space:nowrap;line-height:1.65;color:#444;}\n.intent-callout-content{flex:1;color:#222;}\n.intent-info{border-color:#888;}\n.intent-info .intent-callout-label{color:#444;}\n.intent-warning{border-color:#888;}\n.intent-warning .intent-callout-label{color:#444;}\n.intent-tip{border-color:#888;}\n.intent-tip .intent-callout-label{color:#444;}\n.intent-success{border-color:#888;}\n.intent-success .intent-callout-label{color:#444;}\n/* \u2500\u2500 Inline formatting \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-inline-link{color:#111;text-decoration:underline;}\n.intent-inline-highlight{background:#eee;padding:0 .15em;}\n.intent-inline-note{display:inline-block;padding:0 .3em;border:1px solid #ddd;color:#333;font-size:.92em;}\n.intent-inline-quote{color:#333;font-style:italic;}\n.intent-inline-date{font-weight:600;font-family:'SFMono-Regular',Consolas,monospace;}\n.intent-inline-mention{font-weight:600;}\n.intent-inline-tag{font-weight:600;}\n/* \u2500\u2500 Lists \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\nul,ol{margin:6px 0 6px 20px;padding:0;}\nli{margin:3px 0;color:#222;}\n/* \u2500\u2500 v2 Agentic Workflow Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-step{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-step-icon{font-size:0.85rem;flex-shrink:0;}\n.intent-step-content{flex:1;font-weight:500;}\n.intent-step-meta{display:flex;gap:5px;align-items:center;flex-wrap:wrap;}\n.intent-step-id{font-size:0.72rem;color:#888;font-family:monospace;}\n.intent-step-depends{font-size:0.75rem;color:#555;font-style:italic;}\n.intent-badge{font-size:0.7rem;padding:1px 6px;border:1px solid #bbb;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;}\n.intent-badge-tool{border-color:#999;}\n.intent-status-pending{color:#666;}\n.intent-status-running{color:#333;animation:intent-pulse 1.5s ease-in-out infinite;}\n.intent-status-blocked{color:#666;}\n.intent-status-failed{color:#333;text-decoration:line-through;}\n.intent-status-done{color:#333;}\n.intent-status-skipped,.intent-status-cancelled{color:#999;text-decoration:line-through;}\n@keyframes intent-pulse{0%,100%{opacity:1;}50%{opacity:0.4;}}\n.intent-decision{display:flex;gap:10px;margin:8px 0;padding:8px 12px;border:1px solid #bbb;}\n.intent-decision-diamond{width:16px;height:16px;border:2px solid #333;transform:rotate(45deg);flex-shrink:0;margin-top:4px;}\n.intent-decision-body{flex:1;}\n.intent-decision-label{font-weight:600;margin-bottom:3px;}\n.intent-decision-condition{font-size:0.85rem;color:#444;font-family:monospace;margin-bottom:3px;}\n.intent-decision-branches{display:flex;gap:14px;font-size:0.82rem;}\n.intent-decision-then{color:#333;}\n.intent-decision-else{color:#333;}\n.intent-trigger{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-trigger-icon{font-size:1rem;}\n.intent-trigger-content{flex:1;font-weight:500;}\n.intent-badge-event{border-color:#999;}\n.intent-loop{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-loop-icon{font-size:1rem;}\n.intent-loop-content{flex:1;font-weight:500;}\n.intent-loop-over,.intent-loop-do{font-size:0.8rem;color:#555;font-family:monospace;}\n.intent-checkpoint{display:flex;align-items:center;gap:8px;margin:16px 0;color:#555;font-size:0.85rem;font-weight:600;text-transform:uppercase;letter-spacing:0.06em;}\n.intent-checkpoint-flag{font-size:1rem;}\n.intent-checkpoint-label{flex-shrink:0;}\n.intent-checkpoint-line{flex:1;border:none;border-top:1px dashed #bbb;margin:0;}\n.intent-audit{margin:4px 0;padding:4px 8px;font-family:'SFMono-Regular',Consolas,monospace;font-size:0.8rem;color:#555;border-inline-start:2px solid #bbb;}\n.intent-audit-prefix{color:#888;font-weight:600;}\n.intent-error-block{border-color:#999;}\n.intent-error-block .intent-callout-label{color:#333;}\n.intent-error-fallback{font-size:0.8rem;color:#555;font-style:italic;margin-inline-start:6px;}\n.intent-error-notify{font-size:0.8rem;color:#555;margin-inline-start:6px;}\n.intent-context-table{width:auto;border-collapse:collapse;margin:6px 0;font-size:0.85rem;}\n.intent-context-key{padding:3px 10px 3px 8px;font-weight:600;color:#333;font-family:monospace;border-bottom:1px solid #ddd;}\n.intent-context-val{padding:3px 12px 3px 6px;color:#333;font-family:monospace;border-bottom:1px solid #ddd;}\n.intent-context{margin:4px 0;font-size:0.85rem;color:#333;}\n.intent-progress{display:flex;align-items:center;gap:8px;margin:6px 0;}\n.intent-progress-label{font-size:0.85rem;color:#222;flex-shrink:0;}\n.intent-progress-bar{flex:1;height:6px;background:#ddd;overflow:hidden;}\n.intent-progress-fill{height:100%;background:#555;}\n.intent-progress-pct{font-size:0.78rem;color:#555;font-weight:600;min-width:36px;text-align:end;}\n.intent-file-ref{display:flex;align-items:center;gap:6px;margin:4px 0;padding:4px 8px;border:1px dashed #ccc;font-size:0.82rem;color:#555;font-family:monospace;}\n.intent-file-ref-icon{font-size:0.9rem;}\n/* \u2500\u2500 v2.1 Agentic Workflow Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-emit-block{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-emit-icon{font-size:1rem;}\n.intent-emit-content{flex:1;font-weight:500;}\n.intent-emit-meta{display:flex;gap:5px;align-items:center;}\n.intent-emit-phase{font-size:0.78rem;color:#555;font-weight:600;}\n.intent-badge-level{border-color:#999;}\n.intent-result{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;flex-wrap:wrap;}\n.intent-result-success{border-color:#999;}\n.intent-result-error,.intent-result-failure{border-color:#999;}\n.intent-result-icon{font-size:1rem;flex-shrink:0;}\n.intent-result-content{flex:1;font-weight:500;}\n.intent-badge-code{border-color:#999;font-family:monospace;}\n.intent-result-data{width:100%;margin-top:3px;padding:4px 8px;font-size:0.82rem;overflow-x:auto;border-top:1px solid #ddd;}\n.intent-result-data code{font-family:'SFMono-Regular',Consolas,monospace;font-size:0.82rem;color:#333;}\n.intent-handoff{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-handoff-icon{font-size:1rem;}\n.intent-handoff-content{flex:1;font-weight:500;}\n.intent-handoff-arrow{display:flex;align-items:center;gap:5px;font-size:0.82rem;color:#444;font-weight:600;}\n.intent-handoff-agent{padding:1px 5px;border:1px solid #bbb;font-family:monospace;font-size:0.78rem;}\n.intent-wait{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;border-inline-start:2px solid #999;}\n.intent-wait-icon{font-size:1rem;animation:intent-pulse 2s ease-in-out infinite;}\n.intent-wait-content{flex:1;font-weight:500;color:#333;}\n.intent-wait-meta{display:flex;gap:5px;align-items:center;}\n.intent-badge-timeout{border-color:#999;font-family:monospace;}\n.intent-wait-fallback{font-size:0.8rem;color:#555;font-style:italic;}\n.intent-parallel{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-parallel-icon{font-size:1rem;}\n.intent-parallel-content{flex:1;font-weight:500;}\n.intent-parallel-steps{display:flex;gap:4px;flex-wrap:wrap;}\n.intent-badge-parallel-step{border-color:#999;font-family:monospace;font-size:0.72rem;padding:1px 5px;}\n.intent-badge-join{border-color:#999;font-size:0.72rem;padding:1px 5px;}\n.intent-retry{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-retry-icon{font-size:1rem;}\n.intent-retry-content{flex:1;font-weight:500;}\n.intent-retry-meta{display:flex;gap:5px;align-items:center;}\n.intent-badge-retry-max{border-color:#999;font-size:0.72rem;}\n.intent-badge-retry-delay{border-color:#999;font-size:0.72rem;font-family:monospace;}\n.intent-badge-retry-backoff{border-color:#999;font-size:0.72rem;font-style:italic;}\n/* \u2500\u2500 v2.2 Agentic Workflow Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-gate{display:flex;gap:10px;margin:8px 0;padding:10px 12px;border:2px solid #888;}\n.intent-gate-icon{font-size:1.2rem;flex-shrink:0;margin-top:2px;}\n.intent-gate-body{flex:1;}\n.intent-gate-label{font-weight:600;margin-bottom:3px;}\n.intent-gate-meta{display:flex;gap:5px;align-items:center;flex-wrap:wrap;}\n.intent-badge-approver{border-color:#999;font-family:monospace;}\n.intent-gate-fallback{font-size:0.8rem;color:#555;font-style:italic;}\n.intent-call{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px dashed #999;margin:5px 0;}\n.intent-call-icon{font-size:1rem;}\n.intent-call-content{flex:1;font-weight:500;font-family:monospace;font-size:0.9rem;}\n.intent-call-meta{display:flex;gap:6px;align-items:center;}\n.intent-call-input{font-size:0.78rem;color:#555;font-family:monospace;}\n.intent-call-output{font-size:0.78rem;color:#555;font-family:monospace;}\n/* \u2500\u2500 v2.5 Document Generation Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.it-page-break{page-break-after:always;break-after:page;height:0;}\n.it-byline{margin:0 0 16px;font-size:0.9em;color:#333;}\n.it-byline-author{display:block;font-weight:bold;}\n.it-byline-meta{display:block;font-size:0.85em;color:#666;margin-top:2px;}\n.it-epigraph{font-style:italic;text-align:center;margin:20px 3em;border:none;padding:0;}\n.it-epigraph p{margin:0;}\n.it-epigraph .it-epigraph-by{display:block;text-align:end;font-size:0.9em;margin-top:4px;font-style:normal;color:#666;}\n.it-caption{font-size:0.85em;font-style:italic;text-align:center;color:#444;margin-top:3px;margin-bottom:10px;}\n.it-dedication{font-style:italic;text-align:center;margin:3em auto;}\n.it-toc{margin:20px 0;}\n.it-toc-title{font-size:1.1rem;font-weight:600;margin-bottom:8px;border:none;}\n.it-toc ol{list-style:none;padding:0;margin:0;}\n.it-toc li{margin:3px 0;}\n.it-toc li a{color:#111;text-decoration:none;border-bottom:1px dotted #bbb;}\n.it-toc li a:hover{border-bottom-style:solid;}\n.it-toc .it-toc-sub{padding-inline-start:20px;font-size:0.92em;}\n.it-footnotes{border-top:1px solid #ccc;margin-top:24px;padding-top:8px;font-size:0.85em;color:#444;}\n.it-footnotes ol{padding-inline-start:1.5em;margin:0;}\n.it-footnotes li{margin:3px 0;}\nsup.it-fn-ref{font-size:0.7em;vertical-align:super;}\nsup.it-fn-ref a{color:#111;text-decoration:none;border-bottom:1px solid #999;}\n/* \u2500\u2500 v2.8 Document Trust \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* Trust blocks are typeset like entries in a legal document \u2014 hairlines and\n small-caps labels, no colored fills (ink-first; prints exactly as shown). */\n.it-approval{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;margin:12px 0;padding:7px 2px;border-bottom:1px solid #ddd;}\n.it-approval__icon{display:none;}\n.it-approval__body{display:contents;}\n.it-approval__label{font-size:0.7rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:#2e7d32;flex-shrink:0;}\n.it-approval__label::before{content:'\u2713 ';}\n.it-approval__what{font-size:0.9rem;font-weight:600;color:#111;}\n.it-approval__who{font-size:0.9rem;color:#555;}\n.it-approval__date{font-size:0.8rem;color:#777;margin-inline-start:auto;font-variant-numeric:tabular-nums;}\n.it-signature{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;margin:14px 0 10px;padding:7px 2px 5px;border-top:1px solid #111;}\n.it-signature--valid{border-top-color:#111;}\n.it-signature--invalid{border-top-color:#c62828;}\n.it-signature__name{font-weight:600;font-size:0.95rem;color:#111;}\n.it-signature__role{font-size:0.85rem;color:#555;}\n.it-signature__date{font-size:0.8rem;color:#777;font-variant-numeric:tabular-nums;}\n.it-signature__status{font-size:0.72rem;font-weight:600;margin-inline-start:auto;text-transform:uppercase;letter-spacing:0.08em;color:#2e7d32;}\n.it-signature--invalid .it-signature__status{color:#c62828;}\n.it-sealed-banner{display:flex;flex-wrap:wrap;gap:12px;align-items:baseline;margin:18px 0;padding:8px 2px;border-top:1px solid #111;border-bottom:1px solid #111;}\n.it-sealed-banner__icon{display:none;}\n.it-sealed-banner__text{font-size:0.78rem;font-weight:700;color:#111;text-transform:uppercase;letter-spacing:0.14em;}\n.it-sealed-banner__date{font-size:0.8rem;color:#666;margin-inline-start:auto;font-variant-numeric:tabular-nums;}\n.it-sealed-banner__hash{font-size:0.72rem;color:#999;font-family:'SFMono-Regular',Consolas,monospace;}\n/* \u2500\u2500 v2.11 Keyword Expansion \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.it-ref-card{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.it-ref-icon{font-size:1rem;flex-shrink:0;}\n.it-ref-link{color:#111;text-decoration:underline;font-weight:500;}\n.it-ref-name{font-weight:500;}\n.it-ref-rel{font-size:0.7rem;padding:1px 6px;border:1px solid #bbb;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;}\n.it-def{margin:6px 0;padding:4px 0;}\n.it-def-term{font-weight:700;font-size:0.95rem;color:#111;}\n.it-def-abbr{font-weight:400;color:#555;}\n.it-def-meaning{margin:2px 0 0 0;color:#333;font-size:0.92rem;padding-inline-start:1em;}\n.it-metric{display:inline-block;padding:10px 14px;border:1px solid #ddd;margin:5px;min-width:140px;vertical-align:top;}\n.it-metric-name{font-size:0.78rem;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;color:#555;}\n.it-metric-value{font-size:1.6rem;font-weight:700;line-height:1.2;color:#111;}\n.it-metric-unit{font-size:0.85rem;font-weight:400;color:#666;margin-inline-start:2px;}\n.it-metric-target{font-size:0.78rem;color:#888;}\n.it-metric-trend{font-size:1rem;font-weight:700;margin-top:2px;}\n.it-metric-period{font-size:0.72rem;color:#888;}\n.it-metric-green{border-color:#4caf50;}\n.it-metric-green .it-metric-value{color:#2e7d32;}\n.it-metric-red{border-color:#c62828;}\n.it-metric-red .it-metric-value{color:#c62828;}\n.it-metric-neutral{border-color:#ddd;}\n/* Document total/line rows (invoice, receipt, statement) \u2014 matches the editor's\n itMetric node so editor-designed templates print identically. */\n.it-metric-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:5px 0;border-bottom:1px solid var(--it-color-border,#e5e7eb);}\n.it-metric-row__label{color:var(--it-color-muted,#555);}\n.it-metric-row__value{font-variant-numeric:tabular-nums;font-weight:600;color:var(--it-color-text,#111);white-space:nowrap;}\n.it-metric-row--total{border-bottom:none;border-top:2px solid var(--it-color-text,#333);margin-top:2px;padding-top:8px;font-size:1.05em;}\n.it-metric-row--total .it-metric-row__label{color:var(--it-color-text,#111);font-weight:600;}\n.it-amendment{margin:10px 0;padding:10px 14px;border:2px solid #e65100;background:#fff8e1;}\n.it-amendment-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;}\n.it-amendment-icon{font-size:1rem;}\n.it-amendment-ref{font-size:0.72rem;font-weight:700;padding:1px 6px;border:1px solid #e65100;color:#e65100;text-transform:uppercase;letter-spacing:0.04em;}\n.it-amendment-title{font-weight:600;color:#111;}\n.it-amendment-section{font-size:0.85rem;color:#555;font-style:italic;}\n.it-amendment-was{font-size:0.85rem;color:#c62828;text-decoration:line-through;}\n.it-amendment-now{font-size:0.85rem;color:#2e7d32;font-weight:500;}\n.it-amendment-meta{display:flex;gap:8px;margin-top:4px;font-size:0.8rem;color:#666;}\n.it-figure{margin:14px 0;}\n.it-figure img{display:block;margin:0 auto;border:1px solid #ddd;}\n.it-figure-caption{font-size:0.85em;font-style:italic;text-align:center;color:#444;margin-top:6px;}\n.it-signline{margin:20px 0;padding:0;}\n.it-signline-label{font-size:0.72rem;color:#888;text-transform:uppercase;letter-spacing:0.06em;margin-bottom:4px;}\n.it-signline-rule{border-bottom:1px solid #111;margin-bottom:4px;}\n.it-signline-name{font-size:0.9rem;font-weight:500;color:#111;}\n.it-signline-role{font-size:0.82rem;color:#555;}\n.it-signline-date{font-size:0.82rem;color:#555;margin-top:4px;}\n.it-contact{padding:8px 12px;border:1px solid #ddd;margin:5px 0;}\n.it-contact-name{font-weight:600;font-size:0.95rem;color:#111;}\n.it-contact-role{font-size:0.82rem;color:#555;}\n.it-contact-org{font-size:0.82rem;color:#555;}\n.it-contact-email a,.it-contact-phone a,.it-contact-url a{color:#111;text-decoration:underline;font-size:0.85rem;}\n.it-deadline{padding:8px 12px;border-inline-start:3px solid #4caf50;margin:5px 0;}\n.it-deadline-name{font-weight:600;color:#111;}\n.it-deadline-date{font-size:0.9rem;font-weight:600;color:#111;}\n.it-deadline-consequence{font-size:0.85rem;color:#555;font-style:italic;}\n.it-deadline-owner{font-size:0.82rem;color:#555;}\n.it-deadline-authority{font-size:0.82rem;color:#555;}\n.it-deadline-green{border-color:#4caf50;}\n.it-deadline-amber{border-color:#f57c00;}\n.it-deadline-red{border-color:#c62828;}\n";
|
|
1
|
+
export declare const DOCUMENT_CSS = "\n/* \u2500\u2500 Base \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-document{font-family:Georgia,'Times New Roman',serif;line-height:1.7;color:#111;max-width:680px;margin:0 auto;padding:32px 24px;}\n/* \u2500\u2500 Typography \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-title{font-size:1.75rem;line-height:1.2;margin:0 0 12px;font-weight:700;letter-spacing:-0.01em;}\n.intent-summary{margin:8px 0 20px;padding-block:8px;padding-inline:0;padding-inline-start:14px;border-inline-start:2px solid #999;color:#333;font-style:italic;font-size:0.95rem;}\n.intent-section{margin:24px 0 8px;font-size:1.1rem;line-height:1.3;font-weight:600;padding-bottom:4px;border-bottom:1px solid #ccc;}\n.intent-sub{margin:16px 0 6px;font-size:1rem;line-height:1.3;font-weight:600;}\n.intent-note{margin:6px 0;color:#222;}\n.intent-prose{margin:0 0 1em;color:#222;font-size:1rem;line-height:1.8;max-width:65ch;text-wrap:pretty;}\n.intent-align-center{text-align:center;}\n.intent-align-right{text-align:end;}\n.intent-align-justify{text-align:justify;}\n/* \u2500\u2500 Two-sided rows (end:) \u2014 flex start/end, RTL-native \u2500\u2500 */\n.it-split{display:flex;justify-content:space-between;align-items:baseline;gap:12px;}\n.it-split-main{min-width:0;}\n.it-split-end{flex-shrink:0;}\n/* \u2500\u2500 Divider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-divider{margin:18px 0;text-align:center;}\n.intent-divider-line{border:none;border-top:1px solid #ccc;margin:0;}\n.intent-divider-label{display:inline-block;padding:0 10px;background:#fff;color:#888;font-size:0.78rem;position:relative;top:-9px;}\n/* \u2500\u2500 Tasks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-task{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-task-checkbox{margin-top:3px;flex-shrink:0;}\n.intent-task-text{flex:1;}\n.intent-task-meta{display:flex;gap:6px;color:#888;font-size:0.78rem;white-space:nowrap;}\n.intent-task-owner::before{content:'@ ';opacity:0.6;}\n.intent-task-due::before{content:'due ';}\n.intent-task-time::before{content:'at ';}\n.intent-task-text-done{text-decoration:line-through;color:#999;}\n/* \u2500\u2500 Ask \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-ask{display:flex;gap:10px;margin:10px 0;padding-block:6px;padding-inline:0;padding-inline-start:12px;border-inline-start:2px solid #999;align-items:baseline;}\n.intent-ask-label{font-size:0.68rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:#555;flex-shrink:0;line-height:1.65;}\n.intent-ask-content{flex:1;color:#333;font-style:italic;}\n/* \u2500\u2500 Quote \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-quote{margin:14px 0;padding-block:2px;padding-inline:0;padding-inline-start:16px;border-inline-start:2px solid #999;font-style:italic;color:#333;}\n.intent-quote p{margin:0;line-height:1.7;}\n.intent-quote-cite{display:block;margin-top:5px;font-style:normal;color:#888;font-size:0.82rem;}\n/* \u2500\u2500 Code \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-code{margin:10px 0;padding:10px 12px;background:#f5f5f5;border:1px solid #ddd;overflow-x:auto;}\n.intent-code code{font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,monospace;font-size:0.85rem;color:#111;}\n/* \u2500\u2500 Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-table{width:100%;border-collapse:collapse;margin:12px 0;font-size:0.9em;}\n.intent-table th,.intent-table-th{padding:6px 10px;text-align:start;font-weight:600;font-size:0.78rem;text-transform:uppercase;letter-spacing:0.04em;border-bottom:2px solid #333;}\n.intent-table td,.intent-table-td{padding:6px 10px;text-align:start;border-bottom:1px solid #ddd;vertical-align:top;}\n.intent-row:last-child .intent-table-td,.intent-row:last-child td{border-bottom:none;}\n/* \u2500\u2500 Image \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-image{margin:12px 0;}\n.intent-image-img{max-width:100%;height:auto;border:1px solid #ddd;}\n.intent-image-caption{margin-top:4px;color:#555;font-size:0.82rem;text-align:center;font-style:italic;}\n/* \u2500\u2500 Links / Refs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-link{margin:4px 0;}\n.intent-link a{color:#111;text-decoration:underline;}\n.intent-ref{margin:4px 0;}\n.intent-ref a{color:#111;text-decoration:underline;font-style:italic;}\n.intent-unknown{margin:6px 0;padding:6px 10px;border:1px dashed #ccc;color:#888;}\n/* \u2500\u2500 Embed \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-embed{margin:14px 0;}\n.intent-embed iframe,.intent-embed video,.intent-embed audio{display:block;width:100%;border:1px solid #ddd;}\n/* \u2500\u2500 Callouts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-callout{display:flex;gap:10px;margin:10px 0;padding-block:6px;padding-inline:0;padding-inline-start:12px;border-inline-start:2px solid #888;align-items:baseline;}\n.intent-callout-label{font-size:0.68rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;flex-shrink:0;white-space:nowrap;line-height:1.65;color:#444;}\n.intent-callout-content{flex:1;color:#222;}\n/* Info is the quiet variant: a soft gray panel with an \u24D8 marker and italic\n text \u2014 \"this is worth noting\", not an alarm. */\n.intent-info{background:#f5f6f8;border-inline-start:3px solid #c7ccd3;border-radius:0 3px 3px 0;padding-block:8px;padding-inline-start:12px;padding-inline-end:14px;}\n.intent-info .intent-callout-label{display:none;}\n.intent-info .intent-callout-content{font-style:italic;color:#4f4f4f;}\n.intent-info .intent-callout-content::before{content:\"\u24D8 \";font-style:normal;font-weight:600;color:#6e6e6e;}\n.intent-warning{border-color:#888;}\n.intent-warning .intent-callout-label{color:#444;}\n.intent-tip{border-color:#888;}\n.intent-tip .intent-callout-label{color:#444;}\n.intent-success{border-color:#888;}\n.intent-success .intent-callout-label{color:#444;}\n/* \u2500\u2500 Inline formatting \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-inline-link{color:#111;text-decoration:underline;}\n.intent-inline-highlight{background:#eee;padding:0 .15em;}\n.intent-inline-note{display:inline-block;padding:0 .3em;border:1px solid #ddd;color:#333;font-size:.92em;}\n.intent-inline-quote{color:#333;font-style:italic;}\n.intent-inline-date{font-weight:600;font-family:'SFMono-Regular',Consolas,monospace;}\n.intent-inline-mention{font-weight:600;}\n.intent-inline-tag{font-weight:600;}\n/* \u2500\u2500 Lists \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\nul,ol{margin:6px 0 6px 20px;padding:0;}\nli{margin:3px 0;color:#222;}\n/* \u2500\u2500 v2 Agentic Workflow Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-step{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-step-icon{font-size:0.85rem;flex-shrink:0;}\n.intent-step-content{flex:1;font-weight:500;}\n.intent-step-meta{display:flex;gap:5px;align-items:center;flex-wrap:wrap;}\n.intent-step-id{font-size:0.72rem;color:#888;font-family:monospace;}\n.intent-step-depends{font-size:0.75rem;color:#555;font-style:italic;}\n.intent-badge{font-size:0.7rem;padding:1px 6px;border:1px solid #bbb;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;}\n.intent-badge-tool{border-color:#999;}\n.intent-status-pending{color:#666;}\n.intent-status-running{color:#333;animation:intent-pulse 1.5s ease-in-out infinite;}\n.intent-status-blocked{color:#666;}\n.intent-status-failed{color:#333;text-decoration:line-through;}\n.intent-status-done{color:#333;}\n.intent-status-skipped,.intent-status-cancelled{color:#999;text-decoration:line-through;}\n@keyframes intent-pulse{0%,100%{opacity:1;}50%{opacity:0.4;}}\n.intent-decision{display:flex;gap:10px;margin:8px 0;padding:8px 12px;border:1px solid #bbb;}\n.intent-decision-diamond{width:16px;height:16px;border:2px solid #333;transform:rotate(45deg);flex-shrink:0;margin-top:4px;}\n.intent-decision-body{flex:1;}\n.intent-decision-label{font-weight:600;margin-bottom:3px;}\n.intent-decision-condition{font-size:0.85rem;color:#444;font-family:monospace;margin-bottom:3px;}\n.intent-decision-branches{display:flex;gap:14px;font-size:0.82rem;}\n.intent-decision-then{color:#333;}\n.intent-decision-else{color:#333;}\n.intent-trigger{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-trigger-icon{font-size:1rem;}\n.intent-trigger-content{flex:1;font-weight:500;}\n.intent-badge-event{border-color:#999;}\n.intent-loop{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.intent-loop-icon{font-size:1rem;}\n.intent-loop-content{flex:1;font-weight:500;}\n.intent-loop-over,.intent-loop-do{font-size:0.8rem;color:#555;font-family:monospace;}\n.intent-checkpoint{display:flex;align-items:center;gap:8px;margin:16px 0;color:#555;font-size:0.85rem;font-weight:600;text-transform:uppercase;letter-spacing:0.06em;}\n.intent-checkpoint-flag{font-size:1rem;}\n.intent-checkpoint-label{flex-shrink:0;}\n.intent-checkpoint-line{flex:1;border:none;border-top:1px dashed #bbb;margin:0;}\n.intent-audit{margin:4px 0;padding:4px 8px;font-family:'SFMono-Regular',Consolas,monospace;font-size:0.8rem;color:#555;border-inline-start:2px solid #bbb;}\n.intent-audit-prefix{color:#888;font-weight:600;}\n.intent-error-block{border-color:#999;}\n.intent-error-block .intent-callout-label{color:#333;}\n.intent-error-fallback{font-size:0.8rem;color:#555;font-style:italic;margin-inline-start:6px;}\n.intent-error-notify{font-size:0.8rem;color:#555;margin-inline-start:6px;}\n.intent-context-table{width:auto;border-collapse:collapse;margin:6px 0;font-size:0.85rem;}\n.intent-context-key{padding:3px 10px 3px 8px;font-weight:600;color:#333;font-family:monospace;border-bottom:1px solid #ddd;}\n.intent-context-val{padding:3px 12px 3px 6px;color:#333;font-family:monospace;border-bottom:1px solid #ddd;}\n.intent-context{margin:4px 0;font-size:0.85rem;color:#333;}\n.intent-progress{display:flex;align-items:center;gap:8px;margin:6px 0;}\n.intent-progress-label{font-size:0.85rem;color:#222;flex-shrink:0;}\n.intent-progress-bar{flex:1;height:6px;background:#ddd;overflow:hidden;}\n.intent-progress-fill{height:100%;background:#555;}\n.intent-progress-pct{font-size:0.78rem;color:#555;font-weight:600;min-width:36px;text-align:end;}\n.intent-file-ref{display:flex;align-items:center;gap:6px;margin:4px 0;padding:4px 8px;border:1px dashed #ccc;font-size:0.82rem;color:#555;font-family:monospace;}\n.intent-file-ref-icon{font-size:0.9rem;}\n/* \u2500\u2500 v2.1 Agentic Workflow Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-emit-block{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-emit-icon{font-size:1rem;}\n.intent-emit-content{flex:1;font-weight:500;}\n.intent-emit-meta{display:flex;gap:5px;align-items:center;}\n.intent-emit-phase{font-size:0.78rem;color:#555;font-weight:600;}\n.intent-badge-level{border-color:#999;}\n.intent-result{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;flex-wrap:wrap;}\n.intent-result-success{border-color:#999;}\n.intent-result-error,.intent-result-failure{border-color:#999;}\n.intent-result-icon{font-size:1rem;flex-shrink:0;}\n.intent-result-content{flex:1;font-weight:500;}\n.intent-badge-code{border-color:#999;font-family:monospace;}\n.intent-result-data{width:100%;margin-top:3px;padding:4px 8px;font-size:0.82rem;overflow-x:auto;border-top:1px solid #ddd;}\n.intent-result-data code{font-family:'SFMono-Regular',Consolas,monospace;font-size:0.82rem;color:#333;}\n.intent-handoff{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-handoff-icon{font-size:1rem;}\n.intent-handoff-content{flex:1;font-weight:500;}\n.intent-handoff-arrow{display:flex;align-items:center;gap:5px;font-size:0.82rem;color:#444;font-weight:600;}\n.intent-handoff-agent{padding:1px 5px;border:1px solid #bbb;font-family:monospace;font-size:0.78rem;}\n.intent-wait{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;border-inline-start:2px solid #999;}\n.intent-wait-icon{font-size:1rem;animation:intent-pulse 2s ease-in-out infinite;}\n.intent-wait-content{flex:1;font-weight:500;color:#333;}\n.intent-wait-meta{display:flex;gap:5px;align-items:center;}\n.intent-badge-timeout{border-color:#999;font-family:monospace;}\n.intent-wait-fallback{font-size:0.8rem;color:#555;font-style:italic;}\n.intent-parallel{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-parallel-icon{font-size:1rem;}\n.intent-parallel-content{flex:1;font-weight:500;}\n.intent-parallel-steps{display:flex;gap:4px;flex-wrap:wrap;}\n.intent-badge-parallel-step{border-color:#999;font-family:monospace;font-size:0.72rem;padding:1px 5px;}\n.intent-badge-join{border-color:#999;font-size:0.72rem;padding:1px 5px;}\n.intent-retry{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #bbb;margin:5px 0;}\n.intent-retry-icon{font-size:1rem;}\n.intent-retry-content{flex:1;font-weight:500;}\n.intent-retry-meta{display:flex;gap:5px;align-items:center;}\n.intent-badge-retry-max{border-color:#999;font-size:0.72rem;}\n.intent-badge-retry-delay{border-color:#999;font-size:0.72rem;font-family:monospace;}\n.intent-badge-retry-backoff{border-color:#999;font-size:0.72rem;font-style:italic;}\n/* \u2500\u2500 v2.2 Agentic Workflow Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intent-gate{display:flex;gap:10px;margin:8px 0;padding:10px 12px;border:2px solid #888;}\n.intent-gate-icon{font-size:1.2rem;flex-shrink:0;margin-top:2px;}\n.intent-gate-body{flex:1;}\n.intent-gate-label{font-weight:600;margin-bottom:3px;}\n.intent-gate-meta{display:flex;gap:5px;align-items:center;flex-wrap:wrap;}\n.intent-badge-approver{border-color:#999;font-family:monospace;}\n.intent-gate-fallback{font-size:0.8rem;color:#555;font-style:italic;}\n.intent-call{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px dashed #999;margin:5px 0;}\n.intent-call-icon{font-size:1rem;}\n.intent-call-content{flex:1;font-weight:500;font-family:monospace;font-size:0.9rem;}\n.intent-call-meta{display:flex;gap:6px;align-items:center;}\n.intent-call-input{font-size:0.78rem;color:#555;font-family:monospace;}\n.intent-call-output{font-size:0.78rem;color:#555;font-family:monospace;}\n/* \u2500\u2500 v2.5 Document Generation Blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.it-page-break{page-break-after:always;break-after:page;height:0;}\n.it-byline{margin:0 0 16px;font-size:0.9em;color:#333;}\n.it-byline-author{display:block;font-weight:bold;}\n.it-byline-meta{display:block;font-size:0.85em;color:#666;margin-top:2px;}\n.it-epigraph{font-style:italic;text-align:center;margin:20px 3em;border:none;padding:0;}\n.it-epigraph p{margin:0;}\n.it-epigraph .it-epigraph-by{display:block;text-align:end;font-size:0.9em;margin-top:4px;font-style:normal;color:#666;}\n.it-caption{font-size:0.85em;font-style:italic;text-align:center;color:#444;margin-top:3px;margin-bottom:10px;}\n.it-dedication{font-style:italic;text-align:center;margin:3em auto;}\n.it-toc{margin:20px 0;}\n.it-toc-title{font-size:1.1rem;font-weight:600;margin-bottom:8px;border:none;}\n.it-toc ol{list-style:none;padding:0;margin:0;}\n.it-toc li{margin:3px 0;}\n.it-toc li a{color:#111;text-decoration:none;border-bottom:1px dotted #bbb;}\n.it-toc li a:hover{border-bottom-style:solid;}\n.it-toc .it-toc-sub{padding-inline-start:20px;font-size:0.92em;}\n.it-footnotes{border-top:1px solid #ccc;margin-top:24px;padding-top:8px;font-size:0.85em;color:#444;}\n.it-footnotes ol{padding-inline-start:1.5em;margin:0;}\n.it-footnotes li{margin:3px 0;}\nsup.it-fn-ref{font-size:0.7em;vertical-align:super;}\nsup.it-fn-ref a{color:#111;text-decoration:none;border-bottom:1px solid #999;}\n/* \u2500\u2500 v2.8 Document Trust \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* Trust blocks are typeset like entries in a legal document \u2014 hairlines and\n small-caps labels, no colored fills (ink-first; prints exactly as shown). */\n.it-approval{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;margin:12px 0;padding:7px 2px;border-bottom:1px solid #ddd;}\n.it-approval__icon{display:none;}\n.it-approval__body{display:contents;}\n.it-approval__label{font-size:0.7rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:#2e7d32;flex-shrink:0;}\n.it-approval__label::before{content:'\u2713 ';}\n.it-approval__what{font-size:0.9rem;font-weight:600;color:#111;}\n.it-approval__who{font-size:0.9rem;color:#555;}\n.it-approval__date{font-size:0.8rem;color:#777;margin-inline-start:auto;font-variant-numeric:tabular-nums;}\n.it-signature{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;margin:14px 0 10px;padding:7px 2px 5px;border-top:1px solid #111;}\n.it-signature--valid{border-top-color:#111;}\n.it-signature--invalid{border-top-color:#c62828;}\n.it-signature__name{font-weight:600;font-size:0.95rem;color:#111;}\n.it-signature__role{font-size:0.85rem;color:#555;}\n.it-signature__date{font-size:0.8rem;color:#777;font-variant-numeric:tabular-nums;}\n.it-signature__status{font-size:0.72rem;font-weight:600;margin-inline-start:auto;text-transform:uppercase;letter-spacing:0.08em;color:#2e7d32;}\n.it-signature--invalid .it-signature__status{color:#c62828;}\n.it-sealed-banner{display:flex;flex-wrap:wrap;gap:12px;align-items:baseline;margin:18px 0;padding:8px 2px;border-top:1px solid #111;border-bottom:1px solid #111;}\n.it-sealed-banner__icon{display:none;}\n.it-sealed-banner__text{font-size:0.78rem;font-weight:700;color:#111;text-transform:uppercase;letter-spacing:0.14em;}\n.it-sealed-banner__date{font-size:0.8rem;color:#666;margin-inline-start:auto;font-variant-numeric:tabular-nums;}\n.it-sealed-banner__hash{font-size:0.72rem;color:#999;font-family:'SFMono-Regular',Consolas,monospace;}\n/* \u2500\u2500 v2.11 Keyword Expansion \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.it-ref-card{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid #ddd;margin:5px 0;}\n.it-ref-icon{font-size:1rem;flex-shrink:0;}\n.it-ref-link{color:#111;text-decoration:underline;font-weight:500;}\n.it-ref-name{font-weight:500;}\n.it-ref-rel{font-size:0.7rem;padding:1px 6px;border:1px solid #bbb;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;}\n.it-def{margin:6px 0;padding:4px 0;}\n.it-def-term{font-weight:700;font-size:0.95rem;color:#111;}\n.it-def-abbr{font-weight:400;color:#555;}\n.it-def-meaning{margin:2px 0 0 0;color:#333;font-size:0.92rem;padding-inline-start:1em;}\n.it-metric{display:inline-block;padding:10px 14px;border:1px solid #ddd;margin:5px;min-width:140px;vertical-align:top;}\n.it-metric-name{font-size:0.78rem;font-weight:600;text-transform:uppercase;letter-spacing:0.04em;color:#555;}\n.it-metric-value{font-size:1.6rem;font-weight:700;line-height:1.2;color:#111;}\n.it-metric-unit{font-size:0.85rem;font-weight:400;color:#666;margin-inline-start:2px;}\n.it-metric-target{font-size:0.78rem;color:#888;}\n.it-metric-trend{font-size:1rem;font-weight:700;margin-top:2px;}\n.it-metric-period{font-size:0.72rem;color:#888;}\n.it-metric-green{border-color:#4caf50;}\n.it-metric-green .it-metric-value{color:#2e7d32;}\n.it-metric-red{border-color:#c62828;}\n.it-metric-red .it-metric-value{color:#c62828;}\n.it-metric-neutral{border-color:#ddd;}\n/* Document total/line rows (invoice, receipt, statement) \u2014 matches the editor's\n itMetric node so editor-designed templates print identically. */\n.it-metric-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:5px 0;border-bottom:1px solid var(--it-color-border,#e5e7eb);}\n.it-metric-row__label{color:var(--it-color-muted,#555);}\n.it-metric-row__value{font-variant-numeric:tabular-nums;font-weight:600;color:var(--it-color-text,#111);white-space:nowrap;}\n.it-metric-row--total{border-bottom:none;border-top:2px solid var(--it-color-text,#333);margin-top:2px;padding-top:8px;font-size:1.05em;}\n.it-metric-row--total .it-metric-row__label{color:var(--it-color-text,#111);font-weight:600;}\n.it-amendment{margin:10px 0;padding:10px 14px;border:2px solid #e65100;background:#fff8e1;}\n.it-amendment-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;}\n.it-amendment-icon{font-size:1rem;}\n.it-amendment-ref{font-size:0.72rem;font-weight:700;padding:1px 6px;border:1px solid #e65100;color:#e65100;text-transform:uppercase;letter-spacing:0.04em;}\n.it-amendment-title{font-weight:600;color:#111;}\n.it-amendment-section{font-size:0.85rem;color:#555;font-style:italic;}\n.it-amendment-was{font-size:0.85rem;color:#c62828;text-decoration:line-through;}\n.it-amendment-now{font-size:0.85rem;color:#2e7d32;font-weight:500;}\n.it-amendment-meta{display:flex;gap:8px;margin-top:4px;font-size:0.8rem;color:#666;}\n.it-figure{margin:14px 0;}\n.it-figure img{display:block;margin:0 auto;border:1px solid #ddd;}\n.it-figure-caption{font-size:0.85em;font-style:italic;text-align:center;color:#444;margin-top:6px;}\n.it-signline{margin:20px 0;padding:0;}\n.it-signline-label{font-size:0.72rem;color:#888;text-transform:uppercase;letter-spacing:0.06em;margin-bottom:4px;}\n.it-signline-rule{border-bottom:1px solid #111;margin-bottom:4px;}\n.it-signline-name{font-size:0.9rem;font-weight:500;color:#111;}\n.it-signline-role{font-size:0.82rem;color:#555;}\n.it-signline-date{font-size:0.82rem;color:#555;margin-top:4px;}\n.it-contact{padding:8px 12px;border:1px solid #ddd;margin:5px 0;}\n.it-contact-name{font-weight:600;font-size:0.95rem;color:#111;}\n.it-contact-role{font-size:0.82rem;color:#555;}\n.it-contact-org{font-size:0.82rem;color:#555;}\n.it-contact-email a,.it-contact-phone a,.it-contact-url a{color:#111;text-decoration:underline;font-size:0.85rem;}\n.it-deadline{padding:8px 12px;border-inline-start:3px solid #4caf50;margin:5px 0;}\n.it-deadline-name{font-weight:600;color:#111;}\n.it-deadline-date{font-size:0.9rem;font-weight:600;color:#111;}\n.it-deadline-consequence{font-size:0.85rem;color:#555;font-style:italic;}\n.it-deadline-owner{font-size:0.82rem;color:#555;}\n.it-deadline-authority{font-size:0.82rem;color:#555;}\n.it-deadline-green{border-color:#4caf50;}\n.it-deadline-amber{border-color:#f57c00;}\n.it-deadline-red{border-color:#c62828;}\n";
|
package/dist/document-css.js
CHANGED
|
@@ -64,8 +64,12 @@ exports.DOCUMENT_CSS = `
|
|
|
64
64
|
.intent-callout{display:flex;gap:10px;margin:10px 0;padding-block:6px;padding-inline:0;padding-inline-start:12px;border-inline-start:2px solid #888;align-items:baseline;}
|
|
65
65
|
.intent-callout-label{font-size:0.68rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;flex-shrink:0;white-space:nowrap;line-height:1.65;color:#444;}
|
|
66
66
|
.intent-callout-content{flex:1;color:#222;}
|
|
67
|
-
|
|
68
|
-
.
|
|
67
|
+
/* Info is the quiet variant: a soft gray panel with an ⓘ marker and italic
|
|
68
|
+
text — "this is worth noting", not an alarm. */
|
|
69
|
+
.intent-info{background:#f5f6f8;border-inline-start:3px solid #c7ccd3;border-radius:0 3px 3px 0;padding-block:8px;padding-inline-start:12px;padding-inline-end:14px;}
|
|
70
|
+
.intent-info .intent-callout-label{display:none;}
|
|
71
|
+
.intent-info .intent-callout-content{font-style:italic;color:#4f4f4f;}
|
|
72
|
+
.intent-info .intent-callout-content::before{content:"ⓘ ";font-style:normal;font-weight:600;color:#6e6e6e;}
|
|
69
73
|
.intent-warning{border-color:#888;}
|
|
70
74
|
.intent-warning .intent-callout-label{color:#444;}
|
|
71
75
|
.intent-tip{border-color:#888;}
|
package/dist/index.d.ts
CHANGED
|
@@ -26,7 +26,8 @@ export { extractWorkflow } from "./workflow";
|
|
|
26
26
|
export type { WorkflowStep, WorkflowGraph } from "./workflow";
|
|
27
27
|
export { executeWorkflow } from "./executor";
|
|
28
28
|
export type { WorkflowRuntime, ToolHandler, ExecutionContext, ExecutionResult, ExecutionLogEntry, ExecutionOptions, } from "./executor";
|
|
29
|
-
export { computeDocumentHash, findHistoryBoundaryInSource, sealDocument, verifyDocument, generateBlockId, blockFingerprint, matchBlocksToRegistry, computeTrustDiff, incrementVersion, } from "./trust";
|
|
29
|
+
export { computeDocumentHash, findHistoryBoundaryInSource, sealDocument, signDocument, verifyDocument, unsealDocument, isSealed, isSignedBy, generateBlockId, blockFingerprint, matchBlocksToRegistry, computeTrustDiff, incrementVersion, } from "./trust";
|
|
30
|
+
export { upsertMetaProperty, getMetaProperty, flattenBlocks } from "./utils";
|
|
30
31
|
export type { SealOptions, SealResult, VerifyResult, BlockSnapshot, TrustDiff, } from "./trust";
|
|
31
32
|
export { updateHistory, parseHistorySection } from "./history";
|
|
32
33
|
export type { SaveHistoryOptions } from "./history";
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.KEYWORDS = exports.serializeContext = exports.askDocuments = exports.formatCSV = exports.formatJSON = exports.formatTable = exports.queryComposed = exports.composeIndexes = exports.updateIndex = exports.checkStaleness = exports.buildIndexEntry = exports.buildShallowIndex = exports.detectHistoryBoundary = exports.parseHistorySection = exports.updateHistory = exports.incrementVersion = exports.computeTrustDiff = void 0;
|
|
3
|
+
exports.isSealed = exports.unsealDocument = exports.verifyDocument = exports.signDocument = exports.sealDocument = exports.findHistoryBoundaryInSource = exports.computeDocumentHash = exports.executeWorkflow = exports.extractWorkflow = exports.diffDocuments = exports.PREDEFINED_SCHEMAS = exports.formatValidationResult = exports.createSchema = exports.validateDocument = exports.queryDocument = exports.formatQueryResult = exports.parseQuery = exports.queryBlocks = exports.convertHtmlToIntentText = exports.convertMarkdownToIntentText = exports.parseAndMerge = exports.mergeData = exports.DOC_STYLE_TARGETS = exports.documentStyleCSS = exports.collectDocumentStyles = exports.cssContentValue = exports.collectPrintLayout = exports.renderPrint = exports.blockToSource = exports.documentToSource = exports.validateDocumentSemantic = exports.renderHTML = exports.parseIntentTextSafe = exports._resetIdCounter = exports.parseIntentText = exports.generateThemeCSS = exports.registerBuiltinTheme = exports.listBuiltinThemes = exports.getBuiltinTheme = exports.tierOf = exports.CORE_KEYWORDS = exports.KEYWORD_TIERS = exports.PUBLIC_KEYWORDS = exports.BOUNDARY_KEYWORDS = exports.COMPAT_ONLY_ALIASES = exports.DEPRECATED_ALIASES = exports.ALIAS_MAP = exports.CANONICAL_KEYWORDS = exports.LANGUAGE_REGISTRY = exports.ALIASES = void 0;
|
|
4
|
+
exports.KEYWORDS = exports.serializeContext = exports.askDocuments = exports.formatCSV = exports.formatJSON = exports.formatTable = exports.queryComposed = exports.composeIndexes = exports.updateIndex = exports.checkStaleness = exports.buildIndexEntry = exports.buildShallowIndex = exports.detectHistoryBoundary = exports.parseHistorySection = exports.updateHistory = exports.flattenBlocks = exports.getMetaProperty = exports.upsertMetaProperty = exports.incrementVersion = exports.computeTrustDiff = exports.matchBlocksToRegistry = exports.blockFingerprint = exports.generateBlockId = exports.isSignedBy = void 0;
|
|
5
5
|
var aliases_1 = require("./aliases");
|
|
6
6
|
Object.defineProperty(exports, "ALIASES", { enumerable: true, get: function () { return aliases_1.ALIASES; } });
|
|
7
7
|
var language_registry_1 = require("./language-registry");
|
|
@@ -66,12 +66,20 @@ var trust_1 = require("./trust");
|
|
|
66
66
|
Object.defineProperty(exports, "computeDocumentHash", { enumerable: true, get: function () { return trust_1.computeDocumentHash; } });
|
|
67
67
|
Object.defineProperty(exports, "findHistoryBoundaryInSource", { enumerable: true, get: function () { return trust_1.findHistoryBoundaryInSource; } });
|
|
68
68
|
Object.defineProperty(exports, "sealDocument", { enumerable: true, get: function () { return trust_1.sealDocument; } });
|
|
69
|
+
Object.defineProperty(exports, "signDocument", { enumerable: true, get: function () { return trust_1.signDocument; } });
|
|
69
70
|
Object.defineProperty(exports, "verifyDocument", { enumerable: true, get: function () { return trust_1.verifyDocument; } });
|
|
71
|
+
Object.defineProperty(exports, "unsealDocument", { enumerable: true, get: function () { return trust_1.unsealDocument; } });
|
|
72
|
+
Object.defineProperty(exports, "isSealed", { enumerable: true, get: function () { return trust_1.isSealed; } });
|
|
73
|
+
Object.defineProperty(exports, "isSignedBy", { enumerable: true, get: function () { return trust_1.isSignedBy; } });
|
|
70
74
|
Object.defineProperty(exports, "generateBlockId", { enumerable: true, get: function () { return trust_1.generateBlockId; } });
|
|
71
75
|
Object.defineProperty(exports, "blockFingerprint", { enumerable: true, get: function () { return trust_1.blockFingerprint; } });
|
|
72
76
|
Object.defineProperty(exports, "matchBlocksToRegistry", { enumerable: true, get: function () { return trust_1.matchBlocksToRegistry; } });
|
|
73
77
|
Object.defineProperty(exports, "computeTrustDiff", { enumerable: true, get: function () { return trust_1.computeTrustDiff; } });
|
|
74
78
|
Object.defineProperty(exports, "incrementVersion", { enumerable: true, get: function () { return trust_1.incrementVersion; } });
|
|
79
|
+
var utils_1 = require("./utils");
|
|
80
|
+
Object.defineProperty(exports, "upsertMetaProperty", { enumerable: true, get: function () { return utils_1.upsertMetaProperty; } });
|
|
81
|
+
Object.defineProperty(exports, "getMetaProperty", { enumerable: true, get: function () { return utils_1.getMetaProperty; } });
|
|
82
|
+
Object.defineProperty(exports, "flattenBlocks", { enumerable: true, get: function () { return utils_1.flattenBlocks; } });
|
|
75
83
|
var history_1 = require("./history");
|
|
76
84
|
Object.defineProperty(exports, "updateHistory", { enumerable: true, get: function () { return history_1.updateHistory; } });
|
|
77
85
|
Object.defineProperty(exports, "parseHistorySection", { enumerable: true, get: function () { return history_1.parseHistorySection; } });
|
package/dist/parser.js
CHANGED
|
@@ -873,6 +873,23 @@ function parseLine(line, ctx) {
|
|
|
873
873
|
inline,
|
|
874
874
|
};
|
|
875
875
|
}
|
|
876
|
+
const PIPE_PROP_CONTINUATION = /^\s*\|\s*[\p{L}][\p{L}\d_-]*\s*:\s*[^|]*$/u;
|
|
877
|
+
function mergePipeContinuations(lines) {
|
|
878
|
+
const out = [];
|
|
879
|
+
for (const line of lines) {
|
|
880
|
+
const prev = out.length > 0 ? out[out.length - 1] : "";
|
|
881
|
+
const prevIsTableRow = prev.trimStart().startsWith("|");
|
|
882
|
+
if (out.length > 0 &&
|
|
883
|
+
!prevIsTableRow &&
|
|
884
|
+
PIPE_PROP_CONTINUATION.test(line)) {
|
|
885
|
+
out[out.length - 1] = prev.trimEnd() + " " + line.trimStart();
|
|
886
|
+
}
|
|
887
|
+
else {
|
|
888
|
+
out.push(line);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
return out;
|
|
892
|
+
}
|
|
876
893
|
function parseIntentText(fileContent, options) {
|
|
877
894
|
if (typeof fileContent !== "string") {
|
|
878
895
|
return { version: "1.4", blocks: [], metadata: {}, diagnostics: [] };
|
|
@@ -897,7 +914,7 @@ function parseIntentText(fileContent, options) {
|
|
|
897
914
|
};
|
|
898
915
|
}
|
|
899
916
|
_resetIdCounter();
|
|
900
|
-
const lines = fileContent.split(/\r?\n/);
|
|
917
|
+
const lines = mergePipeContinuations(fileContent.split(/\r?\n/));
|
|
901
918
|
if (lines.length > MAX_LINE_COUNT) {
|
|
902
919
|
return {
|
|
903
920
|
version: "1.4",
|
package/dist/sha256.d.ts
ADDED
package/dist/sha256.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sha256Hex = sha256Hex;
|
|
4
|
+
exports.randomHex = randomHex;
|
|
5
|
+
const K = new Uint32Array([
|
|
6
|
+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
|
|
7
|
+
0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
|
8
|
+
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
|
|
9
|
+
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
10
|
+
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
|
|
11
|
+
0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
|
12
|
+
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
|
|
13
|
+
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
14
|
+
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
|
|
15
|
+
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
|
16
|
+
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
|
|
17
|
+
]);
|
|
18
|
+
function utf8Bytes(str) {
|
|
19
|
+
if (typeof TextEncoder !== "undefined") {
|
|
20
|
+
return new TextEncoder().encode(str);
|
|
21
|
+
}
|
|
22
|
+
const out = [];
|
|
23
|
+
for (let i = 0; i < str.length; i++) {
|
|
24
|
+
let c = str.charCodeAt(i);
|
|
25
|
+
if (c < 0x80)
|
|
26
|
+
out.push(c);
|
|
27
|
+
else if (c < 0x800) {
|
|
28
|
+
out.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f));
|
|
29
|
+
}
|
|
30
|
+
else if (c >= 0xd800 && c <= 0xdbff) {
|
|
31
|
+
const c2 = str.charCodeAt(++i);
|
|
32
|
+
c = 0x10000 + ((c & 0x3ff) << 10) + (c2 & 0x3ff);
|
|
33
|
+
out.push(0xf0 | (c >> 18), 0x80 | ((c >> 12) & 0x3f), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
out.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return new Uint8Array(out);
|
|
40
|
+
}
|
|
41
|
+
function sha256Hex(input) {
|
|
42
|
+
const msg = utf8Bytes(input);
|
|
43
|
+
const len = msg.length;
|
|
44
|
+
const withOne = len + 1;
|
|
45
|
+
const k = (56 - (withOne % 64) + 64) % 64;
|
|
46
|
+
const total = withOne + k + 8;
|
|
47
|
+
const buf = new Uint8Array(total);
|
|
48
|
+
buf.set(msg);
|
|
49
|
+
buf[len] = 0x80;
|
|
50
|
+
const bitLenLo = (len * 8) >>> 0;
|
|
51
|
+
const bitLenHi = Math.floor((len * 8) / 0x100000000) >>> 0;
|
|
52
|
+
const dv = new DataView(buf.buffer);
|
|
53
|
+
dv.setUint32(total - 8, bitLenHi);
|
|
54
|
+
dv.setUint32(total - 4, bitLenLo);
|
|
55
|
+
let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
|
|
56
|
+
const w = new Uint32Array(64);
|
|
57
|
+
for (let off = 0; off < total; off += 64) {
|
|
58
|
+
for (let i = 0; i < 16; i++)
|
|
59
|
+
w[i] = dv.getUint32(off + i * 4);
|
|
60
|
+
for (let i = 16; i < 64; i++) {
|
|
61
|
+
const a = w[i - 15];
|
|
62
|
+
const b = w[i - 2];
|
|
63
|
+
const s0 = ((a >>> 7) | (a << 25)) ^ ((a >>> 18) | (a << 14)) ^ (a >>> 3);
|
|
64
|
+
const s1 = ((b >>> 17) | (b << 15)) ^ ((b >>> 19) | (b << 13)) ^ (b >>> 10);
|
|
65
|
+
w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;
|
|
66
|
+
}
|
|
67
|
+
let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7;
|
|
68
|
+
for (let i = 0; i < 64; i++) {
|
|
69
|
+
const S1 = ((e >>> 6) | (e << 26)) ^
|
|
70
|
+
((e >>> 11) | (e << 21)) ^
|
|
71
|
+
((e >>> 25) | (e << 7));
|
|
72
|
+
const ch = (e & f) ^ (~e & g);
|
|
73
|
+
const t1 = (h + S1 + ch + K[i] + w[i]) >>> 0;
|
|
74
|
+
const S0 = ((a >>> 2) | (a << 30)) ^
|
|
75
|
+
((a >>> 13) | (a << 19)) ^
|
|
76
|
+
((a >>> 22) | (a << 10));
|
|
77
|
+
const maj = (a & b) ^ (a & c) ^ (b & c);
|
|
78
|
+
const t2 = (S0 + maj) >>> 0;
|
|
79
|
+
h = g;
|
|
80
|
+
g = f;
|
|
81
|
+
f = e;
|
|
82
|
+
e = (d + t1) >>> 0;
|
|
83
|
+
d = c;
|
|
84
|
+
c = b;
|
|
85
|
+
b = a;
|
|
86
|
+
a = (t1 + t2) >>> 0;
|
|
87
|
+
}
|
|
88
|
+
h0 = (h0 + a) >>> 0;
|
|
89
|
+
h1 = (h1 + b) >>> 0;
|
|
90
|
+
h2 = (h2 + c) >>> 0;
|
|
91
|
+
h3 = (h3 + d) >>> 0;
|
|
92
|
+
h4 = (h4 + e) >>> 0;
|
|
93
|
+
h5 = (h5 + f) >>> 0;
|
|
94
|
+
h6 = (h6 + g) >>> 0;
|
|
95
|
+
h7 = (h7 + h) >>> 0;
|
|
96
|
+
}
|
|
97
|
+
const toHex = (n) => (n >>> 0).toString(16).padStart(8, "0");
|
|
98
|
+
return (toHex(h0) +
|
|
99
|
+
toHex(h1) +
|
|
100
|
+
toHex(h2) +
|
|
101
|
+
toHex(h3) +
|
|
102
|
+
toHex(h4) +
|
|
103
|
+
toHex(h5) +
|
|
104
|
+
toHex(h6) +
|
|
105
|
+
toHex(h7));
|
|
106
|
+
}
|
|
107
|
+
function randomHex(bytes) {
|
|
108
|
+
const arr = new Uint8Array(bytes);
|
|
109
|
+
const g = typeof globalThis !== "undefined" ? globalThis : {};
|
|
110
|
+
if (g.crypto && typeof g.crypto.getRandomValues === "function") {
|
|
111
|
+
g.crypto.getRandomValues(arr);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
for (let i = 0; i < bytes; i++)
|
|
115
|
+
arr[i] = (randomFallbackCounter++ * 167) & 0xff;
|
|
116
|
+
}
|
|
117
|
+
let out = "";
|
|
118
|
+
for (let i = 0; i < bytes; i++)
|
|
119
|
+
out += arr[i].toString(16).padStart(2, "0");
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
let randomFallbackCounter = 1;
|
package/dist/trust.d.ts
CHANGED
|
@@ -46,6 +46,19 @@ export interface SealResult {
|
|
|
46
46
|
at: string;
|
|
47
47
|
error?: string;
|
|
48
48
|
}
|
|
49
|
+
export declare function isSealed(source: string): boolean;
|
|
50
|
+
export declare function isSignedBy(source: string, signer: string): boolean;
|
|
51
|
+
export declare function unsealDocument(source: string): string;
|
|
52
|
+
export interface SignResult {
|
|
53
|
+
success: boolean;
|
|
54
|
+
source: string;
|
|
55
|
+
at: string;
|
|
56
|
+
note?: string;
|
|
57
|
+
}
|
|
58
|
+
export declare function signDocument(source: string, options: {
|
|
59
|
+
signer: string;
|
|
60
|
+
role?: string;
|
|
61
|
+
}): SignResult;
|
|
49
62
|
export declare function sealDocument(source: string, options: SealOptions): SealResult;
|
|
50
63
|
export interface VerifyResult {
|
|
51
64
|
intact: boolean;
|
package/dist/trust.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.computeDocumentHash = computeDocumentHash;
|
|
7
4
|
exports.findHistoryBoundaryInSource = findHistoryBoundaryInSource;
|
|
@@ -11,9 +8,13 @@ exports.blockFingerprint = blockFingerprint;
|
|
|
11
8
|
exports.matchBlocksToRegistry = matchBlocksToRegistry;
|
|
12
9
|
exports.computeTrustDiff = computeTrustDiff;
|
|
13
10
|
exports.incrementVersion = incrementVersion;
|
|
11
|
+
exports.isSealed = isSealed;
|
|
12
|
+
exports.isSignedBy = isSignedBy;
|
|
13
|
+
exports.unsealDocument = unsealDocument;
|
|
14
|
+
exports.signDocument = signDocument;
|
|
14
15
|
exports.sealDocument = sealDocument;
|
|
15
16
|
exports.verifyDocument = verifyDocument;
|
|
16
|
-
const
|
|
17
|
+
const sha256_1 = require("./sha256");
|
|
17
18
|
const parser_1 = require("./parser");
|
|
18
19
|
function computeDocumentHash(source) {
|
|
19
20
|
const boundary = findHistoryBoundaryInSource(source);
|
|
@@ -24,7 +25,7 @@ function computeDocumentHash(source) {
|
|
|
24
25
|
!line.startsWith("freeze:") &&
|
|
25
26
|
!line.startsWith("amendment:"));
|
|
26
27
|
const body = bodyLines.join("\n").trim();
|
|
27
|
-
return "sha256:" +
|
|
28
|
+
return "sha256:" + (0, sha256_1.sha256Hex)(body);
|
|
28
29
|
}
|
|
29
30
|
function findHistoryBoundaryInSource(source) {
|
|
30
31
|
const lines = source.split("\n");
|
|
@@ -60,7 +61,7 @@ function detectHistoryBoundary(lines) {
|
|
|
60
61
|
return -1;
|
|
61
62
|
}
|
|
62
63
|
function generateBlockId() {
|
|
63
|
-
return
|
|
64
|
+
return (0, sha256_1.randomHex)(3).slice(0, 5);
|
|
64
65
|
}
|
|
65
66
|
function blockFingerprint(content) {
|
|
66
67
|
return content.toLowerCase().trim().replace(/\s+/g, " ");
|
|
@@ -153,7 +154,46 @@ function incrementVersion(current, changeType) {
|
|
|
153
154
|
return `${parts[0]}.${(parts[1] || 0) + 1}`;
|
|
154
155
|
}
|
|
155
156
|
}
|
|
157
|
+
function isSealed(source) {
|
|
158
|
+
return source.split("\n").some((l) => l.trimStart().startsWith("freeze:"));
|
|
159
|
+
}
|
|
160
|
+
function isSignedBy(source, signer) {
|
|
161
|
+
const needle = `sign: ${signer}`;
|
|
162
|
+
return source
|
|
163
|
+
.split("\n")
|
|
164
|
+
.some((l) => l.trimStart().startsWith(needle));
|
|
165
|
+
}
|
|
166
|
+
function unsealDocument(source) {
|
|
167
|
+
const kept = source
|
|
168
|
+
.split("\n")
|
|
169
|
+
.filter((l) => !l.trimStart().startsWith("freeze:"));
|
|
170
|
+
return kept.join("\n").replace(/\n{3,}/g, "\n\n");
|
|
171
|
+
}
|
|
172
|
+
function signDocument(source, options) {
|
|
173
|
+
const at = new Date().toISOString();
|
|
174
|
+
if (isSignedBy(source, options.signer)) {
|
|
175
|
+
return { success: true, source, at, note: "already-signed" };
|
|
176
|
+
}
|
|
177
|
+
const hash = computeDocumentHash(source);
|
|
178
|
+
const signLine = `sign: ${options.signer}${options.role ? ` | role: ${options.role}` : ""} | at: ${at} | hash: ${hash}`;
|
|
179
|
+
const lines = source.replace(/\n+$/, "").split("\n");
|
|
180
|
+
const freezeIdx = lines.findIndex((l) => l.trimStart().startsWith("freeze:"));
|
|
181
|
+
const histIdx = lines.findIndex((l) => l.trim() === "history:" || l.trim() === "history");
|
|
182
|
+
const insertAt = freezeIdx !== -1 ? freezeIdx : histIdx !== -1 ? histIdx : lines.length;
|
|
183
|
+
lines.splice(insertAt, 0, signLine);
|
|
184
|
+
return { success: true, source: lines.join("\n") + "\n", at };
|
|
185
|
+
}
|
|
156
186
|
function sealDocument(source, options) {
|
|
187
|
+
if (isSealed(source)) {
|
|
188
|
+
const v = verifyDocument(source);
|
|
189
|
+
return {
|
|
190
|
+
success: true,
|
|
191
|
+
hash: v.expectedHash ?? computeDocumentHash(source),
|
|
192
|
+
source,
|
|
193
|
+
at: v.frozenAt ?? new Date().toISOString(),
|
|
194
|
+
error: "already-sealed",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
157
197
|
const hash = computeDocumentHash(source);
|
|
158
198
|
const at = new Date().toISOString();
|
|
159
199
|
const boundaryPos = findHistoryBoundaryInSource(source);
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { IntentBlock } from "./types";
|
|
2
2
|
export declare function flattenBlocks(blocks: IntentBlock[]): IntentBlock[];
|
|
3
|
+
export declare function upsertMetaProperty(source: string, key: string, value: string | null | undefined): string;
|
|
4
|
+
export declare function getMetaProperty(source: string, key: string): string | undefined;
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.flattenBlocks = flattenBlocks;
|
|
4
|
+
exports.upsertMetaProperty = upsertMetaProperty;
|
|
5
|
+
exports.getMetaProperty = getMetaProperty;
|
|
4
6
|
function flattenBlocks(blocks) {
|
|
5
7
|
const result = [];
|
|
6
8
|
for (const block of blocks) {
|
|
@@ -11,3 +13,40 @@ function flattenBlocks(blocks) {
|
|
|
11
13
|
}
|
|
12
14
|
return result;
|
|
13
15
|
}
|
|
16
|
+
function upsertMetaProperty(source, key, value) {
|
|
17
|
+
const stripKey = (line) => {
|
|
18
|
+
const re = new RegExp(`\\s*\\|\\s*${key}\\s*:[^|]*`, "gi");
|
|
19
|
+
return line.replace(re, "").trimEnd();
|
|
20
|
+
};
|
|
21
|
+
const lines = source.split("\n");
|
|
22
|
+
const metaIdx = lines.findIndex((l) => /^\s*meta:/i.test(l));
|
|
23
|
+
if (metaIdx !== -1) {
|
|
24
|
+
let cleaned = stripKey(lines[metaIdx]);
|
|
25
|
+
if (value != null && value !== "") {
|
|
26
|
+
cleaned = `${cleaned} | ${key}: ${value}`;
|
|
27
|
+
}
|
|
28
|
+
if (/^\s*meta:\s*$/i.test(cleaned)) {
|
|
29
|
+
lines.splice(metaIdx, 1);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
lines[metaIdx] = cleaned;
|
|
33
|
+
}
|
|
34
|
+
return lines.join("\n");
|
|
35
|
+
}
|
|
36
|
+
if (value == null || value === "")
|
|
37
|
+
return source;
|
|
38
|
+
const newMeta = `meta: | ${key}: ${value}`;
|
|
39
|
+
const anchorIdx = lines.findIndex((l) => /^\s*(title:|summary:)/i.test(l));
|
|
40
|
+
if (anchorIdx !== -1) {
|
|
41
|
+
lines.splice(anchorIdx + 1, 0, newMeta);
|
|
42
|
+
return lines.join("\n");
|
|
43
|
+
}
|
|
44
|
+
return `${newMeta}\n${source}`;
|
|
45
|
+
}
|
|
46
|
+
function getMetaProperty(source, key) {
|
|
47
|
+
const metaLine = source.split("\n").find((l) => /^\s*meta:/i.test(l));
|
|
48
|
+
if (!metaLine)
|
|
49
|
+
return undefined;
|
|
50
|
+
const m = new RegExp(`\\|\\s*${key}\\s*:\\s*([^|]*)`, "i").exec(metaLine);
|
|
51
|
+
return m ? m[1].trim() : undefined;
|
|
52
|
+
}
|