boxglow 0.1.0 → 0.4.1
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/README.md +92 -19
- package/bin/boxglow.js +2755 -651
- package/dist/assets/index-EcrwIrQZ.js +3464 -0
- package/dist/assets/index-k-wuVeOF.css +1 -0
- package/dist/index.html +5 -5
- package/docs/AGENTS_SNIPPET.md +41 -16
- package/examples/logic-daw/boxglow.json +58 -58
- package/examples/notes-app/boxglow.json +1681 -0
- package/package.json +4 -2
- package/dist/assets/index-BgLclRaq.css +0 -1
- package/dist/assets/index-BxV1l9_P.js +0 -3404
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#555;--xy-background-pattern-lines-color-default:#333;--xy-background-pattern-cross-color-default:#333;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--font-weight-bold:700;--radius-lg:.5rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}button,input,select,textarea{font:inherit;color:inherit}}@layer components{.card{background:var(--bg-card);border:2px solid var(--line);border-radius:12px}.btn{border:2px solid var(--line);background:var(--bg-card);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:10px;align-items:center;gap:6px;padding:6px 12px;line-height:1.2;transition:transform 80ms,box-shadow 80ms;display:inline-flex}.btn:hover{box-shadow:2px 2px 0 var(--line);transform:translate(-1px,-1px)}.btn:active{box-shadow:none;transform:none}.btn:disabled{opacity:.4;cursor:default;box-shadow:none;transform:none}.btn.btn-primary{background:var(--primary);color:var(--on-primary);border-color:var(--primary-strong)}.btn.btn-accent{background:var(--accent);color:var(--on-accent);border-color:var(--line)}.btn.btn-ghost{background:0 0;border-color:#0000}.btn.btn-ghost:hover{background:var(--primary-soft);box-shadow:none;transform:none}.btn.btn-sm{border-radius:8px;padding:3px 8px;font-size:12px}.btn.btn-danger{color:var(--danger)}.input{border:2px solid var(--line-soft);background:var(--bg-card);border-radius:8px;outline:none;width:100%;padding:6px 10px}.input:focus{border-color:var(--primary)}textarea.input{resize:vertical;min-height:64px}.label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:12px}.chip{border:2px solid var(--line-soft);background:var(--bg-card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:2px 8px;font-size:12px;display:inline-flex}.chip[data-on=true]{border-color:var(--primary);background:var(--primary-soft)}.avatar{border:2px solid var(--bg-card);color:#fbfbfb;text-shadow:0 0 2px #00000080;border-radius:999px;justify-content:center;align-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:inline-flex}}@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-2{top:calc(var(--spacing) * 2)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.left-0{left:0}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-30{z-index:30}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.min-h-0{min-height:0}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1}.flex-none{flex:none}.basis-full{flex-basis:100%}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-5{padding:calc(var(--spacing) * 5)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-1{padding-block:var(--spacing)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-left{text-align:left}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[26px\]{font-size:26px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.whitespace-pre-wrap{white-space:pre-wrap}.italic{font-style:italic}.underline{text-decoration-line:underline}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}:root{--bg-paper:#eceef0;--bg-card:#fbfbfb;--bg-grid:#0d80800f;--ink:#3a3f46;--ink-strong:#2f343a;--text:#2f343a;--text-muted:#6b7075;--line:#3a3f46;--line-soft:#c9ced4;--primary:#0d8080;--wire:#a86f00;--wire-halo:#a86f00;--wire-ready:#1f8a3a;--primary-strong:#006a6a;--primary-soft:#e3f1f0;--primary-soft-2:#cde6e4;--on-primary:#fbfbfb;--accent:#e8875e;--on-accent:#2f343a;--danger:#b3453a;--box-black-bg:#3a3f46;--box-black-text:#e8eaed;--box-black-border:#6b7075;--status-new:#c8ccd2;--box-gray-bg:#e4e7ea;--box-gray-bg-open:#eef0f2;--box-gray-hatch:#3a3f4629;--box-gray-text:#2f343a;--box-white-bg:#fbfbfb;--box-white-text:#2f343a;--box-white-glow:#0d808059;--nest-odd:#f6f7f9;--nest-even:#e9ecef;--shadow-card:4px 4px 0 var(--line);--font-head:"M PLUS Rounded 1c", "Hiragino Maru Gothic ProN", sans-serif;--font-body:"Hiragino Sans", "Noto Sans JP", "Yu Gothic UI", Meiryo, system-ui, sans-serif}:root[data-theme=dark]{--bg-paper:#1a1d21;--bg-card:#23272c;--bg-grid:#3fb5b512;--ink:#4a5058;--ink-strong:#e8eaed;--text:#e8eaed;--text-muted:#a3a9b1;--line:#4a5058;--line-soft:#3a4047;--primary:#3fb5b5;--wire:#e0b24a;--wire-halo:#e0b24a;--wire-ready:#52c26b;--primary-strong:#74d3d3;--primary-soft:#1f3536;--primary-soft-2:#24494a;--on-primary:#15181b;--accent:#e8875e;--on-accent:#15181b;--danger:#e07a6e;--box-black-bg:#0f1114;--box-black-text:#c8ccd2;--box-black-border:#5b626b;--status-new:#9aa1a9;--box-gray-bg:#2c3136;--box-gray-bg-open:#23272b;--box-gray-hatch:#e8eaed1f;--box-gray-text:#e8eaed;--box-white-bg:#e8eaed;--box-white-text:#1a1d21;--box-white-glow:#e8eaed73;--nest-odd:#1c2024;--nest-even:#262b30;--shadow-card:4px 4px 0 #0f1114}html,body,#root{height:100%;margin:0}body{background:var(--bg-paper);color:var(--text);font-family:var(--font-body);letter-spacing:.02em;font-size:14px;line-height:1.6;overflow:hidden}h1,h2,h3,.font-head{font-family:var(--font-head);letter-spacing:.01em;font-weight:800}.bg-block{border:2px solid var(--line);background:var(--box-white-bg);color:var(--box-white-text);box-sizing:border-box;border-radius:12px;transition:background-color .4s,color .4s,border-color .4s,box-shadow .4s;position:relative}.bg-block.selected{box-shadow:0 0 0 3px var(--primary)}.bg-block.dimmed{opacity:.3}.bg-block.status-black{background:var(--box-black-bg);color:var(--box-black-text);border-style:dashed;border-color:var(--box-black-border)}.bg-block.status-gray{background-color:var(--box-gray-bg);background-image:repeating-linear-gradient(135deg, transparent 0 8px, var(--box-gray-hatch) 8px 10px);color:var(--box-gray-text)}.bg-block.status-black .bg-block__port.ready{color:#8fe0e0}.bg-block.expanded{color:var(--text);border-style:solid;border-color:var(--line);background-image:none}.bg-block.expanded.status-white,.bg-block.expanded.status-black,.bg-block.expanded.status-gray{color:var(--text)}.bg-block.expanded.depth-1{background-color:var(--nest-odd);border-width:4px}.bg-block.expanded.depth-2{background-color:var(--nest-even);border-width:3px}.bg-block.expanded.depth-3{background-color:var(--nest-odd);border-width:2px}.bg-block.expanded.depth-4{background-color:var(--nest-even);border-width:2px}.bg-block.expanded>.bg-block__head,.bg-block.expanded>.bg-block__meta{background:#3a3f460f}:root[data-theme=dark] .bg-block.expanded>.bg-block__head,:root[data-theme=dark] .bg-block.expanded>.bg-block__meta{background:#e8eaed0f}.bg-block.expanded>.bg-block__meta{border-bottom:2px solid var(--line)}.bg-block.status-white{background:var(--box-white-bg);color:var(--box-white-text)}.bg-block.status-white.selected{box-shadow:0 0 0 3px var(--primary)}.bg-block.just-glowed{animation:1.2s ease-out glow}@keyframes glow{0%{box-shadow:0 0 0 0 var(--box-white-glow)}40%{box-shadow:0 0 0 10px transparent, 0 0 36px 10px var(--box-white-glow)}to{box-shadow:0 0 #0000}}.bg-block__head{box-sizing:border-box;align-items:center;gap:8px;height:36px;padding:6px 10px 0 12px;display:flex}.bg-block__meta{box-sizing:border-box;border-bottom:2px solid #0000;align-items:center;gap:6px;height:24px;padding:0 10px 0 12px;display:flex}.bg-block.expanded>.bg-block__meta{border-bottom-color:var(--line-soft)}.bg-block.status-black.expanded>.bg-block__meta{border-bottom-color:var(--box-black-border)}.bg-block__key{opacity:.55;letter-spacing:.04em;margin-left:auto;font-family:ui-monospace,monospace;font-size:10px}.bg-block__due{opacity:.8;border:1.5px solid;border-radius:999px;padding:1px 6px;font-size:10px}.bg-block__due.overdue{background:var(--danger);color:#fbfbfb;border-color:var(--danger);opacity:1}.bg-block__glyph{border:2px solid;border-radius:6px;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:13px;font-weight:800;line-height:1;display:inline-flex}.bg-block__title{min-width:0;font-family:var(--font-head);white-space:normal;word-break:auto-phrase;overflow-wrap:anywhere;flex:1;font-size:14px;font-weight:800;line-height:18px}.bg-block__badge{opacity:.8;border:1.5px solid;border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.bg-block__toggle{cursor:pointer;opacity:.8;background:0 0;border:1.5px solid;border-radius:6px;flex:none;width:22px;height:22px;font-size:12px;line-height:1}.bg-block__toggle:hover{opacity:1;background:#7f7f7f26}.bg-block__ports{grid-template-columns:auto auto;justify-content:space-between;gap:0 16px;padding:0 10px 0 12px;display:grid}.bg-block__port{opacity:.85;white-space:nowrap;height:26px;font-size:11px;line-height:26px}.bg-block__port.out{text-align:right}.bg-block__port.optional{opacity:.8}.bg-block__port .opt{opacity:.7;margin-left:3px;font-size:9px}.bg-block__port.promoted{opacity:.75;font-style:italic}.bg-block__port-outside{background:var(--bg-card);border:1.5px solid var(--line-soft);color:var(--text);white-space:nowrap;pointer-events:none;border-radius:6px;padding:3px 6px;font-size:11px;line-height:1;position:absolute;transform:translateY(-50%)}.bg-block__port-outside.left{right:calc(100% + 10px)}.bg-block__port-outside.right{left:calc(100% + 10px)}.bg-block.expanded .bg-block__port-outside{opacity:0;transition:opacity .15s}.bg-block.expanded.selected .bg-block__port-outside,.bg-block.expanded:hover .bg-block__port-outside{opacity:1}.bg-block__progress{background:var(--line-soft);border-radius:999px;height:8px;position:absolute;bottom:6px;left:16px;right:16px;overflow:hidden;box-shadow:inset 0 0 0 1px #0000001f}.bg-block__progress>span{background:var(--text);height:100%;transition:width .4s;display:block}.bg-block__avatars{flex:none;display:inline-flex}.bg-block__avatars .avatar{width:20px;height:20px;margin-left:-6px;font-size:10px}.bg-block__avatars .avatar:first-child{margin-left:0}.bg-block.kind-project{background:var(--bg-paper);border:3px solid var(--line);color:var(--text);box-shadow:var(--shadow-card);background-image:none;border-style:solid}.bg-block.kind-project>.bg-block__head{background:var(--bg-card);border-radius:9px 9px 0 0}.bg-block.kind-project>.bg-block__meta{background:var(--bg-card);border-bottom-color:var(--line)}.bg-block__tag{background:var(--primary);color:var(--on-primary);letter-spacing:.06em;border-radius:6px;flex:none;padding:2px 6px;font-size:10px;font-weight:800}.bg-block.has-cat:before{content:"";background:var(--cat);pointer-events:none;z-index:3;border-radius:9px 9px 0 0;height:5px;position:absolute;top:0;left:0;right:0}.bg-block.has-cat.status-black:before{border-radius:8px 8px 0 0}.bg-block__cat{background:var(--cat);color:#fbfbfb;letter-spacing:.04em;white-space:nowrap;border-radius:6px;flex:none;padding:3px 6px;font-size:10px;font-weight:800;line-height:1}.cat-chip{--cat:var(--line)}.cat-chip[data-on=true]{background:var(--cat);color:#fbfbfb;border-color:var(--cat)}.cat-chip__dot{background:var(--cat);border-radius:3px;flex:none;width:10px;height:10px}.bg-block__cat.neutral,.cat-chip.neutral[data-on=true]{color:inherit;background:0 0;border:1.5px solid}.bg-block__cat.neutral{padding:1.5px 5px}.cat-chip.neutral .cat-chip__dot{border:1.5px solid var(--cat);background:0 0}.cat-chip[data-on=true] .cat-chip__dot{background:#fbfbfb}.status-icon{flex:none}.status-icon.new circle{stroke:var(--status-new)}.status-icon.progress circle{stroke:var(--primary)}.status-icon.progress path,.status-icon.done circle{fill:var(--primary)}.dec-head{border:2px solid var(--line-soft);background:var(--bg-paper);cursor:pointer;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.dec-head:hover{border-color:var(--primary)}.dec-key{background:var(--primary);color:var(--on-primary);border-radius:6px;flex:none;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:800}.canvas-tabs{border-top:2px solid var(--line);background:var(--bg-card);flex:none;align-items:stretch;gap:8px;padding:0 12px 6px;display:flex;position:relative}.tab-nav{flex:none;align-items:center;gap:2px;padding-top:4px;display:flex}.tab-nav-btn{width:26px;height:26px;color:var(--text);cursor:pointer;background:0 0;border:2px solid #0000;border-radius:8px;font-size:11px;line-height:1}.tab-nav-btn:hover:not(:disabled),.tab-nav-btn[data-on=true]{background:var(--bg-paper);border-color:var(--line-soft)}.tab-nav-btn:disabled{opacity:.3;cursor:default}.tab-strip{scrollbar-width:none;flex:1;align-items:flex-start;gap:4px;min-width:0;display:flex;overflow-x:auto}.tab-strip::-webkit-scrollbar{display:none}.canvas-tab{border:2px solid var(--line-soft);background:var(--bg-paper);max-width:240px;color:var(--text-muted);white-space:nowrap;cursor:pointer;border-top:0;border-radius:0 0 10px 10px;flex:none;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:700;display:inline-flex}.canvas-tab .status-icon{width:14px;height:14px}.canvas-tab[data-on=true]{background:var(--bg-card);color:var(--text);border-color:var(--line);margin-top:-2px;padding-top:8px}.scope-path{z-index:10;border:2px solid var(--line);background:var(--bg-card);max-width:calc(100% - 16px);box-shadow:var(--shadow-card);border-radius:10px;align-items:center;gap:4px;padding:4px 6px;font-size:12px;display:flex;position:absolute;top:8px}.scope-crumb{color:var(--primary-strong);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:6px;max-width:220px;padding:2px 8px;font-weight:700;overflow:hidden}.scope-crumb:hover{background:var(--bg-paper)}.scope-crumb.current{color:var(--text);cursor:default}.scope-sep{color:var(--text-muted)}.tab-list{z-index:40;flex-direction:column;gap:2px;width:280px;max-height:60vh;padding:6px;display:flex;position:absolute;bottom:calc(100% + 6px);left:12px;overflow:auto}.tab-list-row{color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;width:100%;padding:6px 8px;font-size:12px;display:flex}.tab-list-row:hover{background:var(--bg-paper)}.tab-list-row[data-on=true]{background:var(--primary-soft);font-weight:700}.tab-list-icon{text-align:center;width:18px;color:var(--text-muted)}.tab-list-prog{color:var(--text-muted);margin-left:auto;font-size:11px}.canvas-tab:hover{color:var(--text)}.canvas-tab[data-marked=true]:before{content:"";background:var(--accent);border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.resize-handle{cursor:col-resize;z-index:25;width:10px;position:absolute;top:0;bottom:0}.resize-handle:after{content:"";background:0 0;width:2px;position:absolute;top:0;bottom:0;left:4px}.resize-handle:hover:after,.resize-handle[data-active=true]:after{background:var(--primary)}.resize-handle.left{left:-5px}.resize-handle.right{right:-5px}.canvas-wrap>.resize-handle{z-index:20}.panel.right{position:relative}.bg-block__tpl{opacity:.7;vertical-align:middle;border:1px solid;border-radius:4px;margin-left:6px;padding:0 4px;font-size:9px;display:inline-block}.meta-chip{opacity:.85;white-space:nowrap;border:1.5px solid;border-radius:999px;flex:none;padding:3px 7px;font-size:10px;line-height:1}.meta-chip.muted{opacity:.55;border-style:dashed}.meta-chip.status-white{background:var(--primary);color:var(--on-primary);border-color:var(--primary);opacity:1}.meta-chip.status-gray{border-color:var(--primary);color:var(--primary-strong);background:#0d808014}.meta-chip.status-black{border-style:dashed}.meta-chip.activity{background:var(--primary);color:var(--on-primary);border-color:var(--primary);opacity:1;font-weight:700}.meta-chip.activity.needs_decision{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.meta-chip.activity.blocked,.meta-chip.activity.waiting_review{background:var(--line-soft);color:var(--text);border-color:var(--line-soft)}.meta-chip.issue{color:var(--text);background:var(--bg-card);border-style:solid;text-decoration:none}.meta-chip.issue:hover{border-color:var(--primary);color:var(--primary-strong)}.meta-chip.ready{border-color:var(--primary);color:var(--primary-strong);opacity:1;font-weight:700}.meta-chip.overdue{background:var(--danger);color:#fbfbfb;border-color:var(--danger);opacity:1}.bg-block.mine{box-shadow:inset 5px 0 0 var(--primary)}.bg-block.mine.status-white{box-shadow:inset 5px 0 0 var(--primary), 0 0 18px 2px var(--box-white-glow)}.avatar.avatar-none{color:inherit;opacity:.55;text-shadow:none;background:0 0;border:2px dashed}.bg-block__port.ready{color:var(--primary-strong);opacity:1;font-weight:700}.bg-block__activity{background:var(--primary);color:var(--on-primary);border-radius:999px;flex:none;align-items:center;gap:4px;padding:2px 6px 2px 2px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.bg-block__activity.needs_decision{background:var(--accent);color:var(--on-accent)}.bg-block__activity.blocked,.bg-block__activity.waiting_review{background:var(--line-soft);color:var(--text)}.bg-block__actor{min-width:18px;height:18px;color:var(--ink-strong);background:#ffffffd9;border-radius:999px;justify-content:center;align-items:center;padding:0 3px;font-size:10px;font-weight:800;display:inline-flex}:root[data-theme=dark] .bg-block__actor{color:#e8eaed;background:#00000073}.bg-block.activity-working{animation:2.2s ease-in-out infinite pulse-working}@keyframes pulse-working{0%,to{box-shadow:0 0 #0d808000}50%{box-shadow:0 0 0 6px #0d808040}}.bg-block.activity-working.selected{animation:none}.bg-block.activity-needs_decision{border-color:var(--accent);border-style:solid}.react-flow__handle{border:2px solid var(--line);background:var(--bg-card);border-radius:999px;width:12px;height:12px}.react-flow__handle:before{content:"";border-radius:999px;position:absolute;inset:-9px}.react-flow__handle:hover{transform:translate(-50%,-50%)scale(1.35)}.react-flow__handle-right:hover{transform:translate(50%,-50%)scale(1.35)}.react-flow__handle.port-out{background:var(--primary);border-color:var(--primary-strong)}.react-flow__handle.port-inner{opacity:0;width:12px;height:12px}.react-flow__handle.port-promoted{border-style:dashed}.react-flow__handle-left{left:-7px}.react-flow__handle-right{right:-7px}.bg-terminal{border:3px solid var(--line);background:var(--primary-soft);width:200px;color:var(--text);box-shadow:var(--shadow-card);box-sizing:border-box;border-radius:14px;position:relative}.bg-terminal.selected{box-shadow:0 0 0 3px var(--primary), var(--shadow-card)}.bg-terminal__head{height:44px;font-family:var(--font-head);border-bottom:2px solid var(--line-soft);justify-content:space-between;align-items:center;padding:0 12px;font-weight:800;display:flex}.bg-terminal__row{white-space:nowrap;text-overflow:ellipsis;height:26px;padding:0 14px;font-size:12px;line-height:26px;position:relative;overflow:hidden}.bg-terminal__row.promoted{opacity:.75;font-style:italic}.bg-terminal__empty{color:var(--text-muted);padding:8px 14px 10px;font-size:12px}.tl-row{border-top:1px solid var(--line-soft);grid-template-columns:76px 24px 1fr;align-items:start;gap:6px;padding:4px 0;font-size:12px;display:grid}.tl-row:first-child{border-top:0}.tl-time{color:var(--text-muted);white-space:nowrap}.tl-actor{background:var(--primary-soft-2);border-radius:999px;justify-content:center;align-items:center;width:22px;height:18px;font-size:10px;font-weight:800;display:inline-flex}.decision-card{border:2px solid var(--accent);background:var(--bg-card);border-radius:10px;padding:8px}.summary-chip{border:2px solid var(--line-soft);background:var(--bg-card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.summary-chip[data-on=true]{border-color:var(--primary);background:var(--primary-soft)}.summary-chip,.save-chip{white-space:nowrap;flex:none}.save-chip{border:2px solid var(--line-soft);color:var(--text-muted);border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.save-chip.unsaved{border-color:var(--accent);color:var(--text)}.save-chip__file{color:var(--text);text-overflow:ellipsis;max-width:160px;font-weight:700;overflow:hidden}@media (width<=900px){.summary-chip__txt,.save-chip__file{display:none}.search-box{width:120px}}.app-top header{min-width:0}.summary-chip .dot{background:var(--primary);border-radius:999px;width:8px;height:8px;animation:1.6s ease-in-out infinite pulse-dot}.summary-chip .dot.decision{background:var(--accent);animation:none}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}.react-flow{background:var(--bg-paper)}.react-flow__edge-path{stroke:var(--wire);stroke-width:2px;opacity:1;vector-effect:non-scaling-stroke;stroke-linecap:round}.react-flow__edge.edge-ready .react-flow__edge-path{stroke:var(--wire-ready);stroke-width:4px}.react-flow__edge-arrow{fill:var(--wire);stroke:none;pointer-events:none}.react-flow__edge.edge-ready .react-flow__edge-arrow{fill:var(--wire-ready)}.react-flow__edge.selected .react-flow__edge-arrow,.react-flow__edge.edge-net .react-flow__edge-arrow{fill:var(--accent)}.react-flow__edge.edge-dim .react-flow__edge-arrow{opacity:.45}.react-flow__edge-halo{fill:none;stroke:currentColor;stroke-opacity:.22;stroke-width:12px;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;color:var(--wire-halo)}.react-flow__edge.edge-ready .react-flow__edge-halo{color:var(--wire-ready)}.react-flow__edge.edge-hot .react-flow__edge-path{stroke-width:3px}.react-flow__edge.edge-hot.edge-ready .react-flow__edge-path,.react-flow__edge:hover .react-flow__edge-path{stroke-width:5px}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.edge-net .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path{stroke-width:6px;stroke-dasharray:14 10;animation:.8s linear infinite edge-flow;stroke:var(--accent)!important;opacity:1!important}.react-flow__edge.selected .react-flow__edge-halo,.react-flow__edge.edge-net .react-flow__edge-halo{color:var(--accent);stroke-opacity:.25;stroke-width:10px}.react-flow__edge.selected,.react-flow__edge.edge-net{z-index:1000!important}.react-flow__edge.edge-net .react-flow__edge-path{opacity:1!important}@keyframes edge-flow{to{stroke-dashoffset:-24px}}@media (prefers-reduced-motion:reduce){.react-flow__edge.selected .react-flow__edge-path{animation:none}}.react-flow__edge.edge-dim .react-flow__edge-path{opacity:.45}.react-flow__edge.edge-dim .react-flow__edge-halo{display:none}.react-flow__connection-path{stroke:var(--primary);stroke-width:2px}.react-flow__controls{box-shadow:none;border:2px solid var(--line);border-radius:10px;overflow:hidden}.react-flow__controls-button{background:var(--bg-card);border-bottom:1px solid var(--line-soft);fill:var(--text)}.react-flow__controls-button:hover{background:var(--primary-soft)}.react-flow__controls-button svg{fill:var(--text)}.react-flow__minimap{border:2px solid var(--line);background:var(--bg-card);border-radius:10px}.react-flow__attribution{color:var(--text-muted);background:0 0;font-size:10px}.react-flow__node.selected .bg-terminal,.react-flow__node:focus{outline:none}.app-grid{grid-template-rows:auto minmax(0,1fr) 36px;grid-template-columns:1fr var(--right-w,320px);height:100%;display:grid}.app-grid.no-right{grid-template-columns:1fr 0}.app-grid.embed{grid-template-rows:0 1fr 36px;grid-template-columns:1fr 0}.panel{background:var(--bg-card);border-right:2px solid var(--line);min-width:0;overflow:auto}.panel.right{border-right:0;border-left:2px solid var(--line)}.panel.hidden-panel{display:none}.app-grid>.app-top{z-index:30;grid-area:1/1/auto/-1;position:relative}.app-grid>.app-main{grid-area:2/1}.app-grid>.panel.right{grid-area:2/2}.app-grid>.app-footer{white-space:nowrap;grid-area:3/1/auto/-1;overflow:hidden}@media (width<=900px){.app-grid,.app-grid.no-right{grid-template-columns:1fr 0}.panel.right{width:min(var(--right-w,320px), 92vw);z-index:20;position:fixed;top:60px;bottom:36px;right:0;box-shadow:-8px 0 24px #00000040}}.drawer{z-index:15;width:280px;box-shadow:var(--shadow-card);padding:12px;position:absolute;top:8px;bottom:8px;left:8px;overflow:auto}@media (width<=900px){.drawer{max-width:90vw}}.app-main{flex-direction:column;display:flex}.canvas-wrap{flex:1;min-width:0;min-height:0;position:relative}.seg{border:2px solid var(--line-soft);border-radius:10px;grid-template-columns:1fr 1fr 1fr;gap:0;display:grid;overflow:hidden}.seg__btn{background:var(--bg-card);border:0;border-right:2px solid var(--line-soft);cursor:pointer;color:var(--text-muted);flex-direction:column;align-items:center;gap:2px;padding:6px 2px;font-size:11px;display:flex}.seg__btn:last-child{border-right:0}.seg__btn[data-on=true]{background:var(--primary-soft);color:var(--text)}.seg__btn:disabled{cursor:default}.seg__btn .tree-glyph{border-radius:6px;width:24px;height:24px;font-size:13px;line-height:20px}.avatar-btn{cursor:pointer;opacity:.35;border-color:#0000}.avatar-btn[data-on=true]{opacity:1;border-color:var(--line)}.avatar-btn:disabled{cursor:default}.sec{border-top:2px solid var(--line-soft);flex-direction:column;gap:8px;padding-top:12px;display:flex}.sec:first-of-type{border-top:0;padding-top:0}.sec>.sec__head{justify-content:space-between;align-items:center;min-height:22px;display:flex}.sec>.sec__head .label{color:var(--text);letter-spacing:.1em;font-weight:800}.search-box{background:var(--bg-paper);border-radius:999px;width:200px;padding:4px 10px}.search-box:focus{background:var(--bg-card)}.mode-toggle{border:2px solid var(--line);background:var(--bg-card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:3px 10px 3px 4px;font-size:12px;font-weight:800;display:inline-flex}.mode-toggle__knob{background:var(--line-soft);border-radius:999px;width:16px;height:16px;transition:background .15s}.mode-toggle[data-on=true]{background:var(--primary-soft);border-color:var(--primary);color:var(--primary-strong)}.mode-toggle[data-on=true] .mode-toggle__knob{background:var(--primary)}.bg-block.drop-target{box-shadow:0 0 0 4px var(--accent)}.input-plain{background:0 0;border-color:#0000;padding:4px 6px}.date-field{flex:1;align-items:center;gap:2px;min-width:0;display:inline-flex}.date-field input[type=date]{cursor:pointer;flex:1;min-width:0}.date-field input[type=date]::-webkit-calendar-picker-indicator{display:none}.date-field__btn{border:2px solid var(--line-soft);background:var(--bg-card);width:26px;height:26px;color:var(--text);cursor:pointer;border-radius:7px;flex:none;justify-content:center;align-items:center;display:inline-flex}.date-field__btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.date-field__btn:disabled{opacity:.4;cursor:default}.input-plain:hover:not(:disabled){border-color:var(--line-soft)}.input-plain:focus{border-color:var(--primary);background:var(--bg-card)}.port-card{border:2px solid var(--line-soft);background:var(--bg-paper);border-radius:10px;margin-top:8px;padding:4px 6px}.port-card .input-plain{background:0 0}.io-mark{background:var(--primary-soft-2);width:18px;height:18px;color:var(--primary-strong);border-radius:5px;justify-content:center;align-items:center;margin-right:6px;font-size:12px;font-weight:800;display:inline-flex}.io-mark.out{background:var(--primary);color:var(--on-primary)}.help-table td{vertical-align:top;padding:3px 6px;font-size:13px}.help-table td:first-child{color:var(--text-muted);white-space:nowrap}.btn-ghost[data-on=true]{background:var(--primary-soft)}.toast{background:var(--ink-strong);color:var(--bg-paper);border:2px solid var(--line);z-index:50;border-radius:10px;max-width:90vw;padding:8px 16px;position:fixed;bottom:52px;left:50%;transform:translate(-50%)}:root[data-theme=dark] .toast{background:var(--primary-soft-2);color:var(--text)}.tree-row{cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:3px 8px;display:flex;overflow:hidden}.tree-row:hover{background:var(--primary-soft)}.tree-row[data-selected=true]{background:var(--primary-soft-2)}.tree-glyph{border:2px solid var(--line);text-align:center;border-radius:4px;flex:none;width:16px;height:16px;font-size:10px;font-weight:800;line-height:12px}.tree-glyph.black{background:var(--box-black-bg);color:var(--box-black-text);border-style:dashed}.tree-glyph.gray{background:var(--box-gray-bg);background-image:repeating-linear-gradient(135deg, transparent 0 3px, var(--box-gray-hatch) 3px 4px)}.tree-glyph.white{background:var(--box-white-bg);color:var(--box-white-text)}.status-btn{border:2px solid var(--line-soft);background:var(--bg-card);cursor:pointer;border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;font-size:11px;display:flex}.status-btn[data-on=true]{border-color:var(--primary);background:var(--primary-soft)}.status-btn .tree-glyph{border-radius:7px;width:28px;height:28px;font-size:15px;line-height:24px}.progress-bar{background:var(--line-soft);border:1.5px solid var(--line);border-radius:999px;height:10px;overflow:hidden}.progress-bar>span{background:var(--primary);height:100%;transition:width .4s;display:block}.kbd{border:1px solid var(--line-soft);background:var(--bg-paper);border-bottom-width:2px;border-radius:4px;padding:1px 5px;font-size:11px}.modal-backdrop{z-index:40;background:#1a1d218c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{width:min(720px,100%);max-height:90vh;box-shadow:var(--shadow-card);overflow:auto}input[type=range],input[type=checkbox]{accent-color:var(--primary)}.react-flow__edge-path{pointer-events:none}.bg-block.selected,.bg-terminal.selected,.react-flow__node.selected .bg-terminal{box-shadow:0 0 0 4px var(--accent), 0 0 0 16px #e8875e47!important}.bg-block.mine.selected{box-shadow:inset 5px 0 0 var(--primary), 0 0 0 4px var(--accent), 0 0 0 16px #e8875e47!important}.bg-block.kind-project.selected{box-shadow:0 0 0 4px var(--accent), 0 0 0 16px #e8875e47, var(--shadow-card)!important}.bg-block.selected>.bg-block__head>.bg-block__title{color:var(--accent-strong,#b5581a)}:root[data-theme=dark] .bg-block.selected>.bg-block__head>.bg-block__title{color:var(--accent)}.home-dialog{flex-direction:column;gap:24px;width:min(640px,100vw - 32px);padding:24px;display:flex}.home-section{border:1px solid var(--line-soft);border-radius:8px;flex-direction:column;gap:8px;padding:16px;display:flex}.home-section--shared{border:2px solid var(--primary);background:var(--primary-soft)}.home-description{color:var(--text-muted);font-size:13px;line-height:1.6}.home-server{flex-direction:column;gap:8px;margin-top:8px;display:flex}.home-command{border:1px solid var(--line-soft);background:var(--bg-card);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;padding:8px;display:flex}.home-command code{overflow-wrap:anywhere;flex:1;font-size:13px}.home-create{gap:8px;margin-top:8px;display:flex}.home-create input{flex:1;min-width:0}.home-projects{max-height:200px;overflow:auto}.home-project-open{text-align:left;cursor:pointer;flex-direction:column;flex:1;align-items:flex-start;min-width:0;padding:8px;display:flex}.home-project-open .truncate{max-width:100%}.home-dialog button:focus-visible,.home-dialog a:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.save-notice{background:var(--bg-card);color:var(--text);border-bottom:2px solid var(--line);max-height:192px;padding:8px 16px;font-size:13px;overflow:auto}.save-notice pre{white-space:pre-wrap;overflow-wrap:anywhere}.app-top>header{height:60px;min-height:60px}.app-top>header.topbar{border-bottom:2px solid var(--line);background:var(--bg-card);flex-wrap:wrap;gap:8px 16px;height:auto;min-height:64px;padding:8px 16px;display:flex}.topbar-identity,.topbar-tools{align-items:center;gap:8px;min-width:0;display:flex}.topbar-tools{flex-wrap:wrap;flex:auto;justify-content:flex-end}.topbar-tools>button,.topbar-tools>.relative:not(.topbar-search){flex-shrink:0}.project-name{text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;flex:1;min-width:40px;max-width:240px;font-weight:700;overflow:hidden}.topbar-search{flex:1;min-width:96px;max-width:240px}.topbar-search .search-box{width:100%}.topbar .summary-chip{white-space:normal;flex-wrap:wrap;gap:4px 8px;min-height:32px}.topbar .summary-chip__txt{display:inline}.attention-section{border:1px solid var(--accent);background:var(--bg-paper);border-radius:8px;flex-direction:column;gap:16px;padding:16px 8px;display:flex}.attention-section .label{color:var(--text)}.inspector-attention{white-space:normal;text-align:left;border-color:var(--accent);justify-content:flex-start;line-height:1.5}.category-field{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:16px;margin-top:8px;display:grid}.panel.right .input{min-width:0}.panel.right{overflow-wrap:anywhere}.topbar button:focus-visible,.panel button:focus-visible{outline:2px solid var(--primary-strong);outline-offset:2px}@media (width<=1100px){.topbar-tools{flex-basis:100%}.topbar-search{max-width:none}}@media (width<=900px){.app-grid>.panel.right{width:min(var(--right-w,320px), 92vw);z-index:20;grid-area:2/1;justify-self:end;position:relative;top:auto;bottom:auto;right:auto}}@media (width<=600px){.app-top>header.topbar{padding:8px}.topbar-identity,.topbar-tools{gap:8px}.topbar .summary-chip{flex-basis:100%;order:2;justify-content:center}.topbar .save-chip{white-space:normal;max-width:144px;font-size:11px}.topbar .save-chip__file{display:none}.app-grid>.panel.right{border-left:0;width:100%}.panel.right>.resize-handle,.app-footer .progress-bar{display:none}.app-footer{gap:8px;padding-inline:8px}.scope-path{flex-wrap:wrap;max-width:calc(100% - 16px)}}.resume-section,.resume-card{flex-direction:column;gap:8px;display:flex}.resume-section{gap:16px;font-size:13px}.resume-card{border:1px solid var(--line-soft);background:var(--bg-paper);border-radius:8px;padding:8px}.conflict-dialog{border:2px solid var(--line);background:var(--bg-card);width:min(800px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--text);border-radius:16px;margin:auto;padding:0}.conflict-dialog[open]{flex-direction:column;display:flex}.conflict-dialog::backdrop{background:#0009}.conflict-dialog__head,.conflict-dialog__foot{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:16px;display:flex}.conflict-dialog__head h2,.conflict-dialog__foot>span{flex:1}.conflict-dialog__body{flex-direction:column;gap:16px;min-height:0;padding:0 16px;display:flex;overflow:auto}.conflict-item{border:1px solid var(--line-soft);border-radius:8px;min-width:0;padding:8px}.conflict-item legend{overflow-wrap:anywhere;font-size:13px;font-weight:700}.conflict-columns{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.conflict-choice{border:2px solid var(--line-soft);cursor:pointer;border-radius:8px;min-width:0;padding:8px}.conflict-choice[data-selected=true]{border-color:var(--primary);background:var(--primary-soft)}.conflict-choice pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:240px;margin-top:8px;font-size:12px;overflow:auto}.version-info{margin-left:auto;font-size:11px}.version-info summary{cursor:pointer}.version-info__content{z-index:40;white-space:normal;width:min(352px,100vw - 16px);max-height:60dvh;padding:16px;position:fixed;bottom:40px;right:8px;overflow:auto}.version-info dl{grid-template-columns:auto minmax(0,1fr);gap:8px 16px;margin-block:16px;display:grid}.version-info dd{overflow-wrap:anywhere}@media (width<=600px){.conflict-columns{grid-template-columns:1fr}.build-stamp{display:none}}.bg-block__title{font-size:15px}.bg-block__cat{font-size:11px}.bg-block__port{font-size:12px}.bg-block.status-white:not(.expanded) .bg-block__port.ready{color:#006a6a}.bg-block.status-white:not(.expanded) .status-icon.done circle{fill:#006a6a}.bg-block.status-white:not(.expanded).selected>.bg-block__head>.bg-block__title{color:#8c3e10}.react-flow__handle.connectingto.valid{outline:4px solid var(--wire-ready);outline-offset:3px}.react-flow__handle.connectionindicator{cursor:crosshair}.react-flow__handle.clickconnecting{outline:3px solid var(--accent);outline-offset:3px}.canvas-tools{border:1px solid var(--line-soft);background:var(--bg-card);max-width:calc(100% - 32px);color:var(--text);box-shadow:var(--shadow-card);border-radius:12px;padding:8px}.canvas-tools__legend{flex-wrap:wrap;gap:16px;padding:0 4px 8px;font-size:11px;display:flex}.canvas-tools__legend span{align-items:center;gap:6px;display:inline-flex}.canvas-tools__legend i{border-top:2px solid var(--wire);width:20px}.canvas-tools__legend i.ready{border-top:4px solid var(--wire-ready)}.canvas-tools__legend i.selected{border-top:4px dashed var(--accent)}.canvas-tools__buttons{flex-wrap:wrap;gap:4px;display:flex}.canvas-tools__buttons button{border:1px solid var(--line-soft);background:var(--bg-card);min-width:32px;min-height:32px;color:var(--text);cursor:pointer;border-radius:6px;padding:4px 8px;font-size:12px}.canvas-tools__buttons button:hover,.canvas-tools__buttons button[aria-pressed=true]{background:var(--primary-soft);border-color:var(--primary)}.canvas-tools__buttons button:disabled{opacity:.45;cursor:default}.canvas-tools button:focus-visible,.canvas-tools summary:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.canvas-tools__help{max-width:380px;padding:8px 4px 0;font-size:11px}.canvas-tools__help summary{cursor:pointer}.canvas-tools__help p{margin:8px 0 0;line-height:1.6}.canvas-connect-hint{border:1px solid var(--primary);background:var(--bg-card);max-width:calc(100% - 32px);color:var(--text);box-shadow:var(--shadow-card);border-radius:8px;align-items:center;gap:8px;padding:8px 16px;font-size:12px;display:flex}@media (width<=900px){.react-flow__minimap{width:144px;height:96px;top:48px;bottom:auto}.react-flow__minimap svg{width:100%;height:100%}}@media (prefers-reduced-motion:reduce){.react-flow__edge.edge-net .react-flow__edge-path{animation:none}}.btn{border-width:1px;border-radius:8px;transition:background .15s,border-color .15s}.btn:hover{box-shadow:none;border-color:var(--primary);transform:none}.card{border-width:1px;border-color:var(--line-soft)}.app-top>header.topbar{border-bottom:1px solid var(--line-soft);min-height:64px}.topbar-identity{flex:360px}.topbar-tools{flex:0 auto}.topbar-search{flex:0 200px}.menu-actions{flex-direction:column;gap:4px;display:none}.save-chip{background:var(--bg-paper);border:none}.scope-path{border:1px solid var(--line-soft);box-shadow:none}.react-flow__edge-junction{fill:var(--wire);pointer-events:none}.react-flow__edge.edge-ready .react-flow__edge-junction{fill:var(--wire-ready)}.react-flow__edge.edge-net .react-flow__edge-junction,.react-flow__edge.selected .react-flow__edge-junction{fill:var(--accent)}.canvas-tools{border-radius:10px;padding:4px}.canvas-tools__buttons{align-items:center}.canvas-tools__buttons>button{border-color:#0000}.canvas-tools__settings{position:static}.canvas-tools__settings>summary{cursor:pointer;border-left:1px solid var(--line-soft);padding:6px 8px;font-size:12px;list-style:none}.canvas-tools__settings>summary:after{content:" ↑";opacity:.65}.canvas-tools__settings[open]>summary{background:var(--primary-soft);border-radius:6px}.canvas-tools__popover{border:1px solid var(--line-soft);background:var(--bg-card);width:min(352px,100vw - 48px);box-shadow:var(--shadow-card);border-radius:12px;padding:16px;font-size:12px;position:absolute;bottom:calc(100% + 8px);left:0}.canvas-tools__popover p{color:var(--text-muted);margin-top:12px;line-height:1.7}.canvas-tools__legend{gap:8px 16px;padding:0 0 12px}.home-dialog{width:min(640px,100vw - 32px)}.home-welcome{padding:24px 0 16px}.home-welcome h2{letter-spacing:-.03em;font-size:clamp(22px,4vw,30px);line-height:1.4}.home-welcome p{max-width:460px;color:var(--text-muted);margin:12px 0 24px}.home-welcome>.btn{padding:12px 24px;font-weight:700}.home-disclosure{border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);padding:16px 0}.home-disclosure>summary{cursor:pointer;color:var(--primary-strong);font-weight:600}.home-disclosure .home-section{margin-top:16px}@media (width<=760px){.topbar .desktop-action{display:none}.menu-actions{display:flex}}@media (prefers-reduced-motion:reduce){.btn,.bg-block{transition:none}}.modal-backdrop:has(.home-dialog){background:radial-gradient(ellipse at top, var(--primary-soft), var(--bg-paper) 70%)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
|
package/dist/index.html
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Boxglow</title>
|
|
7
|
-
<meta name="description" content="Boxglow: AI
|
|
7
|
+
<meta name="description" content="Boxglow: AI エージェントとチームの作業を、ボックスと線で一目で。計画を入出力付きのブロック図にして進捗を共有する、ブラウザで動くツール。" />
|
|
8
8
|
<meta property="og:title" content="Boxglow" />
|
|
9
|
-
<meta property="og:description" content="AI
|
|
9
|
+
<meta property="og:description" content="AI エージェントとチームの作業を、ボックスと線で一目で。" />
|
|
10
10
|
<meta property="og:type" content="website" />
|
|
11
11
|
<meta property="og:site_name" content="すきま研究所日誌" />
|
|
12
12
|
<meta name="theme-color" content="#eceef0" />
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
} catch (e) {}
|
|
28
28
|
})();
|
|
29
29
|
</script>
|
|
30
|
-
<script type="module" crossorigin src="./assets/index-
|
|
31
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
30
|
+
<script type="module" crossorigin src="./assets/index-EcrwIrQZ.js"></script>
|
|
31
|
+
<link rel="stylesheet" crossorigin href="./assets/index-k-wuVeOF.css">
|
|
32
32
|
</head>
|
|
33
33
|
<body>
|
|
34
34
|
<div id="root"></div>
|
|
35
|
-
<noscript>Boxglow は JavaScript が有効なブラウザで動きます。</noscript>
|
|
35
|
+
<noscript>Boxglow needs JavaScript. / Boxglow は JavaScript が有効なブラウザで動きます。</noscript>
|
|
36
36
|
</body>
|
|
37
37
|
</html>
|
package/docs/AGENTS_SNIPPET.md
CHANGED
|
@@ -15,22 +15,26 @@ boxglow.json はリポジトリ直下に置く (`npx boxglow init --name "<プ
|
|
|
15
15
|
|
|
16
16
|
### 作業のたびに守ること
|
|
17
17
|
|
|
18
|
-
1. **最初に読む**: `npx boxglow status`
|
|
19
|
-
2. **着手を記録**:
|
|
20
|
-
|
|
18
|
+
1. **最初に読む**: `npx boxglow resume` (または `npx boxglow status --brief`) で、引き継ぎメモ・AI 未確認の回答・判断待ち・作業中・次の候補を読む。前のセッションの続きは、ここに出る引き継ぎメモから再開する。`npx boxglow show <block>` で担当するボックスの入出力を確認する
|
|
19
|
+
2. **着手を記録**: ボックスに取りかかるとき `npx boxglow start <block> --note "<何をするか>"`。同時に進めるボックスは 1〜2 個まで。
|
|
20
|
+
確認トークンの要求 (guard) が有効な計画では、先に `npx boxglow context <block>` を読み、出力の `contextToken` (確認トークン) を付ける:
|
|
21
|
+
`npx boxglow start <block> --note "<何をするか>" --context-token <確認トークン>` (下の「確認トークンと引き継ぎ」を参照)
|
|
22
|
+
3. **分解**: 1 つのボックスで出力を作る見通しが立たないときは、`npx boxglow split <block> --spec '<JSON>'` で中に小さなボックスを置く。各ボックスに出力 (成果物) を必ず決める。入力は不明なら省略してよい (自動で上の階層の入力になる)
|
|
21
23
|
4. **完了を記録**: 出力の成果物ができたら `npx boxglow done <block> --artifact "<名前>=<リポジトリ内のパス>"`。
|
|
22
|
-
|
|
24
|
+
guard が有効なら `--context-token <確認トークン>` を付ける (直前の自分の操作の出力に「新しい確認トークン: <token>」が出ていれば、それを使う)。
|
|
25
|
+
HEAD にコミット済みで内容が一致するファイルは「コミット + パス + 中身のハッシュ」で記録される (アップロードはしない)。未コミット・未追跡のファイルはローカル参照として残り、コミットした後の `npx boxglow check` で Git の参照に補完される。記録のためだけにコミットしない。全階層が必要なら `npx boxglow status` を読む。PR や外部資料は URL でもよい。
|
|
23
26
|
成果物だけ先に付けるなら `npx boxglow artifact <block> <パス>`。進捗の途中経過は `npx boxglow set <block> --progress 60`
|
|
24
|
-
5. **人間の判断が要る**: `npx boxglow ask <block> "<質問>" --options "A|B"
|
|
27
|
+
5. **人間の判断が要る**: `npx boxglow ask <block> "<質問>" --options "A|B"`。回答があるまでそのボックスは進めず、他のボックスへ移る。人の回答は `status` の「回答あり」に出る。読んだら `npx boxglow ack <block>` で引き取る (そのボックスの `start` / `done` / `set` などでも自動で引き取られる)。引き取るまで人の画面には「AI 未確認」として残り、人が答えを直せる。回答の中に問い返しがあれば、`ask` と `answer --by <自分>` で自分の答えも記録する
|
|
25
28
|
6. **詰まったら**: `npx boxglow blocked <block> --note "<困っていること>"`
|
|
26
29
|
7. **成果物の確認**: ファイルを移動・改名したら `npx boxglow check` を実行する (移動を検出してパスを付け替える。見つからなければ印が付く)
|
|
27
|
-
8.
|
|
30
|
+
8. **中断・引き継ぎの前に**: セッションの終わり・コンテキストの圧縮・他の AI や人への引き継ぎの前に、`npx boxglow checkpoint <block> --note "分かったこと; 次にすること; 未解決のこと"` で引き継ぎメモを残す (guard が有効なら `--context-token <確認トークン>` を付ける)。会話の履歴が消えても計画の中に残り、次のセッションが `resume` と `context` で読む
|
|
31
|
+
9. **報告**: 作業の最後に `npx boxglow status --brief` の内容を要約して報告する
|
|
28
32
|
|
|
29
33
|
### 構造の約束
|
|
30
34
|
|
|
31
|
-
-
|
|
35
|
+
- 最上位には「入力ノード」「最終成果物ノード」と「プロジェクトのボックス」だけがある。タスクはプロジェクトのボックスの中に置く (`add` の既定の親は最初のプロジェクトのボックス)
|
|
32
36
|
- 階層の深さに制限はない。`split` は何段でも使える
|
|
33
|
-
-
|
|
37
|
+
- 別のプロジェクトでも使えそうなボックス (例: 入力画像のモノクロ化) は `npx boxglow export-block <block> --out <名前>.boxglow-block.json` でテンプレートにし、
|
|
34
38
|
`npx boxglow import-block <path> --parent <block>` で挿入する。リポジトリの `boxglow-blocks/` に置いて共有してよい
|
|
35
39
|
|
|
36
40
|
最上位の入力が多いときは `npx boxglow group "<グループ名>"` でグループを作り、`npx boxglow group-set <入力名> <グループ名>` で分ける (例: PCIe 仕様書 / DDR 仕様書)。
|
|
@@ -51,17 +55,38 @@ boxglow.json はリポジトリ直下に置く (`npx boxglow init --name "<プ
|
|
|
51
55
|
}
|
|
52
56
|
```
|
|
53
57
|
|
|
54
|
-
`parent.<名前>`
|
|
55
|
-
|
|
58
|
+
`parent.<名前>` は分解するボックス自身の入力 / 出力。`<block>` は短い ID (B12 など。status に出る) か題名。
|
|
59
|
+
下の階層を持たないボックスの出力は 1 本 (outputs は 1 つだけ書く)。題名は「何を作るか」が分かる短い言葉にする。
|
|
56
60
|
期日や時間は `npx boxglow set <block> --due 2026-10-15 --start 2026-10-01 --estimate 8 --hours 3.5` で記録する。
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
ボックスには仕事の種類 (カテゴリ) を付ける: `--category design` (設計) / build (実装) / verify (検証) / evaluate (評価) / study (検討) / research (調査) / ui (デザイン) / improve (改善) / fix (課題解決) / docs (文書) / ops (運用) / other (その他: 迷ったとき)。add のときに付け、変えるなら `npx boxglow set <block> --category verify`。
|
|
62
|
+
結線の受け側は題名だけでよい (`npx boxglow connect "A.設計書" "B"` で B に入力「設計書」が作られてつながる。split の connections も `to: "B"` でよい)。つないだ入力の名前は供給元の出力名になり、入力側では変えられない (変えるなら供給元の出力の名前を変える。つながる先も一緒に変わる)。既存のボックスに入出力を足す / 名前を変えるのは `npx boxglow port <block> --in <名前> --out <名前> --rename <旧>=<新>` (`project` = 最初のプロジェクトのボックス。最終成果物の名前もこれで変える)。線を外すのは `npx boxglow disconnect <題名.出力名> <題名.入力名>`、ボックスそのものを消すのは `npx boxglow remove <block>` (中にボックスがあれば `--force`)。MCP ツール (`boxglow_status` / `boxglow_start` / `boxglow_done` / `boxglow_ask` など。利用するエージェントに登録済みなら使える。`.mcp.json` は Claude Code 向けで、Codex は別途登録する) は同じコマンドの別の入口で、どちらで書いても同じファイルが更新される。計画の文書は `npx boxglow export --out docs/ROADMAP.md`。
|
|
59
63
|
新しいプロジェクトでは、方針 (README や依頼文) から最上位の大項目 3〜7 個を先に作り、人に `ask` で確認してから、着手する大項目だけを `split` で分解する (先の段階は粗いまま)。`ask` の質問はそれだけで判断できるように書き、前提・比較・影響は `--context` に入れる (「これでよいですか」のように外を指さない)。候補から 1 つを選ぶ場面では、自分で決めるときも `ask ... --options "A|B|C"` と `answer --by <自分>` で記録し、選ばなかった候補を残す。方針転換は `reopen <block> --note <理由>`。すべて CLI だけで成立する (画面は人が見るためのもの)。人がいない運用なら、AI が `answer --by <自分>` で判断を記録して進める。
|
|
60
64
|
出力の名前は「具体的な成果物」にする (例: `設計書 docs/design.md`、`PR #12`、`公開 URL`、`テスト結果 (vitest 53 件)`)。「機能一式」「所見」のような抽象的な名前は避け、done のときは必ず --artifact でファイル・URL・コミットを付ける。
|
|
61
|
-
|
|
62
|
-
複数人で同じ boxglow.json を編集するなら、各自の clone で一度 `npx boxglow git-setup` を実行する (
|
|
63
|
-
複数リポジトリを 1 つの計画で管理するときは、boxglow.json を上のフォルダに置き、各リポジトリでは環境変数 BOXGLOW_FILE にその場所を入れる (
|
|
64
|
-
入力は既定で必須。無くても着手できる入力は画面で「任意」にする。status
|
|
65
|
+
すべてのボックスは「入力 → 出力」が何かにつながっているようにする (つながっていないボックスは計画の穴。最上位の入力ノードは、未接続の入力が自動で上がる)。
|
|
66
|
+
複数人で同じ boxglow.json を編集するなら、各自の clone で一度 `npx boxglow git-setup` を実行する (ボックスの単位で自動マージされ、別のボックスの変更は衝突しない)。
|
|
67
|
+
複数リポジトリを 1 つの計画で管理するときは、boxglow.json を上のフォルダに置き、各リポジトリでは環境変数 BOXGLOW_FILE にその場所を入れる (プロジェクトのボックスはリポジトリごとに 1 つ。`npx boxglow project "名前" --repo <パス>`)。
|
|
68
|
+
入力は既定で必須。無くても着手できる入力は画面で「任意」にする。status の「次の候補」は必須の入力がそろったボックスから並ぶ (「着手できる」/「必須の入力待ち」が付く)。
|
|
65
69
|
入力の説明は書かない (つながった出力側の説明が使われる)。出力の説明に形式・制約を書く。
|
|
66
70
|
|
|
71
|
+
|
|
72
|
+
### 確認トークンと引き継ぎ
|
|
73
|
+
|
|
74
|
+
確認トークンの要求 (guard) は、AI が古い指示のまま作業を進めるのを防ぐ仕組み。`setup-agent` が有効にする (それ以外の計画では `npx boxglow guard on`)。
|
|
75
|
+
有効な計画では、AI の `start` / `done` / `set` / `split` / `artifact` / `ack` / `blocked` / `review` / `leave` / `checkpoint` に `--context-token <確認トークン>` が要る。人の操作 (`--actor human`) には要求されない。
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
npx boxglow context B12 # 判断 (引き取り済みの回答を含む)・入出力の条件・引き継ぎメモを読む。出力の contextToken が確認トークン
|
|
79
|
+
npx boxglow start B12 --note "<何をするか>" --context-token <確認トークン>
|
|
80
|
+
npx boxglow ask B12 "<質問>" --options "A|B" --context-token <確認トークン>
|
|
81
|
+
# → 出力の最後の行: 新しい確認トークン: <token>
|
|
82
|
+
npx boxglow done B12 --artifact "<名前>=<パス>" --context-token <新しい確認トークン>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- **確認トークンが変わる場合 (読み直しが要る)**: 人が回答した・回答を直した、人が指示 (題名・説明・入出力の条件) を変えた、他の AI や人が引き継ぎメモを更新した。親や入力元のボックスで起きた場合も同じ。古い確認トークンは拒否されるので、`context` を読み直し、変わった内容を作業に反映してからやり直す
|
|
86
|
+
- **確認トークンが変わらない場合**: `start` / `blocked` / `review` / `leave` / `ack`、進捗・状態・期日・カテゴリの変更、`check` による成果物の確認、画面での配置の変更。同じ確認トークンを使い続けられる
|
|
87
|
+
- **自分で更新できる場合**: 自分の `ask` / `artifact` / `done` / `set` / `split` / `checkpoint` などでコンテキストが変わったときは、その出力の最後の行に「新しい確認トークン: <token>」が出る。自分で変えた内容は分かっているので、読み直さずに次の操作へ使う。`ask` / `decision` / `answer` / `reopen` は確認トークン無しでも実行できるが、新しい確認トークンが出るのは最新の確認トークンを付けたときだけ
|
|
88
|
+
- 古い確認トークンを通すために guard を無効にしない (AI が `guard off` するには最新の確認トークンが要る)
|
|
89
|
+
- MCP では `boxglow_context` と、各ツールの `contextToken` 引数を使う (新しい確認トークンはツールの結果の最後の行に出る)
|
|
90
|
+
- 「他の Boxglow が書き込み中 (ロック中)」と出て、少し待ってやり直しても解けないときは、`npx boxglow unlock` の表示 (持ち主と判定) を人に見せて解除を頼む。自分で `--actor human` を付けたり、ロックのフォルダを直接消したりしない
|
|
91
|
+
|
|
67
92
|
---
|